From e1190bc1212963f5ee8209c65a7bd3c65b0a8a49 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 19 Mar 2024 11:08:04 +0000 Subject: [PATCH 001/123] changed storage macro to look for attribute --- boxes/boxes/react/src/contracts/src/main.nr | 1 + boxes/boxes/vanilla/src/contracts/src/main.nr | 1 + .../contracts/references/storage/main.md | 5 +- .../storage/define_storage.md | 5 +- .../sandbox/references/cheat_codes.md | 28 +----- .../app_subscription_contract/src/main.nr | 1 + .../contracts/avm_test_contract/src/main.nr | 1 + .../benchmarking_contract/src/main.nr | 3 +- .../contracts/card_game_contract/src/main.nr | 1 + .../contracts/child_contract/src/main.nr | 1 + .../contracts/claim_contract/src/main.nr | 1 + .../contracts/counter_contract/src/main.nr | 1 + .../crowdfunding_contract/src/main.nr | 1 + .../delegated_on_contract/src/main.nr | 1 + .../contracts/delegator_contract/src/main.nr | 1 + .../docs_example_contract/src/main.nr | 1 + .../easy_private_token_contract/src/main.nr | 1 + .../easy_private_voting_contract/src/main.nr | 1 + .../ecdsa_account_contract/src/main.nr | 1 + .../contracts/escrow_contract/src/main.nr | 1 + .../contracts/fpc_contract/src/main.nr | 1 + .../contracts/gas_token_contract/src/main.nr | 3 +- .../inclusion_proofs_contract/src/main.nr | 1 + .../contracts/lending_contract/src/main.nr | 1 + .../pending_note_hashes_contract/src/main.nr | 1 + .../contracts/price_feed_contract/src/main.nr | 1 + .../schnorr_account_contract/src/main.nr | 1 + .../contracts/slow_tree_contract/src/main.nr | 1 + .../stateful_test_contract/src/main.nr | 6 +- .../contracts/test_contract/src/main.nr | 1 + .../token_blacklist_contract/src/main.nr | 1 + .../token_bridge_contract/src/main.nr | 1 + .../contracts/token_contract/src/main.nr | 1 + .../contracts/uniswap_contract/src/main.nr | 1 + noir/noir-repo/Cargo.lock | 96 +++---------------- noir/noir-repo/aztec_macros/src/lib.rs | 13 ++- .../aztec_macros/src/transforms/storage.rs | 56 ++++++++--- .../aztec_macros/src/utils/errors.rs | 6 ++ 38 files changed, 112 insertions(+), 137 deletions(-) diff --git a/boxes/boxes/react/src/contracts/src/main.nr b/boxes/boxes/react/src/contracts/src/main.nr index f46cfc2ce94..fbbd66a4b00 100644 --- a/boxes/boxes/react/src/contracts/src/main.nr +++ b/boxes/boxes/react/src/contracts/src/main.nr @@ -3,6 +3,7 @@ contract BoxReact { use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; + #[aztec(storage)] struct Storage { numbers: Map>, } diff --git a/boxes/boxes/vanilla/src/contracts/src/main.nr b/boxes/boxes/vanilla/src/contracts/src/main.nr index e779d259835..791e2ab7276 100644 --- a/boxes/boxes/vanilla/src/contracts/src/main.nr +++ b/boxes/boxes/vanilla/src/contracts/src/main.nr @@ -3,6 +3,7 @@ contract Vanilla { use dep::value_note::value_note::{ValueNote, VALUE_NOTE_LEN}; + #[aztec(storage)] struct Storage { numbers: Map>, } diff --git a/docs/docs/developers/contracts/references/storage/main.md b/docs/docs/developers/contracts/references/storage/main.md index b78e2fdccd2..8645931656e 100644 --- a/docs/docs/developers/contracts/references/storage/main.md +++ b/docs/docs/developers/contracts/references/storage/main.md @@ -30,11 +30,8 @@ Public state follows the Ethereum style account model, where each contract has i ## Storage struct -:::info -The struct **must** be called `Storage` for the Aztec.nr library to properly handle it (this will be relaxed in the future). -::: - ```rust +#[aztec(storage)] struct Storage { // public state variables // private state variables diff --git a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md index 5781a404f4f..6c913bd6b3a 100644 --- a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md +++ b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md @@ -8,11 +8,8 @@ To learn more about how storage works in Aztec, read [the concepts](../../../../ [See the storage reference](../../references/storage/main.md). -:::info -The struct **must** be called `Storage` for the Aztec.nr library to properly handle it (this will be relaxed in the future). -::: - ```rust +#[aztec(storage)] struct Storage { // public state variables // private state variables diff --git a/docs/docs/developers/sandbox/references/cheat_codes.md b/docs/docs/developers/sandbox/references/cheat_codes.md index 2f206adcae0..99968914df2 100644 --- a/docs/docs/developers/sandbox/references/cheat_codes.md +++ b/docs/docs/developers/sandbox/references/cheat_codes.md @@ -461,18 +461,11 @@ The baseSlot is specified in the Aztec.nr contract. #### Example ```rust +#[aztec(storage)] struct Storage { balances: Map>, } -impl Storage { - fn init() -> Self { - Storage { - balances: Map::new(1, |slot| PublicMutable::new(slot)), - } - } -} - contract Token { ... } @@ -499,18 +492,11 @@ Note: One Field element occupies a storage slot. Hence, structs with multiple fi #### Example ```rust +#[aztec(storage)] struct Storage { balances: Map>, } -impl Storage { - fn init(context: Context) -> Self { - Storage { - balances: Map::new(context, 1, |context, slot| PublicMutable::new(context, slot)), - } - } -} - contract Token { ... } @@ -538,20 +524,12 @@ Note: One Field element occupies a storage slot. Hence, structs with multiple fi #### Example ```rust +#[aztec(storage)] struct Storage { ... pending_shields: Set, } -impl Storage { - fn init() -> Self { - Storage { - ... - pending_shields: Set::new(context, 5, TransparentNoteMethods), - } - } -} - contract Token { ... } diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr index 23837400645..37c2edf31b7 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr @@ -17,6 +17,7 @@ contract AppSubscription { use crate::subscription_note::{SubscriptionNote, SUBSCRIPTION_NOTE_LEN}; + #[aztec(storage)] struct Storage { // The following is only needed in private but we use ShareImmutable here instead of PrivateImmutable because // the value can be publicly known and SharedImmutable provides us with a better devex here because we don't diff --git a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr index f6f628e848e..0483b7a5f4d 100644 --- a/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_test_contract/src/main.nr @@ -35,6 +35,7 @@ contract AvmTest { // avm lib use dep::aztec::avm::hash::{keccak256, poseidon, sha256}; + #[aztec(storage)] struct Storage { single: PublicMutable, list: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr index 87d943fef6a..ae9b0bb7e04 100644 --- a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr @@ -10,8 +10,9 @@ contract Benchmarking { }; use dep::value_note::{utils::{increment, decrement}, value_note::ValueNote}; - use dep::aztec::{context::{Context}}; + use dep::aztec::{context::Context}; + #[aztec(storage)] struct Storage { notes: Map>, balances: Map>, diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr index 789614346ec..1e54f0c2866 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr @@ -12,6 +12,7 @@ contract CardGame { use crate::cards::{PACK_CARDS, Deck, Card, get_pack_cards, compute_deck_strength}; use crate::game::{NUMBER_OF_PLAYERS, NUMBER_OF_CARDS_DECK, PLAYABLE_CARDS, PlayerEntry, Game, GAME_SERIALIZED_LEN}; + #[aztec(storage)] struct Storage { collections: Map, game_decks: Map>, diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 0ba6c5946cf..08950786eae 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -8,6 +8,7 @@ contract Child { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr index 7fac0994785..6cac882ba6f 100644 --- a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr @@ -9,6 +9,7 @@ contract Claim { use dep::value_note::value_note::ValueNote; use interfaces::Token; + #[aztec(storage)] struct Storage { // Address of a contract based on whose notes we distribute the rewards target_contract: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr b/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr index fd846f832a5..c2b88b4726b 100644 --- a/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/counter_contract/src/main.nr @@ -7,6 +7,7 @@ contract Counter { // docs:end:imports // docs:start:storage_struct + #[aztec(storage)] struct Storage { counters: Map, } diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index a48a17e3da5..d26c3c64d9a 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -21,6 +21,7 @@ contract Crowdfunding { } } + #[aztec(storage)] struct Storage { // Token used for donations (e.g. DAI) donation_token: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr index ea3f6dea736..c0a9fca00e8 100644 --- a/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegated_on_contract/src/main.nr @@ -6,6 +6,7 @@ contract DelegatedOn { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 46417912fa1..38d45edec6b 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -6,6 +6,7 @@ contract Delegator { }; use dep::value_note::value_note::ValueNote; + #[aztec(storage)] struct Storage { current_value: PublicMutable, a_private_value: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 7b13ac0dc53..661b1a1516d 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,6 +23,7 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable // docs:start:storage-leader-declaration diff --git a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr index 6d398f9fb2a..a9081073066 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr @@ -4,6 +4,7 @@ contract EasyPrivateToken { use dep::value_note::{balance_utils, value_note::ValueNote}; use dep::easy_private_state::EasyPrivateUint; + #[aztec(storage)] struct Storage { balances: Map, } diff --git a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr index ddcfcb3bcc9..76cc88e1201 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr @@ -7,6 +7,7 @@ contract EasyPrivateVoting { use dep::aztec::context::Context; // docs:end:imports // docs:start:storage_struct + #[aztec(storage)] struct Storage { admin: PublicMutable, // admin can end vote tally: Map>, // we will store candidate as key and number of votes as value diff --git a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr index 97733ad1a85..d7da24dbf67 100644 --- a/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/ecdsa_account_contract/src/main.nr @@ -16,6 +16,7 @@ contract EcdsaAccount { use crate::ecdsa_public_key_note::EcdsaPublicKeyNote; + #[aztec(storage)] struct Storage { public_key: PrivateImmutable, } diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr index f02f1c8b679..709c65b3ec5 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr @@ -6,6 +6,7 @@ contract Escrow { use dep::address_note::address_note::AddressNote; + #[aztec(storage)] struct Storage { owner: PrivateImmutable, } diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index da3f517b69a..deb23fa21d9 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -6,6 +6,7 @@ contract FPC { use crate::interfaces::Token; + #[aztec(storage)] struct Storage { other_asset: SharedImmutable, gas_token_address: SharedImmutable, diff --git a/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr index 84af6c6af01..ba8ecf6c608 100644 --- a/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr @@ -2,10 +2,11 @@ mod lib; contract GasToken { use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}}; - use dep::aztec::{hash::{compute_secret_hash}, state_vars::{PublicMutable, Map}}; + use dep::aztec::{hash::compute_secret_hash, state_vars::{PublicMutable, Map}}; use crate::lib::{calculate_fee, get_bridge_gas_msg_hash}; + #[aztec(storage)] struct Storage { balances: Map>, } diff --git a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr index d425ad10d51..a4f40af6fc3 100644 --- a/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/inclusion_proofs_contract/src/main.nr @@ -26,6 +26,7 @@ contract InclusionProofs { // docs:start:value_note_imports use dep::value_note::value_note::ValueNote; // docs:end:value_note_imports + #[aztec(storage)] struct Storage { private_values: Map>, public_value: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index c43fbf2b3da..42bcdca5b9f 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -20,6 +20,7 @@ contract Lending { use crate::interfaces::{Token, Lending, PriceFeed}; // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { collateral_asset: PublicMutable, stable_coin: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr index 7d3fcd593b8..6dffaa99e91 100644 --- a/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/pending_note_hashes_contract/src/main.nr @@ -11,6 +11,7 @@ contract PendingNoteHashes { use dep::value_note::{balance_utils, filter::filter_notes_min_sum, value_note::{VALUE_NOTE_LEN, ValueNote}}; use dep::aztec::context::{PublicContext, Context}; + #[aztec(storage)] struct Storage { balances: Map>, } diff --git a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr index 31cfcb9fe70..c4afaacf753 100644 --- a/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/price_feed_contract/src/main.nr @@ -6,6 +6,7 @@ contract PriceFeed { use crate::asset::Asset; // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { assets: Map>, } diff --git a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr index b9d4890ee93..bc1d49931d8 100644 --- a/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/schnorr_account_contract/src/main.nr @@ -17,6 +17,7 @@ contract SchnorrAccount { use crate::public_key_note::{PublicKeyNote, PUBLIC_KEY_NOTE_LEN}; + #[aztec(storage)] struct Storage { // docs:start:storage signing_public_key: PrivateImmutable, diff --git a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr index b2ded7de843..2fa7b935a4b 100644 --- a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr @@ -28,6 +28,7 @@ contract SlowTree { global EMPTY_ROOT: Field = 5785871043333994658400733180052743689641713274194136017445890613179954325976; + #[aztec(storage)] struct Storage { trees: Map>, } diff --git a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr index 2a2da7ae8ce..7532cec4316 100644 --- a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr @@ -3,11 +3,11 @@ contract StatefulTest { use dep::aztec::prelude::{PrivateContext, NoteHeader, Map, PublicMutable, PrivateSet, AztecAddress, FunctionSelector}; use dep::value_note::{balance_utils, utils::{increment, decrement}, value_note::{VALUE_NOTE_LEN, ValueNote}}; use dep::aztec::{ - deploy::{deploy_contract as aztec_deploy_contract}, context::{PublicContext, Context}, - oracle::get_contract_instance::get_contract_instance, - initializer::assert_is_initialized, + deploy::deploy_contract as aztec_deploy_contract, context::{PublicContext, Context}, + oracle::get_contract_instance::get_contract_instance, initializer::assert_is_initialized }; + #[aztec(storage)] struct Storage { notes: Map>, public_values: Map>, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index 24311d27087..e559f888abe 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -33,6 +33,7 @@ contract Test { value: Field, } + #[aztec(storage)] struct Storage { example_constant: PrivateImmutable, example_set: PrivateSet, diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index cd046614445..aaf2548f66f 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -30,6 +30,7 @@ contract TokenBlacklist { use crate::interfaces::SlowMap; // docs:end:interface + #[aztec(storage)] struct Storage { admin: PublicMutable, balances: BalancesMap, diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr index c02dbe0fd4d..673e4b8aa7f 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr @@ -18,6 +18,7 @@ contract TokenBridge { // docs:start:token_bridge_storage_and_constructor // Storage structure, containing all storage, and specifying what slots they use. + #[aztec(storage)] struct Storage { token: PublicMutable, } diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index 27a0b12ff80..edacd0c85bf 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -28,6 +28,7 @@ contract Token { // docs:end::imports // docs:start:storage_struct + #[aztec(storage)] struct Storage { // docs:start:storage_admin admin: PublicMutable, diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr index c6a08d9c2bd..a59a3df2b80 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr @@ -17,6 +17,7 @@ contract Uniswap { use crate::interfaces::{Token, TokenBridge}; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; + #[aztec(storage)] struct Storage { // like with account contracts, stores the approval message on a slot and tracks if they are active approved_action: Map>, diff --git a/noir/noir-repo/Cargo.lock b/noir/noir-repo/Cargo.lock index 3cb7c48dfb2..dbba248a4b2 100644 --- a/noir/noir-repo/Cargo.lock +++ b/noir/noir-repo/Cargo.lock @@ -542,9 +542,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitmaps" @@ -1607,12 +1607,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -2569,16 +2569,16 @@ version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "libc", "redox_syscall 0.4.1", ] [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" [[package]] name = "lock_api" @@ -3131,7 +3131,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "crossbeam-channel", "filetime", "fsevent-sys", @@ -3585,7 +3585,7 @@ checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.2", + "bitflags 2.5.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -4074,15 +4074,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -5548,7 +5548,7 @@ version = "0.121.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "indexmap 2.0.0", "semver", ] @@ -5652,15 +5652,6 @@ dependencies = [ "windows-targets 0.48.1", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.4", -] - [[package]] name = "windows-targets" version = "0.48.1" @@ -5676,33 +5667,12 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] -[[package]] -name = "windows-targets" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" -dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" - [[package]] name = "windows_aarch64_msvc" version = "0.33.0" @@ -5715,12 +5685,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" - [[package]] name = "windows_i686_gnu" version = "0.33.0" @@ -5733,12 +5697,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" -[[package]] -name = "windows_i686_gnu" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" - [[package]] name = "windows_i686_msvc" version = "0.33.0" @@ -5751,12 +5709,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" -[[package]] -name = "windows_i686_msvc" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" - [[package]] name = "windows_x86_64_gnu" version = "0.33.0" @@ -5769,24 +5721,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" - [[package]] name = "windows_x86_64_msvc" version = "0.33.0" @@ -5799,12 +5739,6 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" - [[package]] name = "winnow" version = "0.5.0" diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 0fe450e6cb1..16d7d82f69b 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -89,12 +89,15 @@ fn transform( fn transform_module(module: &mut SortedModule) -> Result { let mut has_transformed_module = false; - // Check for a user defined storage struct - let storage_defined = check_for_storage_definition(module); - let storage_implemented = check_for_storage_implementation(module); + // Check for a user defined storage stru - if storage_defined && !storage_implemented { - generate_storage_implementation(module)?; + let maybe_storage_struct_name = check_for_storage_definition(module)?; + let storage_defined = maybe_storage_struct_name.is_some(); + + if let Some(storage_struct_name) = maybe_storage_struct_name { + if !check_for_storage_implementation(module, &storage_struct_name) { + generate_storage_implementation(module, &storage_struct_name)?; + } } for structure in module.types.iter() { diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 40a094f78e3..833fc4e05a8 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -9,15 +9,16 @@ use noirc_frontend::{ node_interner::{TraitId, TraitImplKind}, parser::SortedModule, BlockExpression, Expression, ExpressionKind, FunctionDefinition, Ident, Literal, NoirFunction, - PathKind, Pattern, StatementKind, Type, TypeImpl, UnresolvedType, UnresolvedTypeData, + NoirStruct, PathKind, Pattern, StatementKind, Type, TypeImpl, UnresolvedType, + UnresolvedTypeData, }; use crate::{ chained_dep, chained_path, utils::{ ast_utils::{ - call, expression, ident, ident_path, lambda, make_statement, make_type, pattern, - return_type, variable, variable_path, + call, expression, ident, ident_path, is_custom_attribute, lambda, make_statement, + make_type, pattern, return_type, variable, variable_path, }, errors::AztecMacroError, hir_utils::{collect_crate_structs, collect_traits}, @@ -25,15 +26,36 @@ use crate::{ }; // Check to see if the user has defined a storage struct -pub fn check_for_storage_definition(module: &SortedModule) -> bool { - module.types.iter().any(|r#struct| r#struct.name.0.contents == "Storage") +pub fn check_for_storage_definition( + module: &SortedModule, +) -> Result, AztecMacroError> { + let result: Vec<&NoirStruct> = module + .types + .iter() + .filter_map(|r#struct| { + if r#struct.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) { + Some(r#struct) + } else { + None + } + }) + .collect(); + if result.len() > 1 { + return Err(AztecMacroError::MultipleStorageDefinitions { + span: result.first().map(|res| res.name.span()), + }); + } + Ok(result.iter().map(|&r#struct| r#struct.name.0.contents.clone()).next()) } // Check to see if the user has defined a storage struct -pub fn check_for_storage_implementation(module: &SortedModule) -> bool { +pub fn check_for_storage_implementation( + module: &SortedModule, + storage_struct_name: &String, +) -> bool { module.impls.iter().any(|r#impl| match &r#impl.object_type.typ { UnresolvedTypeData::Named(path, _, _) => { - path.segments.last().is_some_and(|segment| segment.0.contents == "Storage") + path.segments.last().is_some_and(|segment| segment.0.contents == *storage_struct_name) } _ => false, }) @@ -117,9 +139,15 @@ pub fn generate_storage_field_constructor( /// /// Storage slots are generated as 0 and will be populated using the information from the HIR /// at a later stage. -pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), AztecMacroError> { - let definition = - module.types.iter().find(|r#struct| r#struct.name.0.contents == "Storage").unwrap(); +pub fn generate_storage_implementation( + module: &mut SortedModule, + storage_struct_name: &String, +) -> Result<(), AztecMacroError> { + let definition = module + .types + .iter() + .find(|r#struct| r#struct.name.0.contents == *storage_struct_name) + .unwrap(); let slot_zero = expression(ExpressionKind::Literal(Literal::Integer( FieldElement::from(i128::from(0)), @@ -136,7 +164,7 @@ pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), .collect(); let storage_constructor_statement = make_statement(StatementKind::Expression(expression( - ExpressionKind::constructor((chained_path!("Storage"), field_constructors)), + ExpressionKind::constructor((chained_path!(storage_struct_name), field_constructors)), ))); let init = NoirFunction::normal(FunctionDefinition::normal( @@ -157,7 +185,7 @@ pub fn generate_storage_implementation(module: &mut SortedModule) -> Result<(), let storage_impl = TypeImpl { object_type: UnresolvedType { - typ: UnresolvedTypeData::Named(chained_path!("Storage"), vec![], true), + typ: UnresolvedTypeData::Named(chained_path!(storage_struct_name), vec![], true), span: Some(Span::default()), }, type_span: Span::default(), @@ -243,7 +271,9 @@ pub fn assign_storage_slots( let interner: &mut NodeInterner = context.def_interner.borrow_mut(); let r#struct = interner.get_struct(struct_id); let file_id = r#struct.borrow().location.file; - if r#struct.borrow().name.0.contents == "Storage" && r#struct.borrow().id.krate().is_root() + let attributes = interner.struct_attributes(&struct_id); + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) + && r#struct.borrow().id.krate().is_root() { let init_id = interner .lookup_method( diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 48186555eff..509322b3db2 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -11,6 +11,7 @@ pub enum AztecMacroError { UnsupportedStorageType { span: Option, typ: UnresolvedTypeData }, CouldNotAssignStorageSlots { secondary_message: Option }, CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, + MultipleStorageDefinitions { span: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -46,6 +47,11 @@ impl From for MacroError { AztecMacroError::CouldNotImplementNoteInterface { span, secondary_message } => MacroError { primary_message: "Could not implement automatic methods for note, please provide an implementation of the NoteInterface trait".to_string(), secondary_message, + span + }, + AztecMacroError::MultipleStorageDefinitions { span } => MacroError { + primary_message: "Only one struct can be tagged as #[aztec(storage)]".to_string(), + secondary_message: None, span, }, AztecMacroError::EventError { span, message } => MacroError { From c41eba88c49398fb1611ff1f64be6496a647ea17 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:35:24 +0000 Subject: [PATCH 002/123] added abi exports to contract artifact --- .../src/events/class_registered.nr | 4 +- .../events/private_function_broadcasted.nr | 2 +- .../unconstrained_function_broadcasted.nr | 2 +- .../src/events/instance_deployed.nr | 4 +- .../crowdfunding_contract/src/main.nr | 2 +- .../docs_example_contract/src/main.nr | 45 +++++++- .../contracts/test_contract/src/main.nr | 2 +- noir/noir-repo/aztec_macros/src/lib.rs | 9 +- .../aztec_macros/src/transforms/events.rs | 8 +- .../aztec_macros/src/utils/ast_utils.rs | 2 + .../compiler/noirc_driver/src/contract.rs | 15 +-- .../compiler/noirc_driver/src/lib.rs | 48 +++++++-- .../noirc_frontend/src/ast/statement.rs | 13 ++- .../compiler/noirc_frontend/src/debug/mod.rs | 3 + .../src/hir/def_collector/dc_mod.rs | 9 +- .../noirc_frontend/src/hir/def_map/mod.rs | 49 ++++++++- .../src/hir/resolution/resolver.rs | 2 + .../noirc_frontend/src/hir_def/stmt.rs | 2 + .../noirc_frontend/src/lexer/token.rs | 7 +- .../noirc_frontend/src/node_interner.rs | 12 ++- .../noirc_frontend/src/parser/parser.rs | 13 ++- .../src/parser/parser/attributes.rs | 23 ++++ .../src/parser/parser/structs.rs | 32 +----- noir/noir-repo/compiler/wasm/src/compile.rs | 9 +- .../compiler/wasm/src/compile_new.rs | 2 +- .../tooling/nargo/src/artifacts/contract.rs | 24 +++-- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 100 ++++++++++++++---- .../tooling/noirc_abi/src/serialization.rs | 34 +++++- 28 files changed, 366 insertions(+), 111 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr index 9cf549d6c57..3cbea7c57ca 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/class_registered.nr @@ -1,10 +1,10 @@ use dep::aztec::protocol_types::{ contract_class_id::ContractClassId, constants::{MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE}, - traits::{Serialize} + traits::Serialize }; -// #[event] +// #[aztec(event)] struct ContractClassRegistered { contract_class_id: ContractClassId, version: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr index ede896c6ddc..8e587fe454e 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/private_function_broadcasted.nr @@ -31,7 +31,7 @@ impl Serialize for } } -// #[event] +// #[aztec(event)] struct ClassPrivateFunctionBroadcasted { contract_class_id: ContractClassId, artifact_metadata_hash: Field, diff --git a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr index 6731a3b2a63..c7d9f4c6d07 100644 --- a/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr +++ b/noir-projects/noir-contracts/contracts/contract_class_registerer_contract/src/events/unconstrained_function_broadcasted.nr @@ -28,7 +28,7 @@ impl Serialize { + leader: Storable, + legendary_card: Storable, + profiles: Storable, + set: Storable, + private_immutable: Storable, + shared_immutable: Storable, + minters: Storable, + public_immutable: Storable, + } + + struct StorageNotes { + card_note: StorableNote, + } + + struct StorageLayout { + fields: StorageFields, + notes: StorageNotes, + } + + #[abi(event)] + struct WithdrawalProcessed { + who: AztecAddress, + amount: u64, + } + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout { + fields: StorageFields { + leader: Storable { slot: 1, typ: "PublicMutable" }, + legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, + profiles: Storable { slot: 4, typ: "Map>" }, + set: Storable { slot: 5, typ: "PrivateSet" }, + private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, + shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, + minters: Storable { slot: 8, typ: "Map" }, + public_immutable: Storable { slot: 9, typ: "PublicImmutable" } + }, + notes: StorageNotes { + card_note: StorableNote { id: 2, typ: "CardNote" } + } + }; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index e559f888abe..4732ffb3ab8 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -28,7 +28,7 @@ contract Test { use dep::field_note::field_note::FieldNote; use dep::value_note::value_note::ValueNote; - #[event] + #[aztec(event)] struct ExampleEvent { value: Field, } diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 16d7d82f69b..03df02a9ffe 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -14,10 +14,7 @@ use transforms::{ use noirc_frontend::{ hir::def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}, - macros_api::{ - CrateId, FileId, HirContext, MacroError, MacroProcessor, SecondaryAttribute, SortedModule, - Span, - }, + macros_api::{CrateId, FileId, HirContext, MacroError, MacroProcessor, SortedModule, Span}, }; use utils::{ @@ -100,8 +97,8 @@ fn transform_module(module: &mut SortedModule) -> Result } } - for structure in module.types.iter() { - if structure.attributes.iter().any(|attr| matches!(attr, SecondaryAttribute::Event)) { + for structure in module.types.iter_mut() { + if structure.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { module.impls.push(generate_selector_impl(structure)); has_transformed_module = true; } diff --git a/noir/noir-repo/aztec_macros/src/transforms/events.rs b/noir/noir-repo/aztec_macros/src/transforms/events.rs index b02709efacb..55f886c489b 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/events.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/events.rs @@ -16,7 +16,8 @@ use crate::{ chained_dep, utils::{ ast_utils::{ - call, expression, ident, ident_path, make_statement, make_type, path, variable_path, + call, expression, ident, ident_path, is_custom_attribute, make_statement, make_type, + path, variable_path, }, constants::SIGNATURE_PLACEHOLDER, errors::AztecMacroError, @@ -38,7 +39,8 @@ use crate::{ /// This allows developers to emit events without having to write the signature of the event every time they emit it. /// The signature cannot be known at this point since types are not resolved yet, so we use a signature placeholder. /// It'll get resolved after by transforming the HIR. -pub fn generate_selector_impl(structure: &NoirStruct) -> TypeImpl { +pub fn generate_selector_impl(structure: &mut NoirStruct) -> TypeImpl { + structure.attributes.push(SecondaryAttribute::Abi("events".to_string())); let struct_type = make_type(UnresolvedTypeData::Named(path(structure.name.clone()), vec![], true)); @@ -170,7 +172,7 @@ pub fn transform_events( ) -> Result<(), (AztecMacroError, FileId)> { for struct_id in collect_crate_structs(crate_id, context) { let attributes = context.def_interner.struct_attributes(&struct_id); - if attributes.iter().any(|attr| matches!(attr, SecondaryAttribute::Event)) { + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { transform_event(struct_id, &mut context.def_interner)?; } } diff --git a/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs b/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs index bdcbad646c2..eb8f5a4156d 100644 --- a/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/ast_utils.rs @@ -67,6 +67,7 @@ pub fn mutable_assignment(name: &str, assigned_to: Expression) -> Statement { pattern: mutable(name), r#type: make_type(UnresolvedTypeData::Unspecified), expression: assigned_to, + attributes: vec![], })) } @@ -82,6 +83,7 @@ pub fn assignment(name: &str, assigned_to: Expression) -> Statement { pattern: pattern(name), r#type: make_type(UnresolvedTypeData::Unspecified), expression: assigned_to, + attributes: vec![], })) } diff --git a/noir/noir-repo/compiler/noirc_driver/src/contract.rs b/noir/noir-repo/compiler/noirc_driver/src/contract.rs index 9a0e25a321b..5c0f2f81b1e 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/contract.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/contract.rs @@ -1,14 +1,20 @@ use serde::{Deserialize, Serialize}; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use acvm::acir::circuit::Program; use fm::FileId; -use noirc_abi::{Abi, ContractEvent}; +use noirc_abi::{Abi, AbiType, AbiValue}; use noirc_errors::debug_info::DebugInfo; use noirc_evaluator::errors::SsaReport; use super::debug::DebugFile; +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct CompiledContractOutputs { + pub structs: HashMap>, + pub globals: HashMap>, +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CompiledContract { pub noir_version: String, @@ -19,10 +25,7 @@ pub struct CompiledContract { /// stored in this `Vector`. pub functions: Vec, - /// All the events defined inside the contract scope. - /// An event is a struct value that can be emitted via oracles - /// by any contract function during execution. - pub events: Vec, + pub outputs: CompiledContractOutputs, pub file_map: BTreeMap, pub warnings: Vec, diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index bc3062e5807..481f8f3b663 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -7,7 +7,7 @@ use acvm::acir::circuit::{ExpressionWidth, Program}; use clap::Args; use fm::{FileId, FileManager}; use iter_extended::vecmap; -use noirc_abi::{AbiParameter, AbiType, ContractEvent}; +use noirc_abi::{AbiParameter, AbiType, AbiValue}; use noirc_errors::{CustomDiagnostic, FileDiagnostic}; use noirc_evaluator::create_circuit; use noirc_evaluator::errors::RuntimeError; @@ -19,6 +19,7 @@ use noirc_frontend::macros_api::MacroProcessor; use noirc_frontend::monomorphization::{monomorphize, monomorphize_debug, MonomorphizationError}; use noirc_frontend::node_interner::FuncId; use noirc_frontend::token::SecondaryAttribute; +use std::collections::HashMap; use std::path::Path; use thiserror::Error; use tracing::info; @@ -31,7 +32,7 @@ mod stdlib; use debug::filter_relevant_files; -pub use contract::{CompiledContract, ContractFunction}; +pub use contract::{CompiledContract, CompiledContractOutputs, ContractFunction}; pub use debug::DebugFile; pub use program::CompiledProgram; @@ -424,18 +425,45 @@ fn compile_contract_inner( let debug_infos: Vec<_> = functions.iter().map(|function| function.debug.clone()).collect(); let file_map = filter_relevant_files(&debug_infos, &context.file_manager); - Ok(CompiledContract { - name: contract.name, - events: contract - .events + let mut out_structs = HashMap::new(); + + out_structs.extend(contract.outputs.structs.iter().map(|(tag, structs)| { + let structs = structs .iter() - .map(|event_id| { - let typ = context.def_interner.get_struct(*event_id); + .map(|struct_id| { + let typ = context.def_interner.get_struct(*struct_id); let typ = typ.borrow(); - ContractEvent::from_struct_type(context, &typ) + let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { + (name, AbiType::from_type(context, &typ)) + }); + let path = context.fully_qualified_struct_path(context.root_crate_id(), typ.id); + AbiType::Struct { path, fields } }) - .collect(), + .collect(); + (tag.to_string(), structs) + })); + + let mut out_globals = HashMap::new(); + + out_globals.extend(contract.outputs.globals.iter().map(|(tag, globals)| { + let globals: Vec = globals + .iter() + .map(|global_id| { + let let_statement = + context.def_interner.get_global_let_statement(*global_id).unwrap(); + let hir_expression = context.def_interner.expression(&let_statement.expression); + AbiValue::from_hir_expression(context, hir_expression) + }) + .collect(); + (tag.to_string(), globals) + })); + + let mut out_fns = HashMap::new(); + + Ok(CompiledContract { + name: contract.name, functions, + outputs: CompiledContractOutputs { structs: out_structs, globals: out_globals }, file_map, noir_version: NOIR_ARTIFACT_VERSION_STRING.to_string(), warnings, diff --git a/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs b/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs index fb7f520ee71..1fc932da6dd 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/ast/statement.rs @@ -2,6 +2,7 @@ use std::fmt::Display; use std::sync::atomic::{AtomicU32, Ordering}; use crate::lexer::token::SpannedToken; +use crate::macros_api::SecondaryAttribute; use crate::parser::{ParserError, ParserErrorReason}; use crate::token::Token; use crate::{ @@ -107,7 +108,7 @@ impl StatementKind { pub fn new_let( ((pattern, r#type), expression): ((Pattern, UnresolvedType), Expression), ) -> StatementKind { - StatementKind::Let(LetStatement { pattern, r#type, expression }) + StatementKind::Let(LetStatement { pattern, r#type, expression, attributes: vec![] }) } /// Create a Statement::Assign value, desugaring any combined operators like += if needed. @@ -405,13 +406,17 @@ pub struct LetStatement { pub pattern: Pattern, pub r#type: UnresolvedType, pub expression: Expression, + pub attributes: Vec, } impl LetStatement { pub fn new_let( - ((pattern, r#type), expression): ((Pattern, UnresolvedType), Expression), + (((pattern, r#type), expression), attributes): ( + ((Pattern, UnresolvedType), Expression), + Vec, + ), ) -> LetStatement { - LetStatement { pattern, r#type, expression } + LetStatement { pattern, r#type, expression, attributes } } } @@ -556,6 +561,7 @@ impl ForRange { pattern: Pattern::Identifier(array_ident.clone()), r#type: UnresolvedType::unspecified(), expression: array, + attributes: vec![], }), span: array_span, }; @@ -598,6 +604,7 @@ impl ForRange { pattern: Pattern::Identifier(identifier), r#type: UnresolvedType::unspecified(), expression: Expression::new(loop_element, array_span), + attributes: vec![], }), span: array_span, }; diff --git a/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs index 05916502d73..8c7abe18b6d 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/debug/mod.rs @@ -145,6 +145,7 @@ impl DebugInstrumenter { pattern: ast::Pattern::Identifier(ident("__debug_expr", ret_expr.span)), r#type: ast::UnresolvedType::unspecified(), expression: ret_expr.clone(), + attributes: vec![], }), span: ret_expr.span, }; @@ -246,6 +247,7 @@ impl DebugInstrumenter { kind: ast::ExpressionKind::Block(ast::BlockExpression(block_stmts)), span: let_stmt.expression.span, }, + attributes: vec![], }), span: *span, } @@ -271,6 +273,7 @@ impl DebugInstrumenter { pattern: ast::Pattern::Identifier(ident("__debug_expr", assign_stmt.expression.span)), r#type: ast::UnresolvedType::unspecified(), expression: assign_stmt.expression.clone(), + attributes: vec![], }); let expression_span = assign_stmt.expression.span; let new_assign_stmt = match &assign_stmt.lvalue { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs index fcb20c740c7..6fbb3b67546 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs @@ -102,8 +102,12 @@ impl<'a> ModCollector<'a> { for global in globals { let name = global.pattern.name_ident().clone(); - let global_id = - context.def_interner.push_empty_global(name.clone(), self.module_id, self.file_id); + let global_id = context.def_interner.push_empty_global( + name.clone(), + self.module_id, + self.file_id, + global.attributes.clone(), + ); // Add the statement to the scope so its path can be looked up later let result = self.def_collector.def_map.modules[self.module_id.0] @@ -455,6 +459,7 @@ impl<'a> ModCollector<'a> { name.clone(), trait_id.0.local_id, self.file_id, + vec![], ); if let Err((first_def, second_def)) = self.def_collector.def_map.modules diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 157227f763e..1cd91db8ce4 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -2,13 +2,13 @@ use crate::graph::CrateId; use crate::hir::def_collector::dc_crate::{CompilationError, DefCollector}; use crate::hir::Context; use crate::macros_api::MacroProcessor; -use crate::node_interner::{FuncId, NodeInterner, StructId}; +use crate::node_interner::{FuncId, GlobalId, NodeInterner, StructId}; use crate::parser::{parse_program, ParsedModule, ParserError}; use crate::token::{FunctionAttribute, SecondaryAttribute, TestScope}; use arena::{Arena, Index}; use fm::{FileId, FileManager}; use noirc_errors::Location; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; mod module_def; pub use module_def::*; mod item_scope; @@ -229,8 +229,45 @@ impl CrateDefMap { }) .collect(); + let mut outputs = + ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; + + interner.get_all_globals().iter().for_each(|global_info| { + interner.global_attributes(&global_info.id).iter().for_each(|attr| { + match attr { + SecondaryAttribute::Abi(tag) => { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id) + } else { + outputs + .globals + .insert(tag.to_string(), vec![global_info.id]); + } + } + _ => (), + } + }) + }); + + module.type_definitions().for_each(|id| match id { + ModuleDefId::TypeId(struct_id) => interner + .struct_attributes(&struct_id) + .iter() + .for_each(|attr| match attr { + SecondaryAttribute::Abi(tag) => { + if let Some(tagged) = outputs.structs.get_mut(tag) { + tagged.push(struct_id) + } else { + outputs.structs.insert(tag.to_string(), vec![struct_id]); + } + } + _ => (), + }), + _ => (), + }); + let name = self.get_module_path(id, module.parent); - Some(Contract { name, location: module.location, functions, events }) + Some(Contract { name, location: module.location, functions, events, outputs }) } else { None } @@ -283,6 +320,11 @@ pub struct ContractFunctionMeta { pub is_entry_point: bool, } +pub struct ContractOutputs { + pub structs: HashMap>, + pub globals: HashMap>, +} + /// A 'contract' in Noir source code with a given name, functions and events. /// This is not an AST node, it is just a convenient form to return for CrateDefMap::get_all_contracts. pub struct Contract { @@ -291,6 +333,7 @@ pub struct Contract { pub location: Location, pub functions: Vec, pub events: Vec, + pub outputs: ContractOutputs, } /// Given a FileId, fetch the File, from the FileManager and parse it's content diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 3fbde8a890b..ec6c33ce3bb 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -1163,6 +1163,7 @@ impl<'a> Resolver<'a> { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), expression, + attributes: let_stmt.attributes, }) } @@ -1175,6 +1176,7 @@ impl<'a> Resolver<'a> { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), expression, + attributes: let_stmt.attributes, }) } StatementKind::Constrain(constrain_stmt) => { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs index 4e5f718cf47..21fda446bfa 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir_def/stmt.rs @@ -1,4 +1,5 @@ use super::expr::HirIdent; +use crate::macros_api::SecondaryAttribute; use crate::node_interner::ExprId; use crate::{Ident, Type}; use fm::FileId; @@ -26,6 +27,7 @@ pub struct HirLetStatement { pub pattern: HirPattern, pub r#type: Type, pub expression: ExprId, + pub attributes: Vec, } impl HirLetStatement { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs b/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs index 4432a3f9e07..bab9a668e3b 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/lexer/token.rs @@ -505,6 +505,7 @@ impl Attribute { Attribute::Secondary(SecondaryAttribute::ContractLibraryMethod) } ["event"] => Attribute::Secondary(SecondaryAttribute::Event), + ["abi", tag] => Attribute::Secondary(SecondaryAttribute::Abi(tag.to_string())), ["export"] => Attribute::Secondary(SecondaryAttribute::Export), ["deprecated", name] => { if !name.starts_with('"') && !name.ends_with('"') { @@ -593,6 +594,7 @@ pub enum SecondaryAttribute { Export, Field(String), Custom(String), + Abi(String), } impl fmt::Display for SecondaryAttribute { @@ -607,6 +609,7 @@ impl fmt::Display for SecondaryAttribute { SecondaryAttribute::Event => write!(f, "#[event]"), SecondaryAttribute::Export => write!(f, "#[export]"), SecondaryAttribute::Field(ref k) => write!(f, "#[field({k})]"), + SecondaryAttribute::Abi(ref k) => write!(f, "#[abi({k})]"), } } } @@ -628,7 +631,9 @@ impl AsRef for SecondaryAttribute { match self { SecondaryAttribute::Deprecated(Some(string)) => string, SecondaryAttribute::Deprecated(None) => "", - SecondaryAttribute::Custom(string) | SecondaryAttribute::Field(string) => string, + SecondaryAttribute::Custom(string) + | SecondaryAttribute::Field(string) + | SecondaryAttribute::Abi(string) => string, SecondaryAttribute::ContractLibraryMethod => "", SecondaryAttribute::Event | SecondaryAttribute::Export => "", } diff --git a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs index 09e0cb04d26..80fa2565eb3 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs @@ -146,6 +146,7 @@ pub struct NodeInterner { // Maps GlobalId -> GlobalInfo // NOTE: currently only used for checking repeat globals and restricting their scope to a module globals: Vec, + global_attributes: HashMap>, next_type_variable_id: std::cell::Cell, @@ -480,6 +481,7 @@ impl Default for NodeInterner { field_indices: HashMap::new(), next_type_variable_id: std::cell::Cell::new(0), globals: Vec::new(), + global_attributes: HashMap::new(), struct_methods: HashMap::new(), primitive_methods: HashMap::new(), type_alias_ref: Vec::new(), @@ -647,11 +649,13 @@ impl NodeInterner { local_id: LocalModuleId, let_statement: StmtId, file: FileId, + attributes: Vec, ) -> GlobalId { let id = GlobalId(self.globals.len()); let location = Location::new(ident.span(), file); let name = ident.to_string(); let definition_id = self.push_definition(name, false, DefinitionKind::Global(id), location); + self.globals.push(GlobalInfo { id, definition_id, @@ -660,6 +664,7 @@ impl NodeInterner { let_statement, location, }); + self.global_attributes.insert(id, attributes); id } @@ -673,9 +678,10 @@ impl NodeInterner { name: Ident, local_id: LocalModuleId, file: FileId, + attributes: Vec, ) -> GlobalId { let statement = self.push_stmt(HirStatement::Error); - self.push_global(name, local_id, statement, file) + self.push_global(name, local_id, statement, file, attributes) } /// Intern an empty function. @@ -838,6 +844,10 @@ impl NodeInterner { &self.struct_attributes[struct_id] } + pub fn global_attributes(&self, global_id: &GlobalId) -> &Vec { + &self.global_attributes[global_id] + } + /// Returns the interned statement corresponding to `stmt_id` pub fn statement(&self, stmt_id: &StmtId) -> HirStatement { let def = diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs index dec1c7aa9ce..5838a2670ac 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser.rs @@ -158,14 +158,17 @@ fn implementation() -> impl NoirParser { /// global_declaration: 'global' ident global_type_annotation '=' literal fn global_declaration() -> impl NoirParser { - let p = ignore_then_commit( - keyword(Keyword::Global).labelled(ParsingRuleLabel::Global), - ident().map(Pattern::Identifier), - ); + let p = attributes::attributes() + .then_ignore(keyword(Keyword::Global).labelled(ParsingRuleLabel::Global)) + .then(ident().map(Pattern::Identifier)); let p = then_commit(p, optional_type_annotation()); let p = then_commit_ignore(p, just(Token::Assign)); let p = then_commit(p, expression()); - p.map(LetStatement::new_let).map(TopLevelStatement::Global) + p.validate(|(((attributes, pattern), r#type), expression), span, emit| { + let global_attributes = attributes::validate_secondary_attributes(attributes, span, emit); + LetStatement { pattern, r#type, expression, attributes: global_attributes } + }) + .map(TopLevelStatement::Global) } /// submodule: 'mod' ident '{' module '}' diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs index 4b256a95c8b..47add6f82e0 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/attributes.rs @@ -2,6 +2,7 @@ use chumsky::Parser; use noirc_errors::Span; use crate::{ + macros_api::SecondaryAttribute, parser::{NoirParser, ParserError, ParserErrorReason}, token::{Attribute, Attributes, Token, TokenKind}, }; @@ -44,3 +45,25 @@ pub(super) fn validate_attributes( Attributes { function: primary, secondary } } + +pub(super) fn validate_secondary_attributes( + attributes: Vec, + span: Span, + emit: &mut dyn FnMut(ParserError), +) -> Vec { + let mut struct_attributes = vec![]; + + for attribute in attributes { + match attribute { + Attribute::Function(..) => { + emit(ParserError::with_reason( + ParserErrorReason::NoFunctionAttributesAllowedOnStruct, + span, + )); + } + Attribute::Secondary(attr) => struct_attributes.push(attr), + } + } + + struct_attributes +} diff --git a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs index 0212f56783f..87e58f69efb 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/parser/parser/structs.rs @@ -1,17 +1,15 @@ use chumsky::prelude::*; -use noirc_errors::Span; use crate::{ - macros_api::SecondaryAttribute, parser::{ parser::{ - attributes::attributes, + attributes::{attributes, validate_secondary_attributes}, function, parse_type, primitives::{ident, keyword}, }, - NoirParser, ParserError, ParserErrorReason, TopLevelStatement, + NoirParser, TopLevelStatement, }, - token::{Attribute, Keyword, Token}, + token::{Keyword, Token}, Ident, NoirStruct, UnresolvedType, }; @@ -35,7 +33,7 @@ pub(super) fn struct_definition() -> impl NoirParser { .then(function::generics()) .then(fields) .validate(|(((raw_attributes, name), generics), fields), span, emit| { - let attributes = validate_struct_attributes(raw_attributes, span, emit); + let attributes = validate_secondary_attributes(raw_attributes, span, emit); TopLevelStatement::Struct(NoirStruct { name, attributes, generics, fields, span }) }) } @@ -48,28 +46,6 @@ fn struct_fields() -> impl NoirParser> { .allow_trailing() } -fn validate_struct_attributes( - attributes: Vec, - span: Span, - emit: &mut dyn FnMut(ParserError), -) -> Vec { - let mut struct_attributes = vec![]; - - for attribute in attributes { - match attribute { - Attribute::Function(..) => { - emit(ParserError::with_reason( - ParserErrorReason::NoFunctionAttributesAllowedOnStruct, - span, - )); - } - Attribute::Secondary(attr) => struct_attributes.push(attr), - } - } - - struct_attributes -} - #[cfg(test)] mod test { use super::*; diff --git a/noir/noir-repo/compiler/wasm/src/compile.rs b/noir/noir-repo/compiler/wasm/src/compile.rs index 9e6fca1126e..de157a1fe20 100644 --- a/noir/noir-repo/compiler/wasm/src/compile.rs +++ b/noir/noir-repo/compiler/wasm/src/compile.rs @@ -30,11 +30,16 @@ export type DependencyGraph = { library_dependencies: Readonly>; } +export type ContractOutputsArtifact = { + structs: Record>; + globals: Record>; +} + export type ContractArtifact = { noir_version: string; name: string; functions: Array; - events: Array; + outputs: ContractOutputsArtifact; file_map: Record; }; @@ -218,7 +223,7 @@ pub fn compile_contract( noir_version: String::from(NOIR_ARTIFACT_VERSION_STRING), name: optimized_contract.name, functions, - events: optimized_contract.events, + outputs: optimized_contract.outputs.into(), file_map: optimized_contract.file_map, }; diff --git a/noir/noir-repo/compiler/wasm/src/compile_new.rs b/noir/noir-repo/compiler/wasm/src/compile_new.rs index d6b382f669f..c187fe7f3de 100644 --- a/noir/noir-repo/compiler/wasm/src/compile_new.rs +++ b/noir/noir-repo/compiler/wasm/src/compile_new.rs @@ -146,7 +146,7 @@ impl CompilerContext { noir_version: String::from(NOIR_ARTIFACT_VERSION_STRING), name: optimized_contract.name, functions, - events: optimized_contract.events, + outputs: optimized_contract.outputs.into(), file_map: optimized_contract.file_map, }; diff --git a/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs b/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs index c0316a6d1a2..868fb4404fd 100644 --- a/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs +++ b/noir/noir-repo/tooling/nargo/src/artifacts/contract.rs @@ -1,14 +1,26 @@ use acvm::acir::circuit::Program; -use noirc_abi::{Abi, ContractEvent}; -use noirc_driver::{CompiledContract, ContractFunction}; +use noirc_abi::{Abi, AbiType, AbiValue}; +use noirc_driver::{CompiledContract, CompiledContractOutputs, ContractFunction}; use serde::{Deserialize, Serialize}; use noirc_driver::DebugFile; use noirc_errors::debug_info::DebugInfo; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use fm::FileId; +#[derive(Serialize, Deserialize)] +pub struct ContractOutputsArtifact { + pub structs: HashMap>, + pub globals: HashMap>, +} + +impl From for ContractOutputsArtifact { + fn from(outputs: CompiledContractOutputs) -> Self { + ContractOutputsArtifact { structs: outputs.structs, globals: outputs.globals } + } +} + #[derive(Serialize, Deserialize)] pub struct ContractArtifact { /// Version of noir used to compile this contract @@ -17,8 +29,8 @@ pub struct ContractArtifact { pub name: String, /// Each of the contract's functions are compiled into a separate program stored in this `Vec`. pub functions: Vec, - /// All the events defined inside the contract scope. - pub events: Vec, + + pub outputs: ContractOutputsArtifact, /// Map of file Id to the source code so locations in debug info can be mapped to source code they point to. pub file_map: BTreeMap, } @@ -29,7 +41,7 @@ impl From for ContractArtifact { noir_version: contract.noir_version, name: contract.name, functions: contract.functions.into_iter().map(ContractFunctionArtifact::from).collect(), - events: contract.events, + outputs: contract.outputs.into(), file_map: contract.file_map, } } diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index cffb0c20cd5..cdba7ed5c91 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -11,7 +11,10 @@ use errors::AbiError; use input_parser::InputValue; use iter_extended::{try_btree_map, try_vecmap, vecmap}; use noirc_frontend::{ - hir::Context, Signedness, StructType, Type, TypeBinding, TypeVariableKind, Visibility, + hir::Context, + hir_def::expr::HirArrayLiteral, + macros_api::{HirExpression, HirLiteral}, + Signedness, Type, TypeBinding, TypeVariableKind, Visibility, }; use serde::{Deserialize, Serialize}; use std::ops::Range; @@ -513,30 +516,81 @@ fn decode_string_value(field_elements: &[FieldElement]) -> String { final_string.to_owned() } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ContractEvent { - /// Event name - name: String, - /// The fully qualified path to the event definition - path: String, - - /// Fields of the event - #[serde( - serialize_with = "serialization::serialize_struct_fields", - deserialize_with = "serialization::deserialize_struct_fields" - )] - fields: Vec<(String, AbiType)>, +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "lowercase")] +pub enum AbiValue { + Field { + value: FieldElement, + }, + Array { + values: Vec, + }, + Integer { + value: i128, + }, + Boolean { + value: bool, + }, + Struct { + #[serde( + serialize_with = "serialization::serialize_struct_field_values", + deserialize_with = "serialization::deserialize_struct_field_values" + )] + fields: Vec<(String, AbiValue)>, + }, + Tuple { + fields: Vec, + }, + String { + value: String, + }, } -impl ContractEvent { - pub fn from_struct_type(context: &Context, struct_type: &StructType) -> Self { - let fields = vecmap(struct_type.get_fields(&[]), |(name, typ)| { - (name, AbiType::from_type(context, &typ)) - }); - // For the ABI, we always want to resolve the struct paths from the root crate - let path = context.fully_qualified_struct_path(context.root_crate_id(), struct_type.id); - - Self { name: struct_type.name.0.contents.clone(), path, fields } +impl AbiValue { + pub fn from_hir_expression(context: &Context, expression: HirExpression) -> Self { + match expression { + HirExpression::Constructor(constructor) => { + let fields = constructor + .fields + .iter() + .map(|(ident, expr_id)| { + ( + ident.0.contents.to_string(), + Self::from_hir_expression( + context, + context.def_interner.expression(expr_id), + ), + ) + }) + .collect(); + Self::Struct { fields } + } + HirExpression::Literal(literal) => match literal { + HirLiteral::Array(hir_array) => match hir_array { + HirArrayLiteral::Standard(expr_ids) => { + let values = expr_ids + .iter() + .map(|expr_id| { + Self::from_hir_expression( + context, + context.def_interner.expression(expr_id), + ) + }) + .collect(); + Self::Array { values } + } + _ => unreachable!("Repeated arrays cannot be used in the abi"), + }, + HirLiteral::Bool(value) => Self::Boolean { value }, + HirLiteral::Str(value) => Self::String { value }, + HirLiteral::Integer(field, sign) => { + let value = field.to_i128(); + Self::Integer { value: if sign { -1 * value } else { value } } + } + _ => unreachable!("Literal cannot be used in the abi"), + }, + _ => unreachable!("Type cannot be used in the abi"), + } } } diff --git a/noir/noir-repo/tooling/noirc_abi/src/serialization.rs b/noir/noir-repo/tooling/noirc_abi/src/serialization.rs index ed838803fab..4f91d9b7dfd 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/serialization.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/serialization.rs @@ -1,8 +1,7 @@ +use crate::{AbiType, AbiValue}; use iter_extended::vecmap; use serde::{Deserialize, Deserializer, Serialize, Serializer}; -use crate::AbiType; - // This module exposes a custom serializer and deserializer for `BTreeMap` // (representing the fields of a struct) to serialize it as a `Vec`. // @@ -41,6 +40,37 @@ where Ok(vecmap(fields_vector, |StructField { name, typ }| (name, typ))) } +#[derive(Serialize, Deserialize)] +struct StructFieldValue { + name: String, + value: AbiValue, +} + +pub(crate) fn serialize_struct_field_values( + fields: &[(String, AbiValue)], + s: S, +) -> Result +where + S: Serializer, +{ + let fields_vector = vecmap(fields, |(name, value)| StructFieldValue { + name: name.to_owned(), + value: value.to_owned(), + }); + + fields_vector.serialize(s) +} + +pub(crate) fn deserialize_struct_field_values<'de, D>( + deserializer: D, +) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let fields_vector = Vec::::deserialize(deserializer)?; + Ok(vecmap(fields_vector, |StructFieldValue { name, value }| (name, value))) +} + #[cfg(test)] mod tests { use crate::{AbiParameter, AbiType, AbiVisibility, Sign}; From 6caea1e7b9b6f3954dce79fda572ceee4b7e6898 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 19 Mar 2024 11:08:04 +0000 Subject: [PATCH 003/123] changed storage macro to look for attribute --- .../docs_example_contract/src/main.nr | 43 ------------------- 1 file changed, 43 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index de355841cfa..5312a6642c8 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,49 +23,6 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; - struct StorageFields { - leader: Storable, - legendary_card: Storable, - profiles: Storable, - set: Storable, - private_immutable: Storable, - shared_immutable: Storable, - minters: Storable, - public_immutable: Storable, - } - - struct StorageNotes { - card_note: StorableNote, - } - - struct StorageLayout { - fields: StorageFields, - notes: StorageNotes, - } - - #[abi(event)] - struct WithdrawalProcessed { - who: AztecAddress, - amount: u64, - } - - #[abi(storage)] - global STORAGE_LAYOUT = StorageLayout { - fields: StorageFields { - leader: Storable { slot: 1, typ: "PublicMutable" }, - legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, - profiles: Storable { slot: 4, typ: "Map>" }, - set: Storable { slot: 5, typ: "PrivateSet" }, - private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, - shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, - minters: Storable { slot: 8, typ: "Map" }, - public_immutable: Storable { slot: 9, typ: "PublicImmutable" } - }, - notes: StorageNotes { - card_note: StorableNote { id: 2, typ: "CardNote" } - } - }; - #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable From 01506c9ab91ea7b953be15eeed6e163be2c844e0 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:35:24 +0000 Subject: [PATCH 004/123] added abi exports to contract artifact --- .../docs_example_contract/src/main.nr | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 5312a6642c8..de355841cfa 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,6 +23,49 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; + struct StorageFields { + leader: Storable, + legendary_card: Storable, + profiles: Storable, + set: Storable, + private_immutable: Storable, + shared_immutable: Storable, + minters: Storable, + public_immutable: Storable, + } + + struct StorageNotes { + card_note: StorableNote, + } + + struct StorageLayout { + fields: StorageFields, + notes: StorageNotes, + } + + #[abi(event)] + struct WithdrawalProcessed { + who: AztecAddress, + amount: u64, + } + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout { + fields: StorageFields { + leader: Storable { slot: 1, typ: "PublicMutable" }, + legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, + profiles: Storable { slot: 4, typ: "Map>" }, + set: Storable { slot: 5, typ: "PrivateSet" }, + private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, + shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, + minters: Storable { slot: 8, typ: "Map" }, + public_immutable: Storable { slot: 9, typ: "PublicImmutable" } + }, + notes: StorageNotes { + card_note: StorableNote { id: 2, typ: "CardNote" } + } + }; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable From 3873a6568ceacd66ce39072e6e537492c3c147b0 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:50:42 +0000 Subject: [PATCH 005/123] reverted change --- .../docs_example_contract/src/main.nr | 45 +------------------ 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index de355841cfa..661b1a1516d 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -16,56 +16,13 @@ contract DocsExample { use dep::aztec::prelude::{ AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, NoteViewerOptions, PrivateContext, Map, PublicMutable, PublicImmutable, PrivateMutable, PrivateImmutable, - PrivateSet, SharedImmutable, Storable, StorableNote + PrivateSet, SharedImmutable }; use dep::aztec::{note::note_getter_options::Comparator, context::{PublicContext, Context}}; // how to import methods from other files/folders within your workspace use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; - struct StorageFields { - leader: Storable, - legendary_card: Storable, - profiles: Storable, - set: Storable, - private_immutable: Storable, - shared_immutable: Storable, - minters: Storable, - public_immutable: Storable, - } - - struct StorageNotes { - card_note: StorableNote, - } - - struct StorageLayout { - fields: StorageFields, - notes: StorageNotes, - } - - #[abi(event)] - struct WithdrawalProcessed { - who: AztecAddress, - amount: u64, - } - - #[abi(storage)] - global STORAGE_LAYOUT = StorageLayout { - fields: StorageFields { - leader: Storable { slot: 1, typ: "PublicMutable" }, - legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, - profiles: Storable { slot: 4, typ: "Map>" }, - set: Storable { slot: 5, typ: "PrivateSet" }, - private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, - shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, - minters: Storable { slot: 8, typ: "Map" }, - public_immutable: Storable { slot: 9, typ: "PublicImmutable" } - }, - notes: StorageNotes { - card_note: StorableNote { id: 2, typ: "CardNote" } - } - }; - #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable From ce6b163c763643715bdd9993aa4a9c10865b6ce1 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 12:15:34 +0000 Subject: [PATCH 006/123] removed unused variable --- noir/noir-repo/compiler/noirc_driver/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 481f8f3b663..e23f4f59308 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -458,8 +458,6 @@ fn compile_contract_inner( (tag.to_string(), globals) })); - let mut out_fns = HashMap::new(); - Ok(CompiledContract { name: contract.name, functions, From 733f0ec9b67edca5912d52c15ccdf00ca1070470 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 12:40:24 +0000 Subject: [PATCH 007/123] clippy pass --- .../aztec_macros/src/transforms/storage.rs | 8 ++--- .../noirc_frontend/src/hir/def_map/mod.rs | 34 +++++++------------ noir/noir-repo/tooling/noirc_abi/src/lib.rs | 2 +- 3 files changed, 16 insertions(+), 28 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 833fc4e05a8..9ba1bd29812 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -32,12 +32,8 @@ pub fn check_for_storage_definition( let result: Vec<&NoirStruct> = module .types .iter() - .filter_map(|r#struct| { - if r#struct.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) { - Some(r#struct) - } else { - None - } + .filter(|r#struct| { + r#struct.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) }) .collect(); if result.len() > 1 { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 1cd91db8ce4..dea5c3180c4 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -234,36 +234,28 @@ impl CrateDefMap { interner.get_all_globals().iter().for_each(|global_info| { interner.global_attributes(&global_info.id).iter().for_each(|attr| { - match attr { - SecondaryAttribute::Abi(tag) => { - if let Some(tagged) = outputs.globals.get_mut(tag) { - tagged.push(global_info.id) - } else { - outputs - .globals - .insert(tag.to_string(), vec![global_info.id]); - } + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id); + } else { + outputs.globals.insert(tag.to_string(), vec![global_info.id]); } - _ => (), } - }) + }); }); - module.type_definitions().for_each(|id| match id { - ModuleDefId::TypeId(struct_id) => interner - .struct_attributes(&struct_id) - .iter() - .for_each(|attr| match attr { - SecondaryAttribute::Abi(tag) => { + module.type_definitions().for_each(|id| { + if let ModuleDefId::TypeId(struct_id) = id { + interner.struct_attributes(&struct_id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { if let Some(tagged) = outputs.structs.get_mut(tag) { - tagged.push(struct_id) + tagged.push(struct_id); } else { outputs.structs.insert(tag.to_string(), vec![struct_id]); } } - _ => (), - }), - _ => (), + }); + } }); let name = self.get_module_path(id, module.parent); diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index cdba7ed5c91..59913a42d6f 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -585,7 +585,7 @@ impl AbiValue { HirLiteral::Str(value) => Self::String { value }, HirLiteral::Integer(field, sign) => { let value = field.to_i128(); - Self::Integer { value: if sign { -1 * value } else { value } } + Self::Integer { value: if sign { -value } else { value } } } _ => unreachable!("Literal cannot be used in the abi"), }, From 9b6af4bc2fbefaed40a3713be8d774f2dd21468e Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 14:18:05 +0000 Subject: [PATCH 008/123] fixes and consistency --- avm-transpiler/src/transpile_contract.rs | 6 +-- .../compiler/wasm/src/types/noir_artifact.ts | 50 ++++++++++++------- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 16 +++--- .../aztec.js/src/contract/contract.test.ts | 5 +- yarn-project/circuit-types/src/mocks.ts | 5 +- .../circuits.js/src/contract/artifact_hash.ts | 4 +- yarn-project/cli/src/test/mocks.ts | 5 +- yarn-project/foundation/src/abi/abi.ts | 50 ++++++++++++------- .../types/src/abi/contract_artifact.ts | 2 +- yarn-project/types/src/noir/index.ts | 7 ++- 10 files changed, 93 insertions(+), 57 deletions(-) diff --git a/avm-transpiler/src/transpile_contract.rs b/avm-transpiler/src/transpile_contract.rs index 6f8922f8045..f7b732df61d 100644 --- a/avm-transpiler/src/transpile_contract.rs +++ b/avm-transpiler/src/transpile_contract.rs @@ -16,7 +16,7 @@ pub struct TranspiledContract { pub name: String, // Functions can be ACIR or AVM pub functions: Vec, - pub events: serde_json::Value, + pub outputs: serde_json::Value, pub file_map: serde_json::Value, //pub warnings: serde_json::Value, } @@ -29,7 +29,7 @@ pub struct CompiledAcirContract { pub noir_version: String, pub name: String, pub functions: Vec, - pub events: serde_json::Value, + pub outputs: serde_json::Value, pub file_map: serde_json::Value, //pub warnings: serde_json::Value, } @@ -113,7 +113,7 @@ impl From for TranspiledContract { noir_version: contract.noir_version, name: contract.name, functions, // some acir, some transpiled avm functions - events: contract.events, + outputs: contract.outputs, file_map: contract.file_map, //warnings: contract.warnings, } diff --git a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts index 935c99043da..d4d05b79b49 100644 --- a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts +++ b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts @@ -1,35 +1,44 @@ import { Abi, AbiType } from '@noir-lang/types'; /** - * A named type. + * A basic value. */ -export interface ABIVariable { +export interface BasicValue { /** - * The name of the variable. + * The kind of the value. */ - name: string; - /** - * The type of the variable. - */ - type: AbiType; + kind: T; + value: V; +} + +/** + * An exported value. + */ +export type ABIValue = + | BasicValue<'field', bigint> + | BasicValue<'boolean', boolean> + | BasicValue<'integer', number> + | BasicValue<'string', string> + | BasicValue<'array', ABIValue[]> + | StructValue; + +export interface StructValue { + kind: 'struct'; + fields: (ABIValue & { name: string })[]; } /** - * A contract event. + * A named type. */ -export interface EventAbi { +export interface ABIVariable { /** - * The event name. + * The name of the variable. */ name: string; /** - * Fully qualified name of the event. - */ - path: string; - /** - * The fields of the event. + * The type of the variable. */ - fields: ABIVariable[]; + type: AbiType; } /** @@ -60,8 +69,11 @@ export interface ContractArtifact { noir_version: string; /** The functions of the contract. */ functions: NoirFunctionEntry[]; - /** The events of the contract */ - events: EventAbi[]; + + outputs: { + structs: Record; + globals: Record; + }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 59913a42d6f..506da929937 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -522,15 +522,18 @@ pub enum AbiValue { Field { value: FieldElement, }, - Array { - values: Vec, - }, Integer { value: i128, }, Boolean { value: bool, }, + String { + value: String, + }, + Array { + value: Vec, + }, Struct { #[serde( serialize_with = "serialization::serialize_struct_field_values", @@ -541,9 +544,6 @@ pub enum AbiValue { Tuple { fields: Vec, }, - String { - value: String, - }, } impl AbiValue { @@ -568,7 +568,7 @@ impl AbiValue { HirExpression::Literal(literal) => match literal { HirLiteral::Array(hir_array) => match hir_array { HirArrayLiteral::Standard(expr_ids) => { - let values = expr_ids + let value = expr_ids .iter() .map(|expr_id| { Self::from_hir_expression( @@ -577,7 +577,7 @@ impl AbiValue { ) }) .collect(); - Self::Array { values } + Self::Array { value } } _ => unreachable!("Repeated arrays cannot be used in the abi"), }, diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index 7b2c692385d..e4231f1af5b 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -100,7 +100,10 @@ describe('Contract Class', () => { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 30ad57764ac..37b807aff0d 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -56,7 +56,10 @@ export const mockTx = (seed = 1, logs = true) => { export const randomContractArtifact = (): ContractArtifact => ({ name: randomBytes(4).toString('hex'), functions: [], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }); diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index f07138eb167..7d1cb5d490a 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -60,8 +60,8 @@ export function computeArtifactHashPreimage(artifact: ContractArtifact) { export function computeArtifactMetadataHash(artifact: ContractArtifact) { // TODO(@spalladino): Should we use the sorted event selectors instead? They'd need to be unique for that. - const metadata = { name: artifact.name, events: artifact.events }; - return sha256Fr(Buffer.from(JSON.stringify(metadata), 'utf-8')); + const metadata = { name: artifact.name, outputs: artifact.outputs }; + return sha256(Buffer.from(JSON.stringify(metadata), 'utf-8')); } export function computeArtifactFunctionTreeRoot(artifact: ContractArtifact, fnType: FunctionType) { diff --git a/yarn-project/cli/src/test/mocks.ts b/yarn-project/cli/src/test/mocks.ts index afa693b8427..646b5a045c1 100644 --- a/yarn-project/cli/src/test/mocks.ts +++ b/yarn-project/cli/src/test/mocks.ts @@ -65,6 +65,9 @@ export const mockContractArtifact: ContractArtifact = { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index e74196ab93f..7d4a697ff66 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -2,6 +2,33 @@ import { inflate } from 'pako'; import { type FunctionSelector } from './function_selector.js'; +/** + * A basic value. + */ +export interface BasicValue { + /** + * The kind of the value. + */ + kind: T; + value: V; +} + +/** + * An exported value. + */ +export type ABIValue = + | BasicValue<'field', bigint> + | BasicValue<'boolean', boolean> + | BasicValue<'integer', number> + | BasicValue<'string', string> + | BasicValue<'array', ABIValue[]> + | StructValue; + +export interface StructValue { + kind: 'struct'; + fields: (ABIValue & { name: string })[]; +} + /** * A named type. */ @@ -101,24 +128,6 @@ export interface StructType extends BasicType<'struct'> { path: string; } -/** - * A contract event. - */ -export interface EventAbi { - /** - * The event name. - */ - name: string; - /** - * Fully qualified name of the event. - */ - path: string; - /** - * The fields of the event. - */ - fields: ABIVariable[]; -} - /** * Aztec.nr function types. */ @@ -262,7 +271,10 @@ export interface ContractArtifact { /** * The events of the contract. */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** * The map of file ID to the source code and path of the file. diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index 1185cc5f04f..062b3535326 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -192,7 +192,7 @@ function generateContractArtifact(contract: NoirCompiledContract, aztecNrVersion return { name: contract.name, functions: contract.functions.map(generateFunctionArtifact), - events: contract.events, + outputs: contract.outputs, fileMap: contract.file_map, aztecNrVersion, }; diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index 097129d74fb..1de030e78df 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -2,9 +2,9 @@ import { ABIParameter, ABIParameterVisibility, ABIType, + ABIValue, DebugFileMap, DebugInfo, - EventAbi, } from '@aztec/foundation/abi'; export const AZTEC_PRIVATE_ATTRIBUTE = 'aztec(private)'; @@ -68,7 +68,10 @@ export interface NoirCompiledContract { /** The functions of the contract. */ functions: NoirFunctionEntry[]; /** The events of the contract */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } From ad2a62f9c1c7236a360970421368cbdde5d0bd87 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 08:01:51 +0000 Subject: [PATCH 009/123] cleanup and test --- noir/noir-repo/Cargo.lock | 66 +++++++++++++++++++ .../noirc_frontend/src/hir/def_map/mod.rs | 15 +---- .../circuits.js/src/contract/artifact_hash.ts | 2 +- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/noir/noir-repo/Cargo.lock b/noir/noir-repo/Cargo.lock index dbba248a4b2..1c2e46ea54b 100644 --- a/noir/noir-repo/Cargo.lock +++ b/noir/noir-repo/Cargo.lock @@ -5652,6 +5652,15 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + [[package]] name = "windows-targets" version = "0.48.1" @@ -5667,12 +5676,33 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.33.0" @@ -5685,6 +5715,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.33.0" @@ -5697,6 +5733,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.33.0" @@ -5709,6 +5751,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.33.0" @@ -5721,12 +5769,24 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.33.0" @@ -5739,6 +5799,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winnow" version = "0.5.0" diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index dea5c3180c4..7c0090ff95b 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -217,18 +217,6 @@ impl CrateDefMap { }) .collect(); - let events = module - .type_definitions() - .filter_map(|id| { - id.as_type().filter(|struct_id| { - interner - .struct_attributes(struct_id) - .iter() - .any(|attr| attr == &SecondaryAttribute::Event) - }) - }) - .collect(); - let mut outputs = ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; @@ -259,7 +247,7 @@ impl CrateDefMap { }); let name = self.get_module_path(id, module.parent); - Some(Contract { name, location: module.location, functions, events, outputs }) + Some(Contract { name, location: module.location, functions, outputs }) } else { None } @@ -324,7 +312,6 @@ pub struct Contract { pub name: String, pub location: Location, pub functions: Vec, - pub events: Vec, pub outputs: ContractOutputs, } diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index 7d1cb5d490a..3fb825af1f6 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -61,7 +61,7 @@ export function computeArtifactHashPreimage(artifact: ContractArtifact) { export function computeArtifactMetadataHash(artifact: ContractArtifact) { // TODO(@spalladino): Should we use the sorted event selectors instead? They'd need to be unique for that. const metadata = { name: artifact.name, outputs: artifact.outputs }; - return sha256(Buffer.from(JSON.stringify(metadata), 'utf-8')); + return sha256Fr(Buffer.from(JSON.stringify(metadata), 'utf-8')); } export function computeArtifactFunctionTreeRoot(artifact: ContractArtifact, fnType: FunctionType) { From 445b9e6e2a9a648d131912c315b9fd00d399784b Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 13:33:17 +0000 Subject: [PATCH 010/123] updated snapshots, types --- l1-contracts/test/fixtures/empty_block_0.json | 10 ++++----- l1-contracts/test/fixtures/empty_block_1.json | 14 ++++++------ l1-contracts/test/fixtures/mixed_block_0.json | 16 +++++++------- l1-contracts/test/fixtures/mixed_block_1.json | 20 ++++++++--------- yarn-project/foundation/src/abi/abi.ts | 4 ++-- .../src/__snapshots__/index.test.ts.snap | 22 +++++++++---------- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 9 files changed, 46 insertions(+), 46 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index a862e82b53b..8782e0db84c 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x29598370fa40a50b7fbb99e501f11527a69e104a43c8eefbfe66888f137e7e49", + "archive": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x5e65711eaf5606f1f42dd36579261833e54595ee", - "feeRecipient": "0x00eafbad09eab548a89726e2a735bdcadc37aa4c318ed7a12d9be6a7542e517e" + "coinbase": "0xf5260028ce1ed35ea08399dcd31c1203d726cda4", + "feeRecipient": "0x269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000005e65711eaf5606f1f42dd36579261833e54595ee00eafbad09eab548a89726e2a735bdcadc37aa4c318ed7a12d9be6a7542e517e", - "publicInputsHash": "0x009e67eb54715bba61c94f475f6d4bf81b775da316c2c9a6a12506851f760bf0" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000f5260028ce1ed35ea08399dcd31c1203d726cda4269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677", + "publicInputsHash": "0x00e6c2316a480d1dda0923579320d563fc07d73b4d62c6d89b51db42a483a654" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index f6a627a00e6..13b9478a690 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x045487d0ec498eb3f7f027715db8d67cc060604058bc5dd3e2e39fb47fe0ea17", + "archive": "0x2c1cb8a31da8f420da38a9da675509e1fbdb99b07b37af497aa4b2263e727729", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711036059, + "timestamp": 1711459673, "version": 1, - "coinbase": "0x5e65711eaf5606f1f42dd36579261833e54595ee", - "feeRecipient": "0x00eafbad09eab548a89726e2a735bdcadc37aa4c318ed7a12d9be6a7542e517e" + "coinbase": "0xf5260028ce1ed35ea08399dcd31c1203d726cda4", + "feeRecipient": "0x269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x29598370fa40a50b7fbb99e501f11527a69e104a43c8eefbfe66888f137e7e49" + "root": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x29598370fa40a50b7fbb99e501f11527a69e104a43c8eefbfe66888f137e7e49000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065fc569b5e65711eaf5606f1f42dd36579261833e54595ee00eafbad09eab548a89726e2a735bdcadc37aa4c318ed7a12d9be6a7542e517e", - "publicInputsHash": "0x00e9cfdd839060c90c216e1cecd24c5570a84e380e2bc640fd9dbbb5b2dd0718" + "header": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006602cd59f5260028ce1ed35ea08399dcd31c1203d726cda4269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677", + "publicInputsHash": "0x00c96c1c24ed4c10240df62e411efcd51f8843355550b13b64a6777c0375e254" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index d3b9839f52b..05e67317da3 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x1ddfa79462a8e2beea5cca8199d5ce0f9b0412d561d4a35c8905b8e8b2beb7ca", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b010a2bbd74d570162c997959bacb8696740c7e546d1e820a3ef3cbb06aec5b2dbe4ff56246431b95bca6a9f2b2292fde63c6d78884aae32a500f0152abc901ee282de062d3415d375de3593c40b6e14f06b0c6df665794962b73019e11d7a0c04127bd70a45136ea8b9ae21a8ed4c970111c8064d017f5b0f2c5393737cfeb206e38a47b1bf58417e605c97c4349d9b8f15e8b51b7fba8cb1e31cc6fabff0392b27cf7c1dfec5d9b20db8af3a38e9f903000000b01c7a7c90871d4f3bbdc115e923409bf63575c0f12ed1861b1d48f634642d15c62e5814361b1e0d5200248cc389944d91e9980efd0d6db6debd331eb0cfae4528048770f423e0871b5f5874535d207787bc4a55b85692ed99b4edcc4522ac7f2d1c186d3504b5976902405d03ec5cee862d0e0ce317ffa4c69ab4e04c335603c576df0e1f2b1c63c874146baf0cb7c476030f3a511054686e095db2f3c7cd3542e9849f287bcbf895dedfdfaeb0652226000000b01605c3d4b8545cbcf35ad088aa62cbcb872f0d8c62acc490de9005135e51fd7cab21c962dcc1abe65f28e96adcd271a6c1a238940e1aed0257f6e3576526c8f626da07e617f3afaeb40bb364e2005c3b58970aba95ae52fc917f3991478ad83e93f399158cb773aa4171e14f63faf9901cf8003377010e084f7e2a251f3421f5d84b6ec9f80eb89388ca2c6b0dbd3fb91bf7ecf4b536467c2890704bd416c9663a11753f21d820f99678f910a0b270600000021c000000b01121aedf25d06480c417ca7cb9e27e1fbc5f938585e775a81739a7ec767d5ce5a8a3f3e0e4e467cc0ea34c07ce4db5d68fef8565e828794928633d171fb83005070a8a4709998b3a5814daf9c2c11153ad50e38eb130e34dfaf33aa5988ef1dc8ecc4d3356b3e7b845b5afa54348e40e1e2c30d28d219431b8faf8133d00c868f13e7c7d465aaf3155ead482557510c606662ec826720642271ed4efd0a7fe0c257dc13f0accbc5224a1d9015f4391a7000000b00318659a0573453a083b2a2845123900f7bc8454cb63792438f4e2a11439801c6c1bc432909789212410d5d44d45f93193b28bf7fbc6aa8e1a9268fe1c93bcf63fc5f64603cbb7955eb77ce99d31208ba624775cd64b9853414ec95e764176bb219b9aeef74685bf2594ae9bfbf7660f0eb5a1bb11ec4a60e38c0bd52426ecdb3058c00f35d08a43f8ef19a68c58da0a2223e984f661613b2064d2741693290290e52cc71bad840884c0bab1cfce0a52000000b00ff2c077e06b3fac309ad0df3fae04b6899da0c2e043e99014661995c34552f83c9d20b274bac94336446fc3a63128f174891456eb6b4bb053f32b66a736d66ca18cb1dc3695b451c07031b0e9a09482400f6691109a41666e4024f1b3d5f99e11bf51dfc94e7a19802d73eff6d2f86d15840b1a0238fdb01febe6e89a7cef8d1f54e6ce24d64c471d0b166555d58be6244464a816a380382f67269d26a0f70b0a50c157a3d023580620a156a020a87f0000021c000000b003c33d4fdff90f92b4f450012410cb1fa23c82cf72f4fcf1dc574bebedde6272df862c312cd18ea78ddd5d1446e46beeb93a9123176ed56456523edd813cb6ae96d7aa33d1dea51f19107c120d9edc98da74175f444b47532b45fb084bbde002d93b5b7c36391c948f43c59869ecc48024880a809f6137e609dcbb1de15f05a22aa43528016823ff3b6f5921afc7ff301f086609a1c1a7704b7b1c80ef0074d6eed2a8075e0f72652bbd16b8f50a4862000000b0242984b0585a5096a968fa461f07592ade773e3c0071ba6bd143fdbce81a8a7b17d8e5161e2bc1d2bc806de06d226d8650e19fc4279217c3f96b8fadaf841748c966ae395e4c0cda32a6b008b11a80aafdb088e1d62f13e7270595e7200ed98f21ae7ed0060a32ff3521d98772ad0bc024af543dc6a2b5267727de64242273e4a2cb09f2c109a4a258f8cd74ee38abda15073c7a51cc5ae3512548438681a4aede6c7016b2cfcc03d8a35c20f529acb2000000b0006652e8552e21b361b4160b36e7ac116778a553a0927e7fc55b283461bd93346ca3efa5bf58ad80fb16555c83c2694631c66878c8a3528f01fd1f746e0d90b407874e8f7a487617347ee8d730ce1687c28dffffda2519b61b9a169dd4dd627f7e785c2a4ee3d199c04a1b164a618b6d04ea0f7bcc62131af5419f3df44166e4adcac0b4e5217199228817dee2d4f28d1236f0c8a83b6c8d8d735cdd9c6f7cf492ce5cf433b388daa3e26ca2405d9c010000021c000000b0052d908ec0b2e9cd6e5628cc8e243ca5530a17f0aa18db85148408c172e33a92ec4138ec6aa2ea646030d71709c5f1b1190cf9b003eb13b580c23d8bda08838b4eb76dc00a4f6b63f39a0c60029cd02ca17bb0d63fb5da3d4bab157620855863fcfc22270e4f45cd1e2ba8e301e6d5fa0801a8b87145d47f31d504fa83ffefc1f07f6c0a75b76c55a47d50b9b2673d962524bd859638116314320ad833903e5b30173ce12bffbd1ff446914d8404200f000000b0299c4fd95291aca6e748e82827210766579fb0ffde0197fccae53515ae463719244bffee25fe480a8be6c6d3e2c31fa702a7f3c647ee94727af63109b529fa138b34b2d5addeb3ea9934edb4589743885601b8a9be5c4f4ab5422637355898acd8adc7a2b88c5c73bc5807384593834114c87e48a29986223c5b368376e74b5d1242c655f852d9d7bfdef3ab428225252518bd83500fb934f106a22d485d86cb9f6418abc3ecd48b9f0819c4c0060010000000b01c6845e9d28419318fd5e797c1f8d88ecf30097b811a99f423eb41fb6995f8712dff65dcabac4bbcd0be157fcb4b081922c27d4d2d300d525d06bb30672a36c379106ef440f9e525c12f359d9f0b096c45a21609630fd717bbf13b23796d2b9ec83c0271e1eba2026bf1565dacef55ab26c18cce82323b5bbd3cd5cc4367804cbe55308b13e5774c5a07f520315bb8080da0f0582e10fd05f50fbcca6cb0c11df1fa8c727d2dd157f90bd451fe965c800000021c000000b0031f6b8e470850aa720fc25fa5f306b6e08b47dd5b8e14aca4589c54261105fe7d6cc9de0b279259489cc824b796f59d1dc1bcaf45b947c3a1c3a48e0fda61479a394faed65c2920c95205293a5d09a08013781e4d5252826982c93bd5851b51dea2d6638145a86dd4dd5766e5e1c38d0879e36a685203a58cf1cffcc59c45aca7240484e4bda347b3a6626c76afedee211cbebe42d72693319db999a827d635f81c29872e92f2d97195f2a107dcec1a000000b00248161253bb0b33afc7c842ffcde325c99f22956ccf70ab1099249251a8a1c029b8613953dc14d5cff2a8aa62a9a2994ba4b9e0a3402ca35f0bc9d83bcd8da9b3d02051f596c601e73a6e1a26935284a4a017408cd7079a80e6bda684163a2fa3b0486c9048a4de95442eb90535dfca146a6bb89f6904179472b1ecafa518c5a3407a6e4e7c83e7262f18a8f0bd7588239020a8381abb877817935e185b8185f2835c49c89274ca7c2de8ccdbee6fc1000000b023be9f5b3e9360a9b1c581ea18005151eefaa0719e8ec3f0b515e1eab2ee81ee9f915c0088e833b98507bb1671be2ef312b26b155ca9094088270ee1be17f961de1183a8c5d0cb5eabe98bd986110a6b90e26b6db7d6767c64011c842591f13820f2188c63bdd2edbc91c5d9c6a29bae240c3fbc165b03c27574c8784209b9ba94741ddd483207c9eeb3eb5a1ad448f20febae533801e0c96f8cd92724dd8649fa62fb1bea3104b5dc99330ae23f45830000021c000000b01bf9a2c02ffe30760952f802c32979c0daaed35fa4260f810c203f0abca95a277ca6fb6b1b882e977add7b3a333e3d5d95edcafa5d9771c51ceb6a226af31b836737e8f98f3dfc5388f7ed15c58dc6d11f56173d177332f33901fdd03f0b8157921f530bdfac446a306178ec146797bd27b9da853b34ddee295b5c8047104604373ae066458303dc4c91e3eac4286c241c99a421bf7f23b7ccb1713e4446e8fe67a4ac22aa31bfcb023732cfb6bc4453000000b0018792b500e03b5c6bb98d6d86be7a9a3b9f7a4ea4318def4dfef60a93d8d6ab8a8f1dd680b93693c8e94804a3430a30401f7af77787cee1abf78bdc996488bbfc31f5295d2c0beab5b91f5fccafbdbe93c94da31f5842a1283b09a816de65307cfae755042cacfeb9e6f9aeb67e40910d72d0aa34555a205f4302bb9916e6dfdbfd7be5f49068e03f5f80c78bbd5de90dcbad85f1cb4ad472ed8cdb47048bb7a0bd7484011169bc7956344547e8c103000000b02bc9148b852422f4871f768344e0fd3609be9d568574bbff431fd273786d81187f2dbc7827c9b93805ee2b94c035a8ae37af5f1163e93a6b9a15b6cc39f55ece9f0f680f5981b603526c511264cc1db27104330fbb427c84264c72700c3cc4a21325b71f07762b6891a9b323e26b798d12a823137549a0f6024be9989b2823556ad277090f81c80bacc977108fd9641e3003eecde2afae9a0f9fa9ff0ccff022251116c1dd193b64749e74fe9a42fe260000021c000000b02580633868ce13e1655567dc358400c3f99e4147e58559ef132f3a72e8e9ac6c8d91dfc3ef61b2616e1ef389a768f33199527adbfe5a06b18fb1dd1f62e8e964539c5c264a7b3d290b4e13d33a9d24e401e17564cc3c1951dfb3e0122ececc2972adf20b0ed3d4db6ee1a23473d0c64710fd83f9bec67f9cf884606a05d811e62fb4850e7ced3ab0e9375b6588500f422f81806e5e2e6e7c5021782acfc667aafb1841afe433f8ecd91836c90800ed30000000b0107b6e87ad40e85b3f5ba72bae59666b665ee468ab8e71982b31c2acb61abf1cfeaff5bed71428ab3ece6553b6143c2d9b2cca7ff6dc465c87ad77885d82da1886225f68612f91479512326053cde3f97349f01b38b0fcc9d4bb4a95c0e9a4db1aa5f44d9f9b2007fd65a22bca383e8b28648b5e1f8240c7c5932e2d8e074d49a9d8049bc3ae47bd424f75fcff2123c61ea170c3853af3d3b9fd3f43891c9ad27458cf173af644bb4dc295a0dac5b443000000b0254f07678ef9f49650c2f8d0bfd424b5786169fcf7fa29d3521b5efe6c50b21603ac7c1cb2a2a28e4a7e03021be330f69bd6848e1ed60279bd6c5600a189411aa6270a27c0e5ea618cfda0692a30fe7777fabef5297b7455a29e1d30bdf3429deedd7b1e000810ae87cfe53db454556c079033549d009304fdbb5e284379ee92e783460722aec1583e0662fd3836746c01c89a966397ab7312e1f634a8ae30c5888553092031d0e5cb2010147678ed0b0000021c000000b00c0b165f1fbf39d9aa5e6e548c0f578423049ab1f2634122730061ce256f9df914fff081e93aa4ce2ba047111b3f74208657ffcc96f360639fa071ceb8db88f59d06cd57d23ff2a272b9c52711cf80a181f0d3be2a66487414d4e6a58f106c3efbccab1d69befa7ea0af8a177ede1f7e16ae171e0e0e5b29d39832d5bac3d3a87bdcf77128226a03dff68668f19e31a1148eb2f219a7d7628e92b1e8a9c99b70b577dbfe8f4b2e339dbe379ea778fa50000000b02891f68d0b2d696b9a18b42af098be0d4ae8356372866177a6ad3745bd36fd9b0437d47adc6d91b1baa9975e9c797ce5f65cc8bf08d70eba1074f2a81d078493ca8d15a6cb77dd3931de19b8f32206e5a006a51a2e9890051d1e71eebce96f30f4dd2176c9b3d5d02dd9f6af12c514042b85d4a05d7793feb4d115712c14669a9759cfba28232fa354e6cdc25886f179243c6331efa97c33e03fbb418ccb1c1b20ae117530e4fc7e899c2ea8503ef3bc000000b013618eab09b8b2c8cc4d3a00404d34b1ba3d23060b667ceca197ff0908ff5df5037a78e17199e8742ab759a08acfffb3fb1ab564a5f7e932a30bccb36ce67b8c0ec53e76ab1c9f90cc82870fad281e2343a24c9bcff8ad4559d884e1bd64c4ce2d5320375e5ac096c0ac042d620664901d0e8211d7aff0e85972071091d17f71d874de464a290cdbb304d466efdaeea5123efc8178fef3ab873fba8c9f83f9e287bc1ca15409cd4f33172c0176e2399900000fa400000168000000b012a5537385fada7cb844d388e08d82ad69692a507f910bf48101120f36da01613a91c0af94cb3292707d1acb3504efc034ee838db52e1de62aff10273e66827c49b0357ccbd236d816620389733be5693755909628c4f6b0d9e0c28582c167dd04705755fb112a88b778ab6e051e13491ff60dcd01ea47508dd4fc804530c41b0b82459420451dac741225fe708b768d1ae51aecea986276d20ec31465965ad0061477d010137a15dd0e7dbd47383e33000000b029717760b130fe9ff79703c516a795971982bb796d7591a8f46fe8e4388e6edc523d333f86a56e3581a6ddb99baedf19a9c1da1c3258c4b9705d25bc4f768f3565f398643c63bb0ca4343c4801d535b9d0544e6445a334c7f63d2bffca4ee7b77bba031f605bc358dc17cbe9ea2576191178fa03bd2beb541b73b525c557cbcfb215e1f50dd4406458d3172ab6c953ff2606dea2714bccb19bcccbbbcbc386b3e4f4485ff3988ccaf791fd29b95bfa2800000168000000b0266c325ddba9954385fc0ac227e99a98ba966e2aa7868c3090da7434fd6ff2c33040bc2619aea948bc4bbb0ed95d31849588d0a6d32947259e18aed3ae07cabca452d1ba2a75727ac25c9fbebc1eb3c0eab9edae44cf69478a39e2626cda834d70c28284bcf1ab1d5c276768e950dd861bb96d91e305a802fb6f93256dfe14957c6278d454b5a9bfb784c96175e549ad0f4689193a9e0848af83029995a21434e01c0fc80ab40e55c45de06b562cf036000000b01db4a023205330d7ee7f3e7ace12e88821f87412e70a97dbba4cd9817664a0091cb8f8cbd13c9bc4ddbbff41aef5d5e92a4cb219f303d191ed652082b4fa23d6229b814b2451a7cb74a66b69d10f80169335fd29fc85d6c42d61839905075b4ab77613c5332e45bb856d71d8553e39f61fe603a7cbdebe6d4ceee14867016280ea8481283e69af36b4bf5ac203f9b08b18c4d5abb83b651e72ce322d0bcbe8a9031eae5c5b0868719f28d377cbf7033900000168000000b004435576a04b9a84f039427b21d05f34547b52699a4951a5a57d9ac8579cfc1b6c71c2d62f9af572e093844fcf470596e366e322148f17493d4ed4c79964730cd06d095e9930e16bfef0c928e302e2f93a69d3cff0503e77608e59aad20a6e4b0a392f7ab43bf9d08568c96f9f4ec37c01cfea0513983d639a933c7c9cc5802270c4ed861a650d658ac087c20d8b660f1c68e93d244ae3970f4ad31afb579fe46b45cc5e9cb2528d34c0db1feebce553000000b002bd373cd789cab3372f0bf91f98d78b133b125b70926f2019b8382b944ea749144ca64960bdda19888a87393b136f0d45d955f44d916296b1142d3f1724a0ac63d7be882d4e403c1dc792311e06e87b878193627c637816916c331601f03a608f06060dcbce7c0df3aa380e63b0ff05250d5b5402a3d051c70803e5735e1f166057a974308eb6b1149ca6ebdcb9f789134260a55c006aa6b6af4edf576fcb34d45eb463359cb2986b29cec9f083c8eb00000168000000b02870cb8e5f7bcdf27293a5b7f53f709d33af95baef20ae5d614d2d91a2fb15fc7a78eacdc2e434af5a60cf3bbe7c6480e40aacf8d29efba3853f5f2b2895cdacc73e91518b3e632c8313c91d18b614bd401daafbf587fef0d7fef4b01fef55e546996e2df28249ae79953c1fb439e5f30de5af0497ef73b5e63e2ac190ba41d47f13d05a9398f15498abb6dadf78e133190b6549a93ccde391d5f6afde3fb1122838fa1bb8df3b3caea05761f6144359000000b019e03c1f18b70c910020e39bcfdc9107506cb7b5f8d9aea17931afa715acdabb1cf9f97198a01e2a647a732223519c983085c761b6e131b5571eedb3874a954375a390dde79bc268a1619be76ae581aae0e5e2a953818c5dedfe8f17787c4c4a29cfab1765e311b75850473bea1fdf30152b6f4a8c189ef271bd0df141443c17cfc5bd199afe7c3df62fabd5c505667116780efd46226c38e11debe5bf41c6d82f7e9da1ce22f8cf5d3c8c635dfdb5e200000168000000b01741bf2e9b0ae57ee596ea73535d8258deda9c12d865f0972bc8412b084e1b1f7e2e1da1314d77aca987008306a2137863f27a3751de383413acc35f0aa5231afce8c0b0dcc3e822a3b164eabd42781623ae022a7a4b913db3c772dafef11df31a2a9311fe87cfa57e28645492970a3a0202aa2f00ada033b28f572191b78039eaa14f5c829159a807044181686a3ae10d9db5fe2ef81b100f85c1d1d87656600fbca19cc17dae490f1213d8ea2d095c000000b01b56c14ca3e4ec13086b51522cee66d91b965c33223dbb76106259443f6bcff5d90a4060e9e99914cb891c1b32142432bd14f8cec73e98e95b18c169238a6666cc76e9ad03e735d92ced8690ada973296cf01f877962c2e309a935f84380bbd9cdf63071d59789134e1a8b20997dfcf7006cfb283489708a946c4bb2da6311b094746762c42cd4109b0f48ed22e806550578d2774381abf17a316bf13a820e01cbf9e34a6e7aa20e9ed201bca638177300000168000000b008cb4179a3a2b5f3bfde879b4f9e02dc9530106c85c3b8770470874542663b73be2da45b34e4db090f26ec53e130bbb12d534b79bbf8694c4e0f6c826cc967580ff90207ee5af29a28250f0cb0d239aca3dd0a70a95a329f318fec630bc9e493d63c429f651cb1463244a3c11e45907a09d05f8de44a0139a4122adbcf98ccdb7d2dd4d84e9f20e2897285c3abcd86ac1413cc9f8e86491bf1d65b0a90da818860fdc615e6e2a09c264d5bc51c4f755e000000b01e3619aaf4f7e80a503e2ad15c2dbcd20b461d0d8645f64f5a1a7b6ac2de4db7f8384631087e5484e8721b2f782bb45d880c9d461f6d13cfc59826c93e64af19a58a40d891c3d06099ade57f2c18d7ecd6ab0ebab35447d3dff46f6481f319be27b7205ea4ddb0c55c98da8676004a570b9dcb0eddcbf87a0174a8afc8d3c4288887cdeb176768300e708c1fcdff233e17cff21bc2cf4d95b233ee9f53d8f5873b34608a07ac2df11daf77c1215dfe9e00000168000000b01ad758e49bfac25abff7a78e866f995167c4f18002f32bfa41cbb6f907bedd70c8913756670298b74dae4f18a062bf112fdeeddbe3ea74f787ab6745b8744ca9ed869c7ca37d1953ccd3ab2f9965480803819782857e0e94c0b6c6198ee14a16de035158882adfa36648f5832eb01229255d3562cd46b700fa14c0c30acb853c101cacbda258fa6d7e319e168763cb1513abe30f28faae397752ff5c41c65a5d7769edcfb7fd9840497bf5f4cf4aff77000000b025650276ebacee2a86bee0d4eaaf6c0991b4b9a00bb090ad21c8efbfb7abec111876d25cff91ca22587f89467dbc911599e0a27a35b9d8256ec4553a186bba3dcbbbf89af249bcc549163188abdba5395f2f1806b4fceb126f36ca92a555d8cbc4cbc462f2d51affd06cd1d756f0cb8c2308150bcadbabbfe2a5bab2ae6b0deebcae541dd6eb27f92a8503692d6e47d623784d8629cc2e09c2f52c15a34f7c3f09e0cfe18d8ee54072ea2c5b758ccf0300000168000000b00cb0bf437b59aa5f55a5c8a4e63e0ab0843160799f77eb97b9d8c321a6f6281730c7050dbe371ea55396bcebe87e0f338ac0d4418f4fbd685e2441b019e8886792b1507703867c4aec351d4da2db48de8fd3945971ddd7f1740fba0e2903de9fb484c45beaf10fba057c192dd15dfd6c2b68486101df8c79297782d477334b38865cfe05cd581d309128c6b72942a52e03d78eff9c56512be67681d896e64c701eff666d1fe8912827d7e570825a3965000000b01240e8c047edb175bc00837fe1a1bef2dd6c5388785c5bc64c0c618071929adfaa68d0da9b816ccaeb475d77a27fcbb96c380851c7b06afc1a3d997902ea725a6a735d5f083104b90baa4a160486cdd64267c41555244b3b825a7e679e896a0984476257a22f6de695c3bf8caa308afb10248aedd6521789c8eb967044d83d3e83846a2cc26d4780577e258868e2663e03cecf0f17f8d17127fbb74477c964aca5e3aee8a28d77c93b78ef85be6428d600000168000000b01cf6f40fba149a9d4f467489528c5d54e9de2f73f0b6698428463e018002757ce5026d700d2155766c2f3e383f15a2f939dd28b12593bf37d6f9c6d4fd2aa51e543b7c2547f51bdabf0586c918618fc1c063070e810162bff0e35d46ae890a506d149e05ad242b02fe0e8f56ce84716511378b10ba1ba8fd554a3b5f11f57fa10503cf68bf25753bb92abca625ba70a6303b5db78cd98c2e88e330de0e30dc9ce7361881cd99058e721809457a62a921000000b0062f2beb69d36a3f6ced2d3963cd93d152d8efc7bd058e73509ee16a620b58402bc1dd535a003fba61990f7f30402979828cd4e2294993c21da6dfb5d5e80209a24bc8f46e7f06fa0b5f9b446398b0a6d1bd76e37c3835cd4b935a6c526839f21850e9976552a2ed519ec21441a6f4832e4cbf0391bab306612c8a942360a562f48318e72dfb29525b22e8315fe4267202ba7354197ba3229064d001b029acacf62500abbf646a60cae73a10f1b77b9900000168000000b020a0bcd52c770bf43a022bf1d9f07c783cbceef93097077a73b840cede8caf6f8c60926a154914fec7458bb90ada66bf31400ad5494d317053b1481b6e79d4a820eba4bf384a9e8f6ef8986074b9e67ba5806e3f41da11bdb1dd52cf7b63cddfd8116d148ab5868fe3ccb8efda7e0b2626786b7438fdbaa33c07324a9c8ec0408972b860290b5b711fabb2a2fc140749206863858865c307161f22d1832b11b4e9e6351ea0262a0a6928225978d4ff64000000b006d17c7ebda60b3907e6f27c8fc30d57f21adf9fab41657458830d20033637eb3bfcceb8ad113587909fc5acc556b25ee90340efd300beb2a8122799cc550d61a05ffdf49c07558cc3c1f5cc163d475439fdaf8293f977155b369366ba1565d3da0e304f89f58986c68807d32621d4cc0e14a064d04fcf2a2e863163b4099051c87d628c11905a6ce144fdd5f0e1d1080bfb03498aae6b62dc762fa72b7984aaf3600567506aaa82cb93b41aad8275df00000168000000b00da6c2799ef24c52d2487f780d9367c4fdb2accf944dd5d2b8e376e8b4eb8f35d9a9158fc2a9c81a6810a47e7a890c6144bf4e335614a9cd5bd01298f62a963e86a20c819801ba53290420fdc99f831c5704d7fdde289bc3313e20e97082777f5ff3aa73aa5cc24f2fea02bd5ae78b330bec91ad4714c59f733c4afb567e748edcc0b57a9ddd636e35718eab36fbfb590538e13162a0051f5df443ca014e5ce6b1b846b481aeb295739d11a0fbe9001b000000b0300ce48175064486cc3f08fadcf972544b0c3d56c7b2bf57d5bc0144020704b16453609972a396e9981b2dbb159150a16d10274ec07cc3592c95553472f4edd57f0f48a4a7f1f34ac3d07fc95d577333dca85fa44eed03cf89c182cc772cea94cf3a63a176a84a48f4eceeacb316301a17761bcbca000dfddbc37e7769a78ee7f864beebbe8c8baf043f5756a4d498a214b0b483c05a144db5b668d03b037e4c79fa449b99521f247d81063da1b0390300380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b01aa06ab1254f91ee8471b5c561ec170999c4f08e981521b8dd911925694230e63d8bb9afe7632c3ed7947ef1e7e2ef0bfd6d64ca276bb5eb7e6c0421364f56ae44bcce2fa13e5de32ce1186bd0d8dfb304b5c4b2b28e36eecef99164eb615b9ea8895f86e838a9b0c05b8f001738c9bc2d7189ff50cce889543257cf1f4bd1c91746097c5ba281c731a44d02dd364fea209f85f5c02f1f0eb334b5bee90ecdd6aeb9789070966ace1262941f558d00fa000000b01fdb30f6189b90fe3979e40a22480b8f660ca485e590ac0698602b05c578400fb97fa29331b09f83491297aa57804dd774eac55ee03af2c9b9e298bd554b7ff87931a64d873eb77d3677778eaa1eb67cb57779b8ef3a950c513a82e4cd665cbc699537600b3c0dd224579cd9c5dd55590249c2d29305663e2772f8670d02de1002d1b8f0ef50bf27c4fc1cbced018ca31daa8235de4ee5d98f126cd6d039d33bbf15df20c2654baa3ce92547102b61da000000b012ecf3464f57de70240405289fd0e47ab8d5154d792f933416c4f9e04dd955c4bc3947c517ab9f29dc3821759b4e74ac0e3fde5db38f518bf6f0d545f16bf3552ee7f09ae666d3695d016243b950809d0e3aeac5c6ded23e1603eb8c984a29ab8a8b2744bce9bef2117a8d7b373610bf032f77782c26a693f42087d453e638d48dfd635a677efc95f5e6be287b3c220b0f3a1581075a59d3423a31d0489b3f88c8947f1f9bf00837b49234478f6cebba0000021c000000b00f882650ce9c1ecce58a9e2af823c250c2f69ef1e65447fde38dd188d370fc3bfa7c831ec754ac3c8cb02d5eeca6ca2a62ccbbe28cdfdbdd5d48f35f79f200713c170c9f6fe79af5e18d266196ab0b97265f12fd3e6fe92d0535315b62260ee6215470b8168258dd3220910aa00e81450d3426a6df5f0b656a20b8700ff841aa801f37539f75759599fe22ddf643c0f2021c3d43f655259e5e1a69754a86732219e9dc32d43d7b8e1184989d9655a40d000000b00f49243cf87ff11ed1a566ae71a1f837c94e42f9a14a175832b2f41c74184135108ced4d0db7b9e859dcaded446f5e0ecad710ec4a8d09f73d5d6b6d02de89e7bdd48005775a90a1cac3f55320b567e9c45ebfc31d57e9eae396af839979a27e43e07493b7723d8340c55b1d8dc5ad79098c35acc261345122cff5947e8eeca53741e98463449d67f4e8d3c49b4aece123294efd8f9adde89b5560a5a34ddf107a18b6b060df30d8a2ea19c2a8780d4d000000b00935044164d90a38b58c4578a5e4bc6d069f106f5a7516aa76ef6bc2f1574849121b4378d511f03a17a7d36d301463095ff57da3e04cb6125c4bb3925ae49607c431a4265656fd6e88fd6a36c846952a05e3737945603b02851943fe489bf28886d87d8ad883c49a969c42c49390687f2313f28a80807860da7ffd4eb65bf30190805f1b1a8bf9bb3c8c0e91375138ed2653b588d17b1fea281a1db8bdf897bab2cbc5da3745d5cbdf29a18d67cbd63c0000021c000000b00d9ce5ab737b6ea927aa6e69dc138f392940bd7409773343f249eda6382cc6cbc3a4a3a711d59e430d161591473b95ec92e6154acd686e66aae53e229d7908d67bef2cbffa29248786b72041ba33f0cc0426038b1ed0f18d60c3c0c27db5dfe3712b60eb18c93bb8dbd148daa2e8a01713b11b3ee79231260789765087f734a0e7de3083a7f617ce8b72abcaf1225ff91bd260b15f53962f3ee7cc5ee8b85f484ff6c759edafaa87e9de9a5463622b90000000b013727b9b40af20d07bc23155587ebe8e9a548bff8130232ee316a22b5537ae392287cc2422853a85facbe013a798264493c75d555336598e049d0e6afb783f08ff0d51d2eb2eb87f35b9ca44c5eb0de045e1c64a95cce0c06197fd7d6a2f3b65ddc64b22f7864d1b4e5d00cf6692edd511fce1585a7c86960a38d0fb0ed8cce1e9b48ebd99af0f41101762b262faa916189c18f4946d744ce9f1e3316ec27e590bf5099aa5cb1197b0bcd2d527ea5daf000000b006ee70703c756f68d9d7da4d18c60387037ca4812f9def0ceed5f9660957b70c166c32b9124104ed6bd5ffc1c7b6071a5da2e5bde41a05990a843275ab94b4a36371ea18158938729766f20efe1380f82c620177f4cac5dda257cea80d04a4231f5089645dc9232ce2a3c5d08ec1047715442ac2389d286536f2b84046f72f1b89c466c38fcf1ee80d77ea9ca44e4d5d2ca17d698a253495de636978244a9b11916a4a31bd4c5efcb78f45abaf372db70000021c000000b021773ddd2fdba67a95d795bed5b2f8632757e39f2df31c7b598d71722f62a28ce7998b844b055308864283ecc7e96a03226a1ce3693098f110cc969a500ac5f3e370149f74d86d3b649681b7728e5788b994c8909df98ec864ca3fa21038c5a69c6adc774db98d04db1d872bcac6dc2e210fde63f49e1a456f91a26b490ebeed0f82568ff2a91dd45010738235c747690b0718530422db090b1afb3a230985aa60906f52444ec961af558b6f636e326a000000b02bdf64b547e00bebece8e68d54c2f43b7984a0312e61652a67eccd638cf354897a8b84fb720a5c9ecff4ba74fd007dd5296e0a25bdcef46b1f6c0b32329e1532a346ca289f5dac3de0d8de24fbc6e7a3667fe8fdf964587683929cbfe08998882f772ffd0ab44a896b302274d579af3c145be963712f5878bb199289a427f9431e09590189bc7f166fb81e3e81099a250769cf6854c1718d012eba0fd7d3b95c7d9ffd177b279573a3300133eba49010000000b01ef772f69664607b67bc35e774523c3a51cc3b74e8faad3ef6948851907b03e86697ee1bef9bd66338f6827fcaa2c49464bbe65370faccd4d15ae9e558e1be8a8778c4e8bdf334e3025faa6e2e9a8be10b42e3619ba68de7e5dd221bfab15aa373fa2c374d63f9821fe0fd4a9adab78c16ad40f8b8a85e7890d651a158b382568d165cc6f016fc92614ed78e08e0807f28b4aa818eee9dcd3b24c073c5ed23d6fd36ebffe92b7a3e235562771265ddb00000021c000000b02bf6837c87e41c2773e6566264ed9792e4e5c8a55700fee81b60546af75bebbd819bc0aad1e269b84839bd240f18567187e5b775fb85ae0f50024994b6a920e52864bd3c7ccbb5dded0999f7d9538b5b49bb430d0d5ea2ba2bb03ee889cc8999f1863f04e707b0d26afbef5348e50844167f7ef611d6057ccb4399a419d11dc7321e03951e10ae764c54f86eb17408db2a3d4b93a55ddb1e91f6d57820ba5964c32c4db132e6183f71279257499288c2000000b029e553045134f4617eb4db95ed0d70b06e1cb30367c5bad207c62bfe50f4c101c8cf7f38d7f01a4aa88a64090d3aaf22d15f3a1c271ad506654b19c6e02951de7da486d36e69ce71de09e63dbe14b3ec0d6eb2fbf1276e06ddd1d18c29480990ae920db200d1b51cdf552ecd1564b286187f6e4727e87f7a24db6a1993edbbab26bf010fdb5e89cbf6c2ca5cb92f25c327cf59791df0fe93e9eac29b50da51dc60943b55a3f187498e86ee502aa697fc000000b02fdd80a505729817f194a87ac71b9093d5d09a912d96637d66646682d889b32e21f5e463203741a88d6cec0baa5fff0e0356f9ece1701e121c3d7c921da35fdb98ee6e6a4d1389b0767d4206f3aa4f0dbd7b8a36a02fcd075c458b99d165eeddeb2ca60885efd08c3e853b02ffc7e7c20d04d0dbdc127b19c867a29390b205fb0d425e345be693b057caa5ba59e468280fb3ba825192640f361a00279a3b7d8f60fa0f3009c5d63f11e79a84b296827d0000021c000000b01fcf3dc75df0cb8c99068e2e136f0854def01f8d975edcd7f3e8283a857cd6093a229da3b4909dcd41b43652323185007450efc5e35e08fd960c7745315dddf992435eb5c6aefcb9f163495d156b07f45f88702c7eed5a3403b735d600d8346f9acb3e9458669375cab4e3a58d281ca417a5e25e3d76574e000cc351c51d6d014a27f62bf857da694c43eb9313d4a3031918a02866245987c7b2b491a355dce00bd155b25b3c2993ebaaaebe42b2e7be000000b00db5fd906333a067b4635d96d34e1e4cf38a1537754c1a297034b3a29b304288b9d96217a19226c4a4bcc3f4921106d26c6bc388cb6998298bc50c06739417a6b9d8a60cd03b3ae2323a8aee8ee84411a86c34a0888db257ae9fa526badd5c1310d36e77600c341a0245881d7f3c860d3049a233fea282bd4ad76ca51dd9b6645dc2f455c889f2e190b896fbc012bb5023df873af129c26655c4fb59112b1ab9d5b61b143400800cf7301a7f460b852e000000b023d59f676d089630a0e4a2f3aa805bfc62bcc088df5e074c0caf440241d5d4bbcf494db02414f237e4d76832f6e531673bfe18321147f10b136c4c13fb5a4a3f1511f0562d733a8180892da69f7f8aab96585eec29d533b5e6c45372ef6fb89fa8f8709c28a75f85761c4451725d2f3b1fad864a0e6ae76680e6f5bf99d1d5c5ceb26c93e1c8c97ca2921a959fd3d9d717ad9da330bc18b3bc01f528a96c889b8d9508509448d91db9a934b0fd3222e20000021c000000b00d61ed602d24f4624429ad57f097409f7b8c306f925811c44e46c638453768bbf4164911174640fd489b284d8a23692923a5bf43e3c6b89f9fcf3a809d8bdd0a1b1fd4695cbbce950857e9afc0e83bb30611f39c6a9be5384f9cc1038a83a29408dfb0983250f4ebd81037648f41551a243dfe3a30291527f4bf10246d8697bb22aab4be83b0e6a2bdac43273e95c44017ce5e0f84c3eaa8bacce0170c4dd96274a5f861634578f8543be54e264d8527000000b0096c98fdee1b420d689fdcfcfaecfcce8dffb1a5f3ef6a37c5d77a8ced40e57fb4de70d931635bd49d561655945ed0524aad2f0522b5f7e3f0bf2cf1c23b6cf19cef8478cb1ae52a1fea161f4b11e6325a741c7bf3c5ac78010977b4e16fce5be0553fddba810917009616e797abd7e8248f6badbad7c7b4979f15466c993b849cd267be8c0ce8cd2972478f6b2246102f2e7b3947aed584bcdba18138e51f3aad8e5e5bf290365799d9890a948c2970000000b00c056280f4ca392e9389a28cde902b155356d4966aebb4cb340bfeb1e76249179fe4f54fff6282d1ed01d929baec734eb2d4f81cf2424fff149e3ac877fc5e1efa87e206654ebba38d2bd036afa4b60d68a4e7261d4bea83ba938f3f22053df17a4855876856cf44cb49091401ab27ed12d4c5cdae7dccb33e5b824bcaa0bc50ff2f0b3b09949e6890ad52f8f5617ebc1146edff5e0e2243cac348b7383e6dc2b5da6b948d77e1574bed396ce64fd7170000021c000000b008d7078b7b7af8b1865cfac9c784d9d2e24ccd141a7d96c90079a90d97aca8cb133f956f33c7c629104f6d9141f32bb1481e37dbfcb409c255038f164ab19a42173fe6fcc69505274c83e5e8cf26b85520e51fd0a99ed37af826066cbc4a810ce081b7c9242bfa5b80f3d7976d32e5740e00e64556c424e839818af5afce0801315e3360da2439a59001b246a5dc40b524dbe3238028f7d3d15428b63a646e5bc1e6e33e4dbccb792cc9619b1eb145db000000b0036f2174a17aecf9ff7dd601397ed3e07e78940417a64ef8605a48f44e80caafe85964f032b791e9d0d8c67a262f692a59e6158ab0e94eb627474a90199a6ea75c8394301d53c17f014f67c5967a50dfcbf2f499b100865e0d896d1b56e435e8f1203bf42e3598c83e8b6398c7199fd116d00f909c3ad0cf7ddc635ee9bd1d394ec005cbd44dd163d6c1180b7bfe70612d9ca62c02ac26744862e5829fc21c60218345e7dc92e2191759b304bc02b2e5000000b0279dfc0cb90755619bd91f0c8812deba8fe6896442175e80503fa3d340c39a25bc5479bec7ccbbc5d3a95826e56283a434b3c206a79b18a7a5dd2e474a25e1f3cd1668e8bf2813fbe02dbbade79d7ecc52de9554dbf8353166aa6667fdebf3f7059831602908594af1c25ba0841a45641e3c6036770d63262491421f43521a514a74641aeb708d27b44c42fa401c2cff0a9d0c8a4ad8942e5627affbb0b7595bf5a187225c441671c4db250ad9269cd500000fa400000168000000b0292520bf4781d53f2c448f7eb6dd4b1b5bf5016eb8fe1b026e31c82c5b1a30e26c0c25a528d6adbb8631fcce7ec7332af174cb0c2f4c523baf8f3dff6e13a19c9058dfb65e5bdd5e4546b6c4d71d82e31c0db99535dd3121f0a484c7d162ee63e1e2c001e68f6e6914d94c050c1cd8ec1d69b1dd8b5014940b173a3656dc005455f15d226d433887f22460e70accd29c2af8014e08f2a1cf38fb31122f85aaaf72fb4fe93d61d7c7e1fac0132f952766000000b0172b9ed3286a8b21a8d08c348c94cff03c975a65e25a771531ebc5743204db7e549e81c55dff16ed3e9bba9f102a61b69b3bcb992d3ce89e25e53d3527458644d886cf857ad4e746a5e677ecdbf94b54f72e74200095cd907f37647ceb1fac1c3af50d34b5be1db60130c5888e58129c108b1c84fb08ccb89f01d8d137d70887cfbce862bc196ba79e4c6b09b455f7e20db609438818e0438f9b48d23cfc55eeeff691b4d79bef01ac550a8dabc8690700000168000000b00d9452ddba1268a4412d573eb3a0e4d68eb2f8a46518d7113968f00eacdc9d90714c0a454486bc5ba166d478e68cf4d487a625628acc822f5b3c2a5b32975bd41faa31c909d4aecf2e13ad09321cfa3cb999b0e15b5bf31c7867e5cf95b94e332dea2c617e534745fbab0d2baa43cdaf1cbd68d166b31f0c7c0b45f8542e2e06ca0b859446285c43661c2d3b661a443b09f62e3d055f0b4183035db1f2da5a094336b8657c21d219651fe25bad9fb811000000b00862fecb3f80edcbc5fe5824dd02987fd44cda5332022c27807fa257b5798adabff31812ef178822fe503fa2456b687881b5ac5455785d7d7b2b3c64cfb380b45dda803d980abf643097cd0b7400bc2a56c646383d2bd7b0c0b6ccd8aa99ffb7084b14f35572fae28394e2dd09b385050fd3522d1e0e3606dc2a1d69852c162d7c7ac6410be6b8f73ccd726a783e1b9801f4b1bef06dfee19e1b40f496f730e41c92b6e881acd14ac5ecc2175dfa85a500000168000000b022e1876563766e62225a97c4ea1b0d933befa948e9bff40a36e8b1b77e654f5cdae6d6f55c3d27adcf7186c4d5fb0dae7a2ee58da5ce6792827944f8a8d728cd198bcfa1257f7d1ad87d7d26a7833df36426df746fe4866fb3dd95f8611b1f8cfa7dc3db23893982bcfd131492308e550c45b0856e04a4a9f77f9d0d940b1f7c03b1d1ac95edf0be8fbadbf69402faa90090c400293b0dc0af9fffa60ea96db3c4fcb7d9a1e8741020b20d7d4687c184000000b02af01fc529d148de4607a78730919ff88d63d8c900dbd4ece11195afe187a4671b27eeb63b75b252ec709b56da7ce018a0c2ebea65bc2d48644a08be4bd01bd456ea35cae30936874361fac1b578503afa63ac2468781bcc043d619f3fdab86027c709db92ac836906d9ab06f58cb07b13ef67dad12eb0c6436bfda295ac87542b9ba813943706101a9c501c853ae56404bab6c2a88a08055f1c376ca38174ff94e6919b4d69e7adbb61a65bc4f8d34500000168000000b008f0e07c2734cfe7b42b56247e89f2ad44272e214e2d7d6cd933363559094dfcc4ce14a43e0e4436d56b36b378d21a00994e0e79f12f896d68cac6a2ea50a8308c2cf0bf1b9ca56bae5db8fd28c81e128bab92c1cba56e3161e9774626189f878516d86c07cfc26d3a17d7d05d40933903f99b0bff3a43fa7bdc0e0bf85bc86032679649e6475ab2dfd43f1d8db95e25298a923e34e15833b7e245d93be31c9c748833499f61971cd256da2c2cbcb15e000000b021f15458b5d0a3bb2126fac1387ef85a0b2dd8abf8cfe2a0971ac942f9c81782fc6b6a083dbe6ab751e760c4ff3b1c1794156eafed4d0d00f7098f9dd77b70f68ad90bc02fd3f34085d323467a5dac7c9a524809d7546072b365de9aa1f2f1b95cd7b872c95528759571c9c6a06299801f79054eff3871ac425b847485c2ff9d460f8e1cf4bac0172dc715610eba486f23994f89428566994602bdadd8d9fc947eef88998609e5529b649ed286e4db3600000168000000b01e8d9a1d8d538f09ba7a3973a1e3bd4a5529c6f5c3fc04302967249c0bd9127ac04acd76f1f48bbae88f10355d7cbd0d7bb8d6d0a9c768af10b36a735f8eba09f25457aa57d986fdbe7eac57281f387006d46cc3c407560036a7bad875b03705dac9dbfdabd92896547f8b42d8423e0520cf7b35cd78bdb7d644dac8159ae55de90016fabf242aa0bf7dc557e1df73641fb3f38429ac58f56c85e46d30c1b03930d1c1400994b3d3eaf6b7bb857579c5000000b002e2b2f34811be3c502b5918b93d1477fe8e4082d8d0fb969117b2f643f222fa86b4bf0d8e739a1e8bde614f1c7692e808703dfc7f10a0f2a0d303d4bfdebf6073f8c98187ac687e5025ca032a023c7edc49bdc77b298bb3026d26aefbe6fcb91f0c8fdcc71418d60be7333758c0a37713e4b2b85ff371208d40f38cfa3d7fd958123b219b71e94ad907c0f0fcab0b52278968de7ace2f37560b3a87dd9aeaa30550f147fdbe781dc3395298291c1e2300000168000000b0194b256f950dea5f893ea6616cf93aa78405deb5cb90bd82548a36dd439c72310496ccbb01cd42bdf6c582f242243315023c02d3ef70d6317b7c59176367d975b94718485d1508e751b9acb3ba995db8ee6ec0d957020b3c067b9635d3112650761bc1fc0eab24df6b7c7f6b510a176b2b0f84805f26e77422b0f0f1c3e3053cd8f1e72692a2273ee7a4773ebd79ade4192e9fd636b01729f4980e1ace62e68fa8037d3d29682715440a38152b120151000000b01e1a40e7795a4aff01ae42bd90f3ba6f3b79b5dc6710330d6ad495861bc649ec38554bf282b9533ec5d55fd1549c5e1d06dc98559a8535dbe8852310369780cb86fe504552ee40abb92dff1ffd796ec752de29bcea4133386f94162395d839208b1da16821ae7221e148ff407f0af0320e173a6b9dd018825379e592582f684d65eef7ba7246f63fa113e7618eb0e47427544d6fe4aecf52a23e583db9e5c84dc3fe64080216049b8681154f0cf0da0f00000168000000b01997931193ab71769124a130edd32a0ff5181055dc47c92b6116c3bc28d0c3b5f9c591431c2ebed4b9ec76d2b130612d7cfd5c457b10a028ef217c374c409d9a98d19879f20b1787c01869d3c10e9dd0c7332d96514d21ef9b439acc0aaf3fcf523f8b44a1477257f6839a27a07c20db25b0eb6066f565cff5c342f22f8ac0d8fafccdad811679abff740dd7958f5f0707b1c25eeb285618b9ec3f3f075229e62fdee70b6aab8c7a6bec350501c4cd27000000b02df0ceea8fd8882e51e9e8d6cd25d4bd8408589b2171e7f3a1707b79482a17b9715e0aa693b7bf73ef078ad21533459bd829868c7b49793218a4bd60a7be6eebb82a7e296ac60e294f846b4004ce968eae446f0eb4c935e284f0dc2e9734b8d91d088cb4b83a1fe79fe319a63653523715f78e916e2f9b1d6027a1b9861af1f374ccc956fd1379298ea5d5cf268c21980e17f251ba18723fd8a52df978f6b6a59ecdf332e658698cb974a71b8f5136d800000168000000b011e85cdda28a6889dca63319aa3b5ef5053a5925a53e763452bc4e5146c134be37ec443f9c8de8252a28577797bbe7e5890addeb6cbffde416c608e5a5cc6b8562ce654ea4d99ba028ff4e9c0833928eccff5e45ec2007e333266d8a49decb34e03efa8d6668d26ade25050791ea5ab11619e0f644863256f8c0199d8dcde76686ca3eb756a2d2eddbde6688efc257690d3d6d3a8ce70e56a4a6a69861181ab710141a6189176c65cbd42da56de04073000000b02e83766229803608d8ed0d22827e5a975259d9616b8daa3cd5eb33ec3dd82ff4465e78cb0e68efbe9d87becc54d3c6b08610e3b583875e2fb9acaf99ed37f664194a161d5efbb0ff48f6d27157323c2f744215eff1f96299c60a2c0ff533b39ca4a26ad6d673bf3a6a4fd06f54cc1a9928d19bf768ccfd02bc0617a4187f8fe23f5d01403378dd0240a8239288d132df2f0699e7361745ba3f1bde6419c87937f63d1ec7c0a20ad46dc5c27ef165093a00000168000000b0047b3d0a755fc36dee8980c418179d44b55cacd034673f580d6cd2d20e8e040de4d989f654ee48a171a2a09d7f8f29877c6cc0bde075672f7d3e2674b7dcd755a90b6cea3fc64d25aa221c905818ea797805f3cdd01c4118ecb5bc1434d59a53452d065752dc1feda781664911f37a8220c5b550379c7a399847e16f4e7b1c297e82928750e082342e42bbb32ab173ad2637bd661ce99362ac3862501928dc346fb3bf96497a4039286aee19fa4898e9000000b0126b97f8e34f885bea83db59c78b9698bcdaa406f20fceca80509f301b05a26bc6b00d4035b4db0dc38d54b9e94c79482b8cefd85baa50fe21e7f45a56ec487a986d19b1bc6796bddfd99af6d6be9fb60d1b3a642e650eaa66b27e0893a42341e0ddcdc296cfcb0230da18090263a0941319831680c06d6a02d786e1bf025a9bbd1208881022c324c8dc3d6854e0ed48104e7e94e90e72c75f5fba98496090b4275632a00832c62fe8b2fedb7be4f78b00000168000000b003c8da2537577d7b1244d7191b74afdb8bcbb49d09a67298527b7273da1d2bc273c2a6183906fb8cc522c8278d4370d3b9a22d03eca49a40bf9f3845e5f93bb73065c73b9b82621e2f5a7546bc10c35d6a68ac4dcff07889ca21357313f2884de4dfdb5d35c5b4fb9f401f33fb11e68d298f6f284bdfe17aa1ad7aff3420a0671073b9803c8c4a48c1c95b74060390eb2f3b7b26d90b0546168f57a10065b596c93ff4ac4571623712509ef84643d5e7000000b02f10cd1f3968676f5977440828421de349a47f9de357d6ff312feab6a2aeba14513f92d80d430baf88565a860eb5c8d441e7a45f8271aac574b68bab994db9585478c8dd06a8ea0b0d17cdb028dd816f4eaeadd07bccab3140e31e1e749dbeb290cc10adc1a5d45b5da954139344ac97084b4f87afb3a5687612d5b79a76560f8a7b6cad29915a166da264b2b7aa310d1de7b0d4f592a1eb4c97e86a98824b31313d7c12ca61153786fd4728e660ddc500000168000000b02c27679c4e9ef6b17595d9d19a9b980a39f7543ae1d7b7dfe7f25e751ddb670b878bfa691482917d1dd6822859e162bb42d652bb9a7a0ecec91f8fb3a6010b794e3f4c5d1c95d5797ab415969fc7fb7a0b0535195ea01ae7dcbed01fdfd11b4099fdac3aa819fdfb3dd6f76c29b859980a3059a299540a94eda85b46ab5958e76e6db7f77ec33b9ccb253738bb64262e07163b400834a0ca0ecfd2e7e1d3394041c6fa270e1dccc2378e920bf756c0d9000000b0001e55cdeceb86ce6fc811892a6d6892bfb0ba49a120725b5c32936517641586347a94f9aef1de6c1ae604627b8d8135bee22868b7ae1a41f8a0709184aa11ba0093ba204ad266b2ff563ec5a55367266cbfe029fc2a47fe064ba58d1c3311bf50fe04939d3962b75fd83ac3cf9826ab1b1dcb1bfd6444eb4172455fa6770593cd21860bede8cc920066cf48fcda1e7d075820dda613e744a88d043d2ee74efd767621c780781d89df1696f1deb24125003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b00c89407a778b90b87e5648889fa571d1051f5040a5aafbb4f306707424be6b20e51cd246cfbdd1d1b03c039236b50d74e55df7447497faaa38f7fca4b8f0daea9f91f99b48c5f4b7d89a3af0d04c22e6d72b0dcf6039d63735b8fa17fbf2c361c90651b5f09f521c9a56217970576ad112681ad0a92291e32b3a3c0687344b9b90265888f73399763303f6a616f74a75010c7cfd3b202dfd0f55ef707961c777efe70ef61eabe6459307c13e204e8d92000000b01defcce7a31cc3040d44467269f0550a30ef9fedb918fcf91d2894ca0f876fcc1c83f99890790ffdf6d733deb59870313f12565219560a75caad16e001f9efff60f27507961ed56bd05184a0a672913b41303f6107853b33b33440d3ede83e7bf96944fe6f39f7e93d8d84773294c6a81825e68f0fd5b95a1dac01d094f86bc3ad403b256c8ef94a08bfb1f59535b4270ccf8469d08b17ef3ef917ef79a8ac5f799b646a1788e81e865e890bd5b0d7ce000000b01649c0fb542e3137a8c5ea4a408298a450f6ec4c1445f64179d6bfb3f4bb7ee37b6cd71ffca7370ec11c8ed9a84694277735ce1d3a89fed494bded44d2040fd6374352dfed3aa07e797accdd603370791e78323f660d6eedea8c4d1bb650c850d6f3502172f494a364e0b2e7972412f603169c8975b18cec76b68680bab2594328c6c03e6263ef39de07090b58b6fc8e2899c4181e973b87a142af3d3ae11997fb679ce415f222ae5855772c855b03b10000021c000000b030192e5b75bc105d11e5f4b818336686fe2b8ccad6b1f1bc39d2f49cef7f7070072240b6b82a8e91085bc94c207318210ae4ea1f673d31e5b8053f8b56660a9c752389251518ed62a9db2a8fba0aa0ccc2a08b85311f815a9c400c1ef3ba9a933e0d3296d99de0fd1617efec959d46f30000a7204c50a1b1b0635ce15c7e5b00d8e1cc8546e9d5400957eb4ca7f20a762696d80fc51eb4d73b3f4735b20d87aeaea81cb4f9ebc5079b7048b3f9aaaa2d000000b0242c5e3ff44a56a352941c284e1ed7c0ad991fe91b9f84e25f3e2137b19e28460fea7e907063766e829f0d36186830b7cb4ca0cf82e401859d83ee91b61211239552bfc74cb5da7a43e43b0335469104feabb178f5d19b48f8c560c87b0810919222e5da071e5ca9776352ee036b42cf26a9a7fcb5405cddedbafbbbb282a738faa4b6fb0117dca17e4c7d40add0c4ea27a4bb803d7b7e273345165eebd9c2ea5539e03b37c03573e26b8ee6290fa490000000b0116e41c079a55d8d3a9b451ad4d0bd108a4236339837e7501da0780aefec6c942e9410eb9f0a915417f7053d27fec963fea30b09a88064b3e36b13c7e8ea9ef1286ebb3586a05e61fe5ab60c5d517a74d2c559d80a050f204a54cadd2c7a9d02aa2c42473c26c9c5dc5a2b852111c9630087a01148b559d0524dd4030de70b1d2aa73f09594eb7d60e2b487dac1720f72aaf4f96c8a3e7d0a68ce0011601854eb3bbee8802b36e88cf1827e3bd99ed160000021c000000b01ea79d537f687013150cfbae0d71f08bb725269fb2b5c8132afbe2aa775696b3fa90cb402c1975962f409b0c67007fbd173f0ff140ebe2889eee84edcc6a518124dbbd5a40fcb49e10327039c20a1e9a903e5cbce16af3f4d130ce326df8be55013bd4e7a889fa83421b6ac9ecba5b492fe26ef41bd61023417bcebc269e2d563ea87224d0e4b04cf6a55f8714e5f9e7062123510bfe773bb17e69e47531201b2e0ee3f18052ee9081d9ce170f7c2cfe000000b015870ab35631211fb0f4b2d3c96c341b3fabf594dc7c4ab4171ec52e07fe1d98a8af9f54d8f50d9cd921806a0f96d04d7c972100ae97c351872fda75d436d35bac84dc3a76d32ddc9d37b176547f080528673fa04e74b56076e8e45fbb5b548aa05fe4635d03433b92023bd38744e62d2e0135476878559ac73a0f62652418749538d6d60ef952ad527ccc6e497e0d7d2083113fad979f8311bf5a98f80a55d64f16282d2376eb546b77e0a215bb623e000000b001a408ab0b8dadaa40d9c094e8109002ea04fd9d13499141baa53c38f7930ede74d972b4290410e6779e6444f18dfb6e107bd7db812c40acd22892c6690395a4050b933aa73bf5dac4f9eeaed69d82472c8ce6349e2f36c2699874c6efdedfefb6a484f3e846d60d01b2a6da41a788e61cd2cb5b7ed72fc362234fc3a81f2fb586fb38578aac583546746e063af13be621982766fc6748dde89bdd53c28cf646ca0c47b4363ecbf6c94c1dbb0b318afc0000021c000000b00f1c4d691f4c42f2192d0a38895bc49e2e78c63c4d00c5de34c2c1c21bfe90f766ef92b4ca2a149b6cf408daec2a5795d10f34280530c33dad774d2b7cec16e520694f09acf9264a44ccc78d1f8bca0f1580bf0c11e415ca9380377982d07182f0aebf5487d093df0fa49eafc923d1ad2270fb59e55eb312aca42a9fb9314e160b27e571e413726904ada346f01a4c702b6ce48c77117cd0a409c0d4e2e4ce87d83ba936548bf02ac6c60df8e64fb10d000000b0262e283709c3045c9f97e42b262f346a613de326b97ed7ac4243c1db66c3b3308dca164cd92ed5be73b615864755a3df1e645967ed438ef86099b972ae83727d03b68b3663564c38da6f6cc11ee3810b4df67d16491668ed90d875cb465d66e4b18b900750bff3f56a02646d8730d1882ea423faa71146270c348b6345cc96b05d2c825543a647995edf7d7651c1252918bc195a5fcd0cc33751963a98eea5f52c87fcecc1e51b29328eead44ed04efc000000b013189dcca944e8e1948cf08e707bcabf92eb5a9763f240c3b92f6ca6a095a5c845b795c2b6ee06b90fd20002f92f8631fc98c42439f35c27c64510a5e7e66a35b4ed57d68d33a9aca56fa4be0764b726e3b4a3f411b348a28250f2aac0e1bfc772bc80f2b94a4bcc578f1bd81ac3f2eb0ecb04fd2e52c77426815edcb6e8878d76ac0b6c97bd59d5d516859327ca9280029008f24202a2e2598877bea482b627a2488ba0a4320a08274a7610e82d179f0000021c000000b01da9dc0728baf4492c12be23409f5a195d041a3f3aa735649b7522a3afacb7d84aae422d0ed482a81216097778cb0d31a171020d309ac53b2dc1a339b309a57a80687cf06817c447cbc641b07cb315a792754439b6d5d66b777a745a7d2b75a6cfd9fb3e8f386c56b1c4f979f69227b617ea038c369510bb3d4015ae7d4cf5cb2b55e6c75784333da9e1bfb338dbf6d60fee3fb2d4b9bba6002a31ada490589b698d6e56e44ecdc6ff6913957b8512d6000000b0293958e03bda0dd9a05ad012aeffc3efb7520c8ee7ffe6737e6ed313015f4f84209c9f3ded38b88fc7a30f0cb732ef0656af6b305733fd305604eec6aa37ac257958592d6a8182677dc20d97db0fcbe03edb6947684fdbc7274f397f612fdfa86e3bdb7a380cc8ba4fe720461684a248009ee11343782a953054773a9fec263b84453231ae0ac30e7049045845f59fb5221b99dc8f42a8d1fb0c2393b97ab3d86896afdd22da2c3b46007254b0f21867000000b02a98af33bb9e3c6c8a62d9ec544685ac08a7268eec47f11cccf64dbda2f9652a5c7753dd3e8dc1ffde8903e95edf69b969adcbbd1a87876bc6a8988c173cb6f332af2b05d60a1a65526973df6b60258a2477cc73cd3b30481922a8166fb2d39e284a3529cbc607aa384d90395ad8d43f1b2dbff9bd6a1308770d26644eebfc8d895e309d4360ab63d8452d4459608872075851f715518e21c0593f4294d9eb5ad5f2761a9951e620d3d3f565e80e000e0000021c000000b011e175da6293aa9bb297d435c794ac4c1815bd83f6e61c6bb0856c162f5f28bbc3274cb745967bb3cc3ddaec596955445009e403fb28c372b108da9d855238f147e41d8990dab40dfea595c95cc84c84ac598a8bc3608bf246aff5968f1219e384bed767fce07272817ce91257d2f3f20da780cf6b5f2a7c5a629f920543a996c7e493498ff561def2091631b0c4225802dfd96709a51c36759f7df7834462e4de8bb58558982ad8f88e1641c7ec0b19000000b00c1c740987397ae3b58699ddc77c6dfafc1dcf72564320cc23f58f9881d85f6b874a9519cbe52f2aedaed07f7b6d55b2f69c18f8de93c05d764417d672887d0ad215c937a4dfce1da027d8d3c61708caed8188bad2ce692a6c753cc4b0f36fb63722f9f6e336fe799d9526ab858951cd0cdd5ce4218fae86ffd5f4078ebd1b0e967769a37849d38feeec8e849a56968f22a3e1ce09476d39149a1a8deada21d46fbd056c010c2b3a26624c276246f1ee000000b00588329b044897117fc0067144253b2736b7a0da6fab20b6d603d01f9b8a3dfadfe66def044ef94dcb2b6efc0008a6b1f452f40544d9373ca445dc6b662547c5e9cf0edd4923474f8bfcd7126c0f36a1ae547e337afc0b2695496b3233e41afce3652a7410f1d06f695790fab0a28f592f422fb5766197fb4c2c50a585f19e30cc2c8b7482b15e47196f3593a34ec3bb0eab70f03135f5fb5550d7ed6cc07185a3371b90eca916217a87c3df6a16b0e80000021c000000b012fd87c3af79c69aee6c984a3c7581897e409d0d5191afeb25a06dbc95ed3857c0d69fc48146df26978817b974c9ff4592876b5732b75484b616b659326b10a30684b51176f3569e307be9e9b3a8778a0854b567919d40483a210c8117d7d90113b70ff40cf6828c7630d9081c93224a17d62c62755000687339a0021ad795224ddd97e07632ab09be6d1eec88d5a9211ff2f9f2737019a3f29e2c7d63707d70394d508ae146441596e2a9789d363652000000b008e0090031f731c347a570f5a0821134b821a108141ad7465781788f16c92bb5776c2b36011a6ec32b2585d9f50a3787c12485bc34ef090b07f0fc3a5144fb3ab0a19636847a9b80866d8b251bb1b6ed4a6d66498c2f43a87e6a5915c4338bc537d5e6b3007acf5924aa0745a4ae61ef1e6aca7cda03b9c14b82d0e8129563b78522bce26f2e2a1d57ae42ca5a6c77c0060fd26586b65a246d8259eb743cb940f8ae6a0d03f70d2652bdfa9ab27151ea000000b016db4a9f6f4ee45fe424897029ae5a7084edfc3db3a03868cb7cf4dab9e4b80688127e9d7976d100648d596fd3e507d428fc1d458e8a4bec83a6b31e113ddbac145e352f13b9f87d3f2ad32fb690b8455e5a26d54526872ef4fee7d11a6e21b16d0314e1fff60d0364a51d04038b0e251f9a1ea8daf5224cea723fd426d945034cdeb4acee33c72ccadd4a58c4ea8087075b2c22daca54d20c2817c9b07721de733c26671da0ed0edfbe91f35f9186390000021c000000b024530d4ae23aee8f13a622629e72e9607258909c2e69d7e76a7aec04ec5ef6f49da1cbb3bda63ed7b343309be55a1152c48078b90d50a728e15ee35a690765b79d17d15c7a74599f5126eb213195787500f480abcceafbd89960b797a6793d1ae07fc2dacce2925f915af309171f6bb52144a90571bbc7089ab8cf44ed2f7f8a6639cd4f5d9f5f005bbfcab704100cc1142530130b6e736f1a8e79c32e66d40875563e2f04a5d9b12dafe052b6b9d7ca000000b01ff647ab5b3553128251df693d05c6fcd94dfc1e91951232e768e8e00b41496761710b635e9e5a8d4a252a79da52b3ffc8cdfddb1e348482e7300da8a78d8493f7475dc552962340e1a14b418cb17c8d09e242fcbf136796ee63740a43ba83e291757da7f2df381f01217a8f04bbe507135415f931017bf980b718b9f8a1f60a75e6343f0e72e4e868a2c50ffda1d7d22d02ab41933aca301cc84cca8778a6c42ee859b63ff5b6132910362b97a5c802000000b01e66163a2755e66f81bb8704bc5c0a8fabb69cb51bbfd37917a51b0d84fc9f7c8a4365cdaa13f59767d3288c2fdd1d0d91d8551c79e985ffdbf4086e2e0c58aab6cbd5202d38da073d9545b3b15ec474a38eaf0545dc76a899857c3d531cd621336889abc51e8acf7db5039f84ba060911052e50aa8046c281ac26e9f15cc73f773dce0b965b5547fc182cd8cadec5fd0d2b79bc1b197497f6ce33809077c2e1341dbd99f8375ae17ffe13ef5fdbcf9600000fa400000168000000b01b9df8582a022288f5f5612576d049c0b1f6ae21b0b971029f2da85b9f82b73f3e7ed4a6fc2f13a7ed05cdc72e000cc28cb2986eeb7a6cf3cfbb221a1f337da7f6c672d58d7d8450861577bc993d96318c968d4a86b5e31eab13734790586e1b310627a33e2eb31a12b3bb192483c2951cbb9bce4f32b25b6cc3f10f6cab29dfe30ce1b50e6d77a02df200a63a0c5220024a7423683f9cbc9b3bb6cb8c8c3fdaccac7f6e7cb9fd371a2c1b9f9587b0f3000000b00cf85538d742b983a6205663e75d9c6572c0e533d6b4f855c24a8b1911e06614fb96ce0bffdb124b20231f450a3fc31f33c74645be402ad925e78942147498ab85fe5387d95390ab74325cecd76d50c65234325f5e377c277bdad3a02f39d92ed504e7c41992cf0f44e756e8a526f40a303d29a4b6113cd1b1bcb69541101ab9ef943e6935e0cfc5d60b31c4a34580592eeab3935b70bdb78179b78d4661429e201e9185f92052799472467213f4477100000168000000b00362f8be4348da15557ff22698c9ae1dfbbaa933d8f0118201912d5bef08b2467d5f60cfee5ac67d26ce39b4a919d959f9c9fd468048b4dc02178c223ce40f2bb9f7620d1ab613bd82e263f3324c7a43578faf16cfd04c6c25949db1f07cdc146a588ff69ef175f64fda88efe30ba52815d3eb3cb8ceff54d6780160e7ea54efc75b726d798f2c6a626c14354f6af97e1e045435f7915db1df9d4c395ebc43fa045e1d4b0534d6b10c0e96278eaac19b000000b00594fa962448a3bc7dceea43e6fecb8c87a8fdf91d4f83aac2cc2ef2104addef45c1bf192ae9529ccc04d08221aa31332cd8087fc802f628349ab8061c5abec65301345ab18ce7b1799dde9732adfc0945fef5abecb8b0e8ce15998455eb94ee04c5f0a04bc4bf73f7b3689b29745b7a0c8f33a0d0b3ecfceb53b5ea9719608b4f9fe73e22d4836f198c86a8740cf82e117bfd326b1ede0cf26e2bfa36fc2df55fdac8040b736789df72eb54221186dd00000168000000b01d0996ae53cdbc021043f5332bbf80331f8053cdf0244ae3d6dd4bc4f6de2c78055a68cd6d4ac5986b1bb60a59ac6f7c1db8bc73c556ac68dec286c8a35ec73821dfc7702b339db66fc1391a9e9f675503f630d6bd668f4b853621a816829176a5f00aef79d2d3b5b07b45daf1d9a86324243d505371d5b814e7aed23f68555986fdf0e8bb6ce9e79a43eb1e1647f3e413d67e1c2274dca01d0b0a4c7cddf09d75ab0d47d0a3325681d1f03df424ba1e000000b02935d908f567b7759359f66409dbadbed0d1089effe3d95a56ab63b1c22b4e672e94a10910417db927bae9bdcad3470b8a8b6e32ac24c110adba8cce9a3f4277426d2f816cdcf81e120b3d56d29597450c10054e3f2af395587a250cf00f7f9f46c82302cd628b4ce7bfc7b8232452091fd2d0be2dc0facd6ab34c57f8af729e79603f16003fb155cea9cc1ac9425d6e2dc9363f9d6e15321e29d76881d7640f17772c1ce1e8f152480ce6629b89badc00000168000000b01bbf946c7690763bf67ab8dabb68db6e7488fa4f53908350157feca354336ff9c7fc30c85e5203353c1eaecf104dc42cd01f7b321dada955ec13bcaccceae6cc97d886919ee1f44b6ad1fb5ce50023e0cacf253e868dce7b47326d7556ce99f453e9d249a08d115bf52b73b273115b572b67fb5b03d5f05337b87356000c69498a9aaef1551fae6e3f3a77e55d547c581dd599bad68dde61f7f5b2f9fb9bbb9791f48ac7d18d0d5f8cd7f67f9a0c607c000000b02a756690a7e6660712a100fae90f32e28b645f70f1b8c439e76837a73b07767ff000a1711532cdcdd12851eb4a66db81c93ddef60b717a148c176d040a7ca8d9c5c0fe3a435144e883016d58165497a2c523616b47d77909efbed55765190628be51fbb7808147a408f78bf69bf5446c2edc29e8a09c9c534cc621fe5ad93ea7954eab8a93e5bddda7c9e328137eb89d2800c078f7a719296fdb5042f641adeaeea0050525bf31376207f04dff69c20600000168000000b01753ee7a5cd7894f76cc4ccd81fa81946fa03d60b832b9ae5928409bcf1be2f2bfe8784bb7e72c7ce59a4fae24c1ac1172f6854e83dcd37077590f76dff208e21253c79ec94de4b139f8f25b231f3734b06d698d8853a2b5aff264185e9063e65dca515aec08ab170ace55dd165cdd7f07d874dbfdc2f7bd11ace2892dceb7ccffb284d752006ba05c6df57b157e82eb0c92956e82a956c26901efe3bc750727f24f167f584eb2feddb3ac785f0855c6000000b003103239b2f52287a1bc26457e0f304469beb7b328b62f6c09048b80d8139f43634b59e50924881c4f38aef3082c520505a2355483ac256b6f47f62dae3c044e40a0fd7914b27754219164104a4a431f2d689ba47657d8489d2d534f4afcd27cf9a7b1cc5b0cf4ed17eb0a5d9c2334a60522a1aa57d074ad133ef3b3bb5d6fd7fac831577edfe9bed2bb17a0590bc2d925724f46f8a73ca47ac3183725d297bf167a4590a402d853265f47caff62c02000000168000000b000dd75b6491051f8935bfcd680513cd6ca18d95dc6c30f0d45dbea8ec91d5b0a719816b8dded157c39bdad95fa032f0a2fea74258c60198bf3343c17976c6e94186bc12e29851c4ffeadb1fad6695390d271b1bf33e414974edc25115aaef98b3c933f3d0506adb72ffd4b2b853aeec8123719b96aa103abb947130b19ad4edab2857fead220eabdbf2a0bfd0d9edde0095733d00de26130b8807f29c49e406c5ca9184a48c29f0d3e231bdfe52b1095000000b006695840420eb5ddf2629ba523721467facef0e6f381d4f614442b2545f7bad2c075532d87bcf9c9916d82b395198d7851771a82571cf877f89a1c68620dfef720531f456303b8761567f0dbc59f0e1d92fced163fb459a742551c6cbd255af8c82a35415818f87ca8e9cb0d52b181ff0db732ce4a8bf7eb1364c2da8bb2c6a4ad22d8a939559e21e4dfb8f6294f58081b21393a87bfb0f080cbf81656cce77db7292249d80fb58838318e5587cb041300000168000000b0148de884263e33bde74d5404cc8475b2f035968ef21c72b4a01b8a543b0993a3eed18a0ff80c9d9be15c898932efe6af2161dd1a1d4a43d316925eb89dc4fbcac4071d81a455ab7358555e88a1f559853e4e4973e221ba36c9a09f9a47c4ccad55011f26d02128c5c6782a2201e5f7831bf219a1bcf7b1bbef1225e3888b23d7cd93cee4d69d3ad600a2c03129fe4d1207795b2498b5a2598864b573c52bc4d3ef9e5e1b1184b6a7838f35be61308d3b000000b00853bd6771dd1579d499a595be86a447bd9a76581dc7261a19b9c2fbf5341578be1428be3c45a211221dadb1c3882e2adf133e9cd6c319dc3d948affcaea75f6ba9af80a1c127f1c8fe3d68f697f1999b28e7d164e39a358ed6baaee067dff1c7c2ca6fc608655c9fc73ef56278d8efc25e7e9993a246395dd2de5cb458d0ccdd47f54025c4e29ee521aa8ab0cc7e60628329e1038c8b52d3c49a99148bf9a9db8ceddb7c2899834ad1aa5630b66027100000168000000b00f646cc5971c8f246cb4d5b9fb3156dd8d6261aef6860eb87240a7264d7c9e0aea30b543dab272c1bba8bb3e777ba26fadf584ac8a4630fe74693c15be2550185b54227892607d82553bc204fb44efe2850761b3ef80eb52bd08d62493a060432579c282ca285db329f8e748a77f56b90953b22f77cca03e9cbc6cc74b4c4bf99b19871bd188689fdd91b4d66d2bb9ff1131d15acc0c19e3be21aadce7e9016cf98811e18676d28d3cc5f924fddd383a000000b009092ece082b69133ba214df83655988c33be9f21d3c73d63e67c2cfaa34a871feaf3c93de30d360c6f1832437a3634dd9097ee3e1ea4200d39f5507e7bf37cdb979fcf0b86bc87ec73d34f9b3199ab1630aedbbcf806119953bc0e255757c2361be4c82806f2a1fcafdc093779e023a22849cd331c9ab9d7eff5bceaa17318dbababb01b8c52d783b99e4955a5d175a1f1c5bf9f2848499567950b2943c4e2a50c70ce6cebe04f2c3f679eed2af93d500000168000000b013386424c42b06faccedb1f985f1d18e0b063b397baa031221778ec55fea5d2842e84ee2e94cfa286773e10c9864327fb406f5237f9dd890e8ec6f46766bc312f64ebc29a6d70fa105dacc9575ae3e1ffb440b5e0b776b0ab000dd4e85efc7032e753806d65e74a5a267b14194f922f91e17798a352fbb5dbdf42a38f94f1a2aa6fafe33a56c573a55f3ab112523c8200a8c4425adf11b20ada5fc6e6c298a29703a81f69c836c2b86bcbe455fb3c567000000b01e6e0d2cf8d238b4013918d283e17257826b46a17df141e24f4b2b78a1b08d23dc785242a0074d5f4d317106e4a98a3524e0e48d7febae1f147409b1177e82cfc37dccdcc434512d3c4b6cf6be3a1a54b67587d0478ef6cf4423878464d4a0e33c85e1098588b24d645a0eb19dec8e49208ef4a81af41618ba319d7538fef2d8e5030ab012020beb2db1d6e8af60520409c87425ae226705f606c17dc36b8f455eeb3aa55d83376a177c2fefe7a691e100000168000000b02d33b0a574089ba846ef9b29652fbd89572b401286e47a196f42f2c59a72af345f820525a0f390959b894b7902ec9b3307391ecebc8f44c2ea95b564071ca9b2168964e235968e88c0fab913205d3eb0e99df4d6ad07d57374dcd759cffba08f0f9e80a544dd90ef3f78e90a4ec2db822af75219c5c77d9abfa1f4cd4ba1d539644036f0c0ce0b3e222e5bcbbbdd57f42b011ab0b05e070f65d8462226aceee775418e8a43706d65f6e2546cbb799817000000b0104c05c488b901e9e516db7628e6d255a41d021c33713eabf78dc207b004cfd4f4dc9cca5239608cfa6204d14664631ec4a03a4f56504fe3905275a99c8169a8152931ea6c0f17f4597e128efaacecebc156d6939edc07359811366863a0d2e348cd1ff96908d54f7c00dadfef30f2ba13679a3d2820117b827ad36c4aa5166739664d0c882bc4f754634109a50ccbe01f6cd7825b29697e2b8df7738a163c3ef9c91bf1b63c4cfb8b562892fbe5bcc700000168000000b02982c72e441c4042fa61d0133f192a52c0533a1838c4d1b8112b9161e6c78c46f8bdc3a89707b1d1ea733a8fd98443610648f63aa90bf8f3b9e2f7b486b479609e37972d0980641ff0fd998bb893204fd8cd6c0331cdb425c0f39cc7db8af23ac058e7f5b6994407237592be10702d20202204d083144509d03ad822d0456863beb964cf0ef4aa9e035887e73912334f0d33bee8566c3e42b5fa0eeb4a415a3ce7ec91ff68c2798d179b23999e3949eb000000b01e7aeea8d98f40f8287135344071c9cf65f26d7d5a4b166f8d0376c67a03bae535f5006ae64575ca1f3d648b3899b47390449e55c465d9c8f295d377725c727cce10ff1feba4682eaacada187883051719a185565c8bbbb8ba4a5f3fb166d467d98ac14bbe4ef27149fc5c762e77d3ca1cbbd5824f8c64602b4b61df5658f8aa5e636b2963ba142392977939dbf8c0de01d6d0511cd1d3c1d92827fc645178588d3288bb2894a09285d70212eb35705100380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b01d5d78bc81fa611001cb6b8fdae34e643f2c0aeb3dc903824c650b7d30c5f30ee29ac7152718a92d630f59f9f1bc535170acfc8a0f4e8458c9606eba1df158d8aeecdf01d3b276ade863d279867c21c7ca1107eaed8ad9fd205c75e0ae8e227cb8cd6c2109df073479c9625af63eb1922ff9f469eac7dfe00c2b6453138b86cc8d610f29098cdae6d3d9cf02264d9aaa0f68c5222e40323d2f14ccf3a239dfaf5de240812b33cb80bde5e10c27fc3b57000000b00eb52dd8e10bb0e741613fa7ef4f6b70db1801a40e81f7cb6d32cf18c48e911d0c52c0fcefc23525f1ae04aeab5a08f68012a3e994f042a2a627bbe7b73d4ef3163c3b29b603f2e01d12b41abb1236f884495dada201f178a56ba1ecc80e68f6bf369f9fbff5fd8b984af328023ce4002e403403c9e4424441716bf5f80cf200fea87cdd551244d01599084a2c91e10810c7ba68523a9e67d9fb2409bf03e63b71a5f0ddea9f553ce997e679e10d2210000000b02560f23011da264d2204f45315574b9daf7d4f11c07845ebbf569fa93dc164d68bd293015f8fc7552dc158d319bdaaff32b391fea9ebc8deba4acc84ed87b7f4beb13fb878edda83d34575691c0d5ac88d30457026545fbc15b98de826751e6794c8d39d90a0d04761eb8938b20d75ad0e7fcbeea0eb8e96c8f746e6d0bac0d2cce7a3ea8903850abe81574219e6e19315dd9cd5780d5701f3917dd5e3989bc193c7909c3c3ad97382f42e6af9dadfae0000021c000000b017048eeecca50ffb16d8e3f8285d338ac89e17063109cb38f57000809684d3021d356f222f0764fb714acf38a3deb2142c6cf9f9de7476afc1d8e4e956ecca54b3ebeb7c33bf55c9408100bbd0ba4004459c4f3e3998eef6d2b0b826312409bdffda8e8fc5122e928ce578be2197fcf804208306181426768ebbd637edfae4704efbe485443fca4b6c14922c5d9e9c0b2f77d353b76e46ee53f416bf7e3a682999ed01ffabf7753dfe7283e71fb7e85e000000b02e0657974a680547dfd3c10f1265454910d4ed175aee39a308a40051f3d988a607b8a8dc21a8bfd34036bbb06f8324c3e938a5f0649654749d0c61ddf30a4fb8708a10bae59d60828efa75e424219b5394940f6afcb6b916861e7c27dcbdc5281f172027ddf69775329a5a95cd46d48a00223292cadab63ffff320e0d0ce82aefb31f062892d15fdf0953546d364639b12fa458f9b60ed0a0d39a4fdbe6e2860b7f62925637bef497f141602c9d270d7000000b00c95567e2e6094fc3037ccc632eb4e0f69b0ec9add86535b8975cb4592babb2524ee598e5b4565e01970a95c927671bb09fa7a6c8dc5fba18bf9391c3b14e76adc17bf6c57c18dd8f42c5a5c6b894b222bc4e273e359029763b42aad8cdf5162f5614478ececf308adda3e27912edcba1521a52b1b61d042edd44b7708865870c151fd2e98ba40768875bb261b06f9aa0289e61634d7c2591188d43c834026f3eea9f591515c40fdb85e22c54ffb31f00000021c000000b02b32adae3f90e17a53312e259b5debec02bf85d710a415fabca8fa12a1043be8799835971c32aaba44a20964709b4a2c95f73ed24032992899c2b85a61d16aab542ad3a5198178205b6569ba4fd147a898b9049c1b211c9d6ef20ae300354b18b909395562a8d0f16b81e278d9b020181700d26c70f9d082713bc36024dbc3cc50a77070df6d70a7430981e90c6c872f04917fab37a1eddf4ccd75b775d96e673f1ed6b2ea1e28d783925d4824eb6598000000b02e2df3d39950c87b85ae8e8cd2bf4823cfdbf852220ef78741497859e0ec18567944671984f448a83a7cc93eb14e59daf5baa359889699c2597e8b15b1042860ea5c1012d8dbf27dd26e0e7bf7071c69949fffde11e2662bb0cf0932bd353768750dfc6b958858850af46778d6a03cb901b5e19cf809c63fe434bf5bdcd6a9008cafb74d9b6187030c456bac2adbb9a2235b108d24b25bf193061cbd833af49adef5cf5c3cb08954366d0e072e796484000000b02065a49180d6081e487dfcf907be0623d141a5282c794e099a5d9600347984f28861ba0df14fef522376d2567ed7db008a9e5acc4155faa1c2b31387c5536d13bf7914e50925e6f2af59bebed6c924e44df66424b81d5a3168360c6aa9593ce4e5627c1af04e059181a0c27a1cbb02b20deb2dbc1e99e193074c83a905c0e903182273ff4977e203cd83ecaa703016e3089de6bf71fe0021ac3309e1c1acfe6726d954b37e135c2e101a1ce617383bfd0000021c000000b017011d0c2744ea6af214591d9fdc347af720aceeda73ed8897c959fd9deb830e910537df01bd987f76f0526c7d45d957e88e1a57814509b25716796cd0bc6f412f82d649918d8f7968c7cbdd70c6f3d17df3fb92053e11499dd54c7327dfcb66be361e99b7d839f56d80162037264aa80de5f6ad2622f225a2dd1791ec92cdfbe457628568fcb1b268d52ae4b4f19ffa2d371eeb88db0e8799d3f4443a1ca82f373eca17c232c288b1363eed59d952eb000000b010502b80d750da505bd79ec279c4eb11d2891cc905b9996d9c4b0f0a359edfc51bab8138e6d7de86c1f7e337d605e000fb005d95d643e44f4588905b58f6aadd6a780ca323492999240e4057166b816ad0f51a25497fb6e27ac083abdb734ac1c78f94892da418343a24456a09aafbc227463955145858de7a2f4fecc7bbcb2e22b1bc11560b7fed1d328a7e1d5e390b2b2ad74dec66249628277c8f9d12f07a02f8ae872628c2145ee1385c5497e9f3000000b015b65698fdca8ae228e489b4b929a1ee3b963aedf3017dbd88fde0a3d805ee9fab109c0a8f8bd1206ed2ddbe436d8783f1edcd9abc543a4bb020b3a0ccba5a899afb702d4b3951f377b93d9f6469186cfd68e32a291153bf3422e3d4e37266726e6a683419efad3bd9cad30307ac2fe8211c4d0dc4a2ab91050344a0542696caad994403bd01ae0d13a9565abbd53f0821124009132de1ebaa4df545b36676a076435775d29a2235d84fc0b825637e030000021c000000b00b6ad3057200b4e404890d29e8245c9bd17f34e90f2a7b8fd3ac0ba9de5d446620761ea4bdd3814ccf831220f6a8dcca11b7d125fac4de4e78d90c429eff8c3afc2f465046afc77aaf49128dc446b1758240bbfdae8df5bb7836ca67a94446c2bdc7dbbf3cc6e8f9a6d4e63d4b3a830e2d2f00e5b59aab3bce6b89c80a3a7c474cb3db989750938d6551c4b4e994d20629b7359e1ccbc1653393793ecd73d77ed07ff479f92e53a792b09430e5ab6b9e000000b02fb340deb014481eb696b268035047d0372997fae78b350d8f18c124f52edc8c2a9e5f20cb1b4d8ef7a9a603882634ba96cbf1525561a269ee61fb72a5e19632d3f7d4db01a4cc1d46f77868a4d6d67d2e89f84ff715b000f7107f7808938fd76001a8b939b72bf74a0cf0e5559db64317a16f0c9c8b30b188ea441d2040b1d80da3227d844f460628653a7d2c46a08d1e3fa9bd137c1be0fe20ecdb426656150012adba2c38a6f6ec2bc26d65aece57000000b01cfa2baa186401d2397f8c793cf51c4cb0c712881ffc5aa577ab92a7ccf097de4ce47b7b6f3e469658bd2ccc0ea316da37daf850fcfb6857aecdd29bf157fcc5695b2a49570b57eb709e9c6bad68a2b45be3ca05078720784e6943a67aa6b66272204a27995934292f72f6b31fc9ba3f0359142115148b976ac6b4aadac6b630606493c552734c994f8c97494d1dc8f713410858895b326d2b121eb7fe4d945f8053151d91b64e90197b1c8f4198e4e10000021c000000b02ff761f6595fa886e09cf424619abae559979c4e8010732c48307171260d5dd20193a8e799ce49e262a6f40e89802b7fed056207408b639ea41637ae8c946097a5d491e82b7f330ce9980d49fc775408ca5cd241ebba6da7447259336deb8f3a2fe4180273d88d638c25fc0f1e78c3291ddc95b0bc47139c9b0252ba62812ba2679ca7d020b07b13c09a1ecf37e9def4298af73a41669cee01dd0485ac91b042447fee19ab55d70960acfb6af8c410b8000000b003bb160e7cb6180bfbffe000cae25a3f6ecb3abb7c3b50f9c891ce9ea20908d9089d6271b41fb1a8741033fd836f3ead284a9ca1cecbe9aaec451653df92ecf8d91fe22bddd602ed7ecdecc004078a9d4c4a02f58255a74d92b41c527d299378c28d191f27f15cc594f3eac7b5f114c32d1c1a990d916f7d2587b52dc3455657f8aee2ab0a4b34e8e97f1c39e2a5d28e108b8a929f70ab28104c8b1e485511c34a9632ea78c96ed0b44cdc6204e38928000000b007437dcc18d8abb45ebac4b3155beef0ef31b6da00df7f0391202d65b569aceb398291fa73226b3f783039213ee06a5cfc51ee49a2bc9de45508d9b7102e5e6a33583c96ad0d9843b9a7b9692aabd29aed6086ef150be502d32fb502bd078f15db194d4ba7ede6fb734f1e2ed3b4a38c1e513b9bc1ddff6885cbb42311566174f1587117429b43e234120c8a44f1d2591b017fd51b1b6a6b828dda14dc7fd48c92f8a475823aab9a749ad929c76f14090000021c000000b01fff6471261f214a56abc56d36c3954c0797e0259a781358e1d7d21f612a0330fecac455da0d380fcab3f80c30964f59b5abd157e70f2a06b716ed3aca0f952773204b240ed5c723af529d943366f4fece10bd5c7dffe86b62f7c086a6b03d96abc70f16e442dfd37a9d8958b61db16b2c16f75d5664c9a161029ccafa730fdfd2213b1453bc7956d028a445e3ed7bb20cb69ddac980160806b5454501b2933198816cb9cb727eab724405a507a63f4b000000b0223be0f4882b58f9555deb567509caf52d557f7b2f6e3fd0b2a9bf2f7f1f2b192d9f2532c3c6a47876c9d676773d3ece33e93a70064bccab377ed327fe320c7250edd93cefe9af646577e188e5d1b31b9690ad8e6e31ac164ecef92ca20645893f5606275fd553929a2fc38f289fc9ae21c180cd69244ef85cf5da8c597840790ea9194c50dde875c01c506067a9c3e513de740d6304dba81fbb1ecee1290c564239096682d049a82d62577ba9dd0db2000000b01b2652bfa98103d0d6f788c514f03b03c14c48ead330e04a96c237b6e94b86f53eb902765865bcbc79e0f077f24a2a952bbbbd490d1d9767ca09fc8c56f10517e217e5ba5cd702f71b866d040d4b3e5feb3d937e5b9048badd3123c8528c08d9140df178657ad779acf64977a35bdbcb0e4672f93a17f5f91027ad163f623ab619cb1943efd7311bf437e669b4ed719d1aee62405603709fcf117258b136dd58ae612c2a326e7c52b2ddcdefaa82976e0000021c000000b02d5b753a8d04975f26c05803c8c2d910ec016f525ffde074b1cc1d8b2ef241a81d58bffa52f2255e614f8dcca690979c12b80c26f1b3eef8bcab65720323fcf2c8dca02c7560bd564289c28111f679b8cd71aa1d7c27bcbe86d4cbf397376a075d495a0ddc41752ae41beacc8ad4afef066bce5d0199a91ceecf7ba5ea8cebc9375cbbbde5e394395f0d2ea3a7fb295a188643ca8ed1a80539429ee11fe02cf1678aeebbf477593a4df8618cacdf831b000000b017c8c4ce474e91560848b41662c29ddfdbbae1b53e535a6036c785374f7b0ee103594625f1ac250c0a3ab476bdab0aa0d9cbcdf79ed1d69dc968da8853c56d3d41f13a404d65d870b3370d54fc44d6136494aa6650418c215fd790c1b956c3528790294367d2387499f46ede3fe7513d1e014f345880fbcc708dcbaac6ac50d7c7ffeeb59d070ee43feb94f7229e18812aa86f7735716c43f97466291a70762aaf26547f3445bc5a7aea9aaff389fb21000000b00e661a74c75f1167a93477bd56a23e49e475dafeaddd5360d7cd4f2cc59202dd9464d8191d73a9a464c829ad430156137f77ddf5956cd0245a8c056a58465fb25e22905b58c9941eac48bb336d0e6c5b8778fe684301025d30cf98730796081494f1e5a65dea1e72777b09462b71b69700f8fd322b262a54c8bf673a23477cf66ecac0ebd8c173af8007c98fcd965a5f2ad3639804d82b6296221fa928583aa08c53fd404ace064d3559684f35639fb300000fa400000168000000b00ead6f026e928ac8a0795ab8ba70dd4d6a64265d6f0ff5aa99a13f573eb4b58f460b05e1f43c97dc1a5c8b081e92431f72fcffb85f065ced0e341fa63085b790f230c93c1694fe079cae7b9c336adfbc3e2f796cfbf37cd8bd73cf6336a4154094dfcb0b56d7af13aa9cfe2ab5a044e32a2aeb5b31b53d3e1ab665c48db90dc578e455d28081c1c00dc6356c46e8233706bd95ec4255176ee4497e06c2cd2ad44ee820a4c63dfbbf9e73ca12e70d5653000000b00b2fd7c3123627072e1868c126a231dbace4ec63b09a35812e11541ad1f27b6c9d22edaebbab313c2ec3a06029b585ca3b5f5b2645058c53edbda6fa6a037728ace7ed5bc484a8600f1779d9a9e52b6f0afb13b5278c4b2cff0d5a2fa30ad7f54aa06c7a07dab691f1955355c39f4a7b0f736fd9e82a3177365440d351de3d6cea622e3d60d93c1a03f5a494c4c83c262881e84eeffeb6dc610182686cbfa67767cc93a4dd2447edac207c777934d86a00000168000000b010585b454da2703b4c94fbe624494f03d4b3cdb892e3b2b37f2ba2ec915f41412263499188c1248797cb5953b909079cb6191f672905bb980b90b6bbb8078bdc0e5fd5a5d08b4d2645511e0e4daa58bfc4c47ee88b24fc4722fb2a9d1939641c9f9ef66ff57fb1057aa8c69382c899bc13a2149c82abc286525376ee7e1673864249635178bb523bcf6df89f142132d418c71174b1e71c5542e3b50d593c5e786ece68f2373a6bd627ce0f6610f212ac000000b01676745d8548f8ac38840fb4b66190835f02bc9f920834068cc0db19365fb2a238fed65d0c90399f06eab34f1650b2f659c701117333265c3cecceba04c1e9e02230e5211b879ca60ae5fb0352ef5b3449556c931fcfe9fc9937e8d1d2bb5df87be086ff54c42fd13a248ab2dce8cbe010daaef37d0a054b4a8e657e10b0360c5d3b2337c01930bcdddfd5234c50d298053184bda7f3d523ff7c0ebbd0cab64b56ca7e5f093744e71290a32604136fb500000168000000b0287e158dd4a3e203df2e26175c33d34c5e6668d64ed9cb672fcc591ab18d0d3eeb2337de1bf1c7f8c95baf5f91fee9e03eed0fefe6c371042d26b2e035133954224c5a8cb9ade7375a748093214fb16ea951ff27d68e293256522c4833264b62b43e870bf80543fc049662bbfad54b650701bd302c0dff752e98b9206ee82cdf78e51fe9b858258cfed7c8d1b57052122c83b0ead5ecdfaf8ae6dfc5aee288b45a8bd05553e6ea6a19f62c40de7ec3e1000000b01566c8c0a9ed2a3f1334c63984568f3aedc883740269434fe81ea82a5238b1b91f542e2c33359b98325f24e2b1c982f905f909ad6b120c00ac4d33280ef0aedc5a01e8b19aeaafe11059abe726896fa722cbb1aa39f70a6f871c7c9dc547c499d5e244e0697bb1d0700e93710fdd9ee3286755e586db0ead3c65cd9863e360756396d14ca321342605b3c23081f0377f16303c0ea6da57d1d1175e6b849632586f81dfcce23c4eccc06eb527c2a6056d00000168000000b0012c5c658d79f510480a67eef3b213505899e5f15d41407cb13ca717b3ff830dc26e37049c474085cc5fc631475eecf4e45e299c0beb4ae7d1a7fe9e58b3afe3e281e48625cd9f2910f14faa5228579edd8f34fe94b561e1d04e7212edb7e80709d3cf12d0c533ae4e128aac67995fe82439fcaeb84ddc6fdfb18c6e4f95548699c727e7eea5cc91ec967dc2bea6a71c181e2b7ce58a1ccf59a210087e701b27bf39a12d4f0f07a3e50c1b12089d31c5000000b005f9f9d7569a1767e4816818401a78bdce0cdcb9d8b1ead1e69e917de53d0f8c40722e862602044b326ab661a2fba40c5f4bbf95fd4d41b81a7a5ce08cd200a8bfa7358aa144dc522750f972160f2065dd557256803698d0a189fdac6efb47c24c7e6b86a490e43d04586180e6f29af416973e174e5b19d0c500b80f0d8f38133ed9cd18c3247da0ac7d91ffc86373141b500e43a187766974e1031939893c607f1fee1ab0b0771d09d0fa13195fcb6c00000168000000b001657bed277f927bc82c8c47a7ede9a6aecdc0ed156b200750ceec3dd1f30881ec8e00f47737369279f35763d534ad13e838c9b7c3a722889de57899a67ad47bee6be1588e6ffc4cc15792e14ca75772906b655b7d151889fc7410bc560d348ec2a140ea96d16615b0a7b0edf8fe9af21bc7b7c2abb65dfe2dbc57889f0b0676d51dac92635040769ef5f66d5628045c2cc2289b0b6e9a155e8d5d65ce7e44bcf867117604c194edba0c25482a6891cb000000b0128e7e4f84f256e7c7150bf0efbdb087548442b83040746755281ba7e40cd57c6dfe2b95b707a2a5176a225e3fd22a3331fa5fa56d6408ad9904730faae6aed6992de2568869df81cdf725f6684b995b79a47acdf81c1d86925be3501e0cd971b13cfe80536b3d8cd7d0182aa825122a0663138da5bf0dc9ef7cdb6ac102701f051ccaca9b649c1bc1e5f2d201364b4e04ce71f329ca1041a9346b1fec964d3d93d4f5a948393e5c43b4f858f0a82f9700000168000000b0109d0ae88c48e69b1a27837f76e8f69e9b2056027c665165ec60616b71063d3397f0758e18732a258b4e368cecd1b8402d8393abb41ebde25e46a21e17ccfc44f727398fa0bdc017c52eecb4b2ad7c190a014c0991f338f58487f02547d8787b3c6986293370a9a1612fa665848e9f0927697b9e469f4ecfbca42d9b5483178cc9808490b8be4563efe40f8ecfa7b8c91076b6ae5be2e5c1ce93d5c2d44073c44030b3f293e667bbdc7a3569d17af669000000b008d92c9c52f2640a911de46a5b93970513438f39c118e4570b8b1ed28220b148b30a18c59cb7532a9fef2e031d54f621d637ef8ecf3687a2df0228fbfacea2d6014faffccad628fda5228d08376599fdcecaba8c4ae16c0260370bf9ad7c1f38f2bd4499e7be5ad84884968d886a06b82c8ca191aa13ba167436f0349b046521748423559105e4e4d45a73a2d9d2c36f177a85d9cb5389b958950498b9aaf34291042741e71d3943e5e032d7503542d100000168000000b011b69be3d3ac007239976a276f066e1a85c6dd5a9259bbbdf37422124bd80284b90d2340b2161c2ac33e055e1efc0428339aaa14ff06562a1fac87a4629e2b03ff48fbdcff25e53579312d9ec883a235013531bac808be9bd2afa3f3b2d1bc2d02a4a5c8a9ff0a1f24ac10cb5e987e6912f52cd692bbba05f7b56d7abfd91ef3558a82633755768f8d89f76e7ef1806915c81f3982a45295f8a3206e4fdeb07d6248119a2ad44aba387895f7f72ce170000000b022c08480fd3b7372aaf10b90eafd7e51e586153eb3b978b4d12353fbf94067d0f88e30de469700dad2272ab223d9f37307f0bb29f5258d68dd437b8bf1861a5b66a3ea70af713a4523d99bc62ee5bdc2be1020ba3a9c87f768029b27bd8de6a08f240f21d97e8e346c6bee8443ae61fa10f65ac42259a8425e3baa102ce6ccc8970620375a1c870b0b158c2b403bdbd20b8cac1cd408b9dfbc0d605656299a3ea94a645169f2312ee6a7a221513b99ab00000168000000b02a33a1552316b3a361db417ea6b7ec8894b574f88b9d997c62af1b7cd3e4cfb7aa0702d3b4cdbd7b590f0a7957e7853bfd1702d4de758bc456b4eac59e4ad897ff328404758f961595858c6d0aad077c896dd2dfb4f11539ea3c1f6e05a2f467f40e6c47ef7c04e5e50ca282957fab1b032f51fdb416c4648e41974b4240f75c7fd5d0c90c58efdb90058b3d8091dba917eb391393030a590a26339fd846f336db1ea686e51905b51bf14646cee0e1b2000000b001f1bdcbf81655c2d15afa7c6c2d5920ae331b5a695494df52eb97110bb983926daad43709a467b79558be826a3aa1c3283cbeca84a7afc08ecea2999ba37f4bace5348315a2d889a92c3cf98f9627f60661f8289720d7d11dbeb1ee8ab0cb47247c33084a182b9d98c2417d48a6cad11ca3532f891e8d36d50bc956e5d5bb9e886d100d98900c31cc5630201d002f740cf6d9bf067e54c866e4f9f047ba1ad403fec6c0eb5407fa5f6acdb7177a462f00000168000000b02fa0ef8782e13d0f97b830382661e6e1364362fd22b7246b707939ed53eb59e5bdfc76224ee0aba2150a2dac6b57f0cb08f6af0add9be83e4b59a1d833f51aa36e975bc2ddc135b9ebca78161fc0b4e2ad6efcf2e3b3dcad42be72868368659933aa7139daeb68342d35fa389687aff3162a408b08e27363cb6eecb3b78ce1e4f14448c04d2dc426b3e03b1603f27a951cae35f37d423df829370ea5914de588186f0bccc3615731d0907e20b4fb8815000000b0082608ee27cad407c4c981b85e8e48e5f16979b404e0b1d103e583a3efdabbcfc83f41d287ce3d2d289bd487311c444de901ed841f739a1b2fba5c7ca7dc924479f3cdfccd796841b33b2e7866c06959023cb3a648b1466dde40a8db1c5a6e114f299e68d75cdccd17abaf0f471e678217a1ebe7c5e27aa118b065b2b06ab8b14c2ec2fd35eacf41695dba5511cad6b628fc03ccbf84ebaa531297d71b5996a63ddb06ce45f649423b88301e50778cea00000168000000b0070132147a771d9c009258d0babdcb0df251f4a801b3bb149bd50be96be212c79f326e13a72c8410fbf06dab6db66c3f961a9e1fe3c9b413ceeeabd91e3ed8b2b77227ab9df51b04bb367c792dc93de2b5000377f6aa4ba761afd242964d3e6eaad6c478697dd1e4217adb18d09293490a4cc265f939ffb89596b0b4f82eb1963cb5f22840bf3b41e4d4435ddbe2125e052e834d2dd41183c8ff5b18c2dae958a689e3b0e162993f05e13db13f479909000000b02f0f6ddfde294266d182921536b3214f77f7a8b13526bba68c578edd9e2e8bc816a3e59064ada280f94cfdd7f51382b4b89606a6e8c443af85ad5cf2a7a3a608282c5d62603b0e6bf98c193859f15fd5268ae5f7ca56122f3ed04032892922958ce7555be6917433b365d23ff420ce151208f216bac3d8fd85078011c2bf87e7c3ebbf5a70ab8f819d3887fd6048a7d519a8dafe508124b1a2352a304d1c4b78845abf92b774dd8776859c7ebddb870f00000168000000b006b6aaa1844e8005704b1496693b6777c4afb0d63565fe55dedee467070336b3c7e05724bc8c1b5daccbc314bac11ebb47ea8948087019b458c4a000aef28747c02632c76d482f953c6220bce25ad9c62be681b4423b50bd54fe11a04dc2672eb8b493f4d6b64486c3ed35a55843149d054f7d1dc5758a961aae6d81f152ccf6bf573a8f26b0f5986cdc5eef771a17c42207445af59e2b05631d72c8c89b42166a23cb09e7d09c4368ea0bc28da133b8000000b004cf95c8b3f9cf667214a5107c4aae240121dc412da5040db710a70cf45c81d33dd39f67b23b52444e040cd1064c1a526efe463a163adae7238365c3358147d26aa6b9fddd422655f7e62731b7fb0c6e209c146080a95d29a4f949a6e196f8200762212a288eba2e286b7abbb95933500c63b6e6f0b699fb4f95e481e42bda165c38730836f56110859416b8da8c88972cf1a79f33f261a7d7b8e2866d59cf4420e87951ec51007e8ab4829496b5048d", - "txsEffectsHash": "0x001e043fb2c5de8d7a5caa2aa833e839b166cb0b2a03b1bcfa96dd224823c8b6", + "archive": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b0148f0f664f1b2ba74b20ce68a177a770479b6b80977cf10354218e2613715aee6e42162656fcc46daec2bc016a18a90ee3d03238a519171844702e36d72727ccf8cf84ccc3a3b2c24777779d66cd3780b2754b11b1ca952aebcabf1f4b02c4b1cb8bb20517440de62cac21130ef76dce036d96f4a966b51fbf0f84780025fd15b577650dc8d4b9d05344bc3e58a2487f11195886773afe14dcc975dbc875f84acf41d95fe9421dac0513700b6ddf3fec000000b021e352a00d5f5b4db88e54ade17bd43c21e8b147daaf1135d2ae8ed43b8f80ea75632b4ce367c475b20281b87aa45bd0540edeaf15b67c60237f6a6f861f4663ea8ca0c49f9a0d5a0c49cf74ae6e9c47533936ffbf98969570b8fc6442b70a6eb47da8d99e4a0af521a701175400f4822581ebcce4de9eed83d18776838ea697e6a311a20b084e17a7c0d302a75164d218f5d2931bd4394415b02089f46c2cc9f76cd5d9172aae04972a438c8c3f87da000000b01b137db2100e697ef5ebd8e694f557b4bf30016f81889d2e26cce05c4e40858adaabbc317aa1b6afbee1dc6f0c611c0d3ba2e50d211253bef209fff36375413f38c42137eb6413890109cfcdcd8d3d28044312f33731e5f56f3cb19535a0f683231031ae8257b34146bce4c08c0f1fe30cd1433c8843a479f32b2ccd4eab8b35485e692cdb2d4455e89bec8d1a7807be12fd0b088eced310b0a7f7a79f767a67cbb6d94c1c3fd5c3df9d0f29331c9bf10000021c000000b02990b9cdff5d50e8581136832d07773de7dbbe0ce0df36769cb0ac83c6121aaee333cca8b139d2bcaea640a143dceaaee7ee0b3e43aa4d686102424b4e6fe8b107502127688a3441951abb47c0720942a58783c76a4179083b264c67dc706c9c5d0c15a95d65a988c3639736d217d79e2337c6097154b9fb4a4b73f5021e4b2b0c07c1755b70cfc8ee0f76de688309a7292031a4096b53a6ef217c68575da911932da65ab5df1bf2ba6588a8199f5e71000000b02cf88f32694987f0586ee789fea4128e840f0e53297078e94aa91195e2e9cd200b60c0c53a30b85322fecea8f3fe41ad71a04db70ca93e05e79f4ed210e67c83e23868e4223e85661be552a2e06f454b7644740cd656ed1672dd7f9cbc626e6245e0aa16b9a0a0346c9efffdcb1610ef1a820221c1819ba7d3ad523df36e87f4827ba0d34654a879a7314527654862b3097fdf30fcf74319a3f683fd34bc86a9a040925748f5bea19094a2ee1af4f9b6000000b003c3ee10f1b41d24b481ca7889524d9d823083593a3aa50860287d5b18db2f79854b0b539406454d74039d5dc83f13e30f26fd1985e6b5b9350ba8b18dadf3a309d6c1d2c6818a9216b2a4314b0ee6f75a801a27726301f387046e610928bab3d216565053eda05bb0aec4db1912ed621fc8ff599f47bb26845a5a874e1e479085ec9ca5ed084c068926e99eabd4608c19d46bd4fff7537bffdb4c3ec370d3438db25eec11d8792a4a4acc47762863ca0000021c000000b01e6adb3bc0cb5cbca4be598220ce7a5d4b85b8cd7c1d8a5f5a8132dafaa4d8ce61ac608ebd1d5ecfa0f8a4322862089298e53620396130204f86d8acfcb082082e48dd8451f95641c5a99b39052c42b1836614234476b72a327ea2c7413eb7861c34d269eda0b4df9e5a0701a6a9797521059a616db60e1677e0c0773a9bca80cc639f6c378a0f9041fcaae4c16d6e4429976b0e753af4bd9c7342d7663e5d48be9d8232acd308761e9ec0b75fd990b8000000b01eb23ed44030089e7a0ec4c02917681c6632512924a0911f59af3856e3ed6f847b1216e6fc9c8eed6255cc5ad0592225ae2240968a2d9dbee8f7b3f8995b6c975c42ae2e39e5666482faf4c3dea665475ad84b1404ad5a333f292fadc787ca1bf8c97a6c6662178ff416a97a77049c221f0f45541b5084f43c537d8272e05eb2206a12a9a7f0d69693316c4608f270681853da13b95dc72da9b726637df357ff515d798165e765d59387ff2da8430125000000b028ec100fddce19bad5b633b0d5046810682ff2d676f249230637b76e97287dd29cbba245b7657aeafbe1c7c8927ee4074331c4b8151165e6b9b5fa4e7a62ed9bfb33f519c520dc5e1eede9202247f0184f13ccb96d1a6afb3377d55efd038199b6ca42a640832987458a5b2f0ebb9f6d0bd5413ca84e8cfb35825c40287687cb1bca8ad5a64527a7c3702b808385aaff1167ca9d530ab1e15eb7b9b68e9b1b215a15b2870f83f9c25cedf0c44ca7714d0000021c000000b01bfe8d48655fcab455b7de99cc0ffacfb012e2827ad710d798786816e0c9ac1e4c86bdfb4c5d98cacaec2b3e3978e74ee4566c3c46b2458d0842a603952b6f7496b9c9612d11c973f23bb7f04b9afd3384be4d475ca8acaf459001c30200cb9d61aa18a88b3bea00e8d4f7ac3f226fd506a564b7bb4edcdb3c9ac2b8934190e4035b6913f330356674944d559da2a1fc15dc075e623af3654452275e2de75ed2bd2c2c9d69c169a572ac019d32e14d52000000b00de9b867a51e59028486f8dec6b840dd422f94113b3786bd747e71b7d8f92d51a7e0ec1b70b68832236c3aed5eef41d164641fa0a4426e639e9846151c97b0753a8f88be36a941602dd1f14b31777330d35376d71211987fe5d3fa8889248b1c780e334e34067987f3692a0c55e24ab709cada74582349b98f68069eb967924500662da5286fe02fa63dc3175a457e912e4aed06bb3dea1fe871bb79cf3c32b92dd9a2331459aabe405344ddf4241179000000b0235371cb9ac5b7d8c86480ea02f6c528e797b172ec82e163c184914be496ca049778da34e84f3a7d36d8c5e6a60d503252bdc629f4bc2d3c4b79e88a02882aeb2d7e393942e2e5526b971ff1a917da068fda1426a2075f7815ca48c8863141d72470d6d4a84c6ebad8402f3c4af6850a1846cec429a9e3d761243b4b0f7f6fb194a3e137be77445108ea03227a66dde928e38670377569b41a55710ba6cf17800c49de079ee5a846ebb3cad22db0a86e0000021c000000b02c491ea1ad1a7ae28a8ab5d5a1bc357f319ebfd4b9da436ad90322f918209c66cae9f0b4abee86869c8e40cb8c77049b17a6f20933a1e6a7f494bc424ca45039a35ea5e1e3e3c56603618a7599624c3066e32e9b34807315f5508d9df6662be1d3b19372b4fd687ca3d73e7600acc59e2b1fb4ea90824f9e6111783e18523b46c5582df8b6bc1d4ac2ae1770f967e653115c71f44f31729319741ff841ef129ecd11054c8b4db5929cb49eef99fb695a000000b0293af8ee042887992c8da191b592538a650a3443cdc20f7d4542dceb5f5caa3205a58638e8e8a6b681ac76cb2497649e22c6eb95652045917ec7e85a48fd0f5c02419173c7f7a8ad3f0feb54b47e8b6b56dea46b4a2baee7b9e9b83e7407a88502d07a90967641539fc3aa6d3899f60a0808acd949cdefde2fea47e213220f927229fc361fb3a4a9996132349606e3660de7ee5e8e7b8cc721ac8bf2bfc7d6ff3cb4488b0c0a000f5eed48aa6ab5b1f8000000b01c177d417de96d2e1975fbb7faef715b252465c1eb8eae5c14111c57dec24e9370545eca34e64ea55da64e688065a28fdc89e1e9a8daa0129b7b2231fdd839e065c752ef2ed3714d25e0640d1ccfe8b9cab9ad004b71cf1b0522756d8a2e927c1d1e6c597b76b816791324fd4c0dbcaa2c2bd1206f70de59f5681e6662e055341603f3988f2c761fe15ca5a766a9d36f2e08d6d2def621b65525bce62220aeb5a47d87ea4d01dc3e5cfd0482d6f026fb0000021c000000b01463a3dfb68534603634d36c97e4d7cf096f48883787e247e9b8c48a2ef4c64ca12d9b8af789ea6c615ede653635b57adc5a2ee0656d17cbafcc39638a4ea98634e5cdaf2e9246dbeb8c52b6682319d264a8945e113da15cfd7bbb49c4887d39080c423d88db6f8a7098135be85c5e3814667573924569d9f5ec7a3081034fb3f3b350ccec9302248387101f1e2d590b27763f2d9cf23f53840d5ed97e064ab06af44e7520b0f4f5c839f4f261c2ac61000000b00df09bf084dce4fc628cb35666a25e3186a829b787dc3ef6cd4d5ba0c1db5e6259569d76ab718cf3166b9e270a64ebb7a9a24b3e2fe5370cf33d3c179428fcf39c49a4569fb40487f4c210be4c807e53747160e686bcc1612e686f933942a8460c1d682f6d879755ff3a4d9fe172981f0cd418c1e2c84497e0789033c9fdaba5bf2fbaa8ce8b1192bdffc1aeafe1bfce22f8cb9b5c09092b27ed257627a45873186346dd921c01f86af823d079265884000000b00a60893c1ad48b46978c8783562669a0e73aeba4cc73cd2cfe44d53defc3298cda3cab1d0058eea9d76959d38f4bd6e61094955cdd4cb08d03352af14d3692ad990097add2cd3cbdd6a1e68bed78d7658a3e62e95623102322f029d321cb13852448c5326ef42d83658c47460e5b31c30923a72ebeb551e74a2a1559814fcdfe8b98355f30edcb9f3a8f37f36690aa9428a4a4d9f959849d32902d9f3619b519ccaadcf269261b13ef7a8c6ff52bbbab0000021c000000b02f379206ff2776cc709b3e939902945a422d22982132293139dd88b446a02ee9231a2e1924a986ae95d752d9940cc750580d433b1713391482366a206d7260589843b36ff21934a2920c83542176fde60c1ce0b1cf6238a1b3000c886b3f758cc06a80b0f18683e0bb9398a555b20e9526aa36b41afba8d4af5468968fd94cbfca103ae8a4284af95302edfbffb3903004e089679103a6e7bb3e8a4363ec36d411fc0ffeebceb1b5db0bbbe7c0e993e3000000b01caaee558dad6d8964b1ec30f1f308c26fbcc1a1fd9e69ac3fc320616d8c7ecda270eb33cdbc49df0f8181d98941f743c065f9ff5360a31594dc9fece8f2537a6a217e50b49db766d1ab2c806cf878f5be829830cbb07aaf158f4960c850d136d4bab87b1c83046ca14987975fb7ea270a7398dbd9d4bd9b55af0dabd97f47b1912db40acd66234e3d15c6aab7f92d7f15d257ba8772380c6e942610a18da8ed06789e568123402c2a9086fc9a3ab551000000b0245731a198032b691eea7c776122f2ac289be0cb45b6f9e3a5a0d4e142118de9fbaeec5bb0905df701b9ec47b4263f3ccc9d7a8a52b92573c20e95d47fd38ac2fa82a826063a37d8469b1130c27d2681b159a5ff618dc202e6ad2d3626b2316465e1252f0041f4d7ed4355532ba9d2bc2d542bcb775b1fa499a9cb6a3ae40ee6623ddfb112181b38d9d6d5898ac97e27304ea798a4f2e23d393d2e70a2912b29ae0c50224118a1cd180e7c8e86a386b30000021c000000b0062b5a9c65a70a2f7487b7fa391f4985e117abd15e7c34a2b2f864611ade3ba324dc7c8cd3aa02044998676f313af92176714f3926363e9c95041b5c675571b8e271ab73b31523b8c11de9e52aed9db18030444d28163158f715b8e42004380065406d4f5cd1f797ef870af5735c5b3c2ed6ea7b87cc10f84fa839a766146fcbf5423d28680ba18b84d0b06f93d5685f21f7be6fad5618b515d2a2fa019064774a784ac66502b88d40e90c769024fd3b000000b015ef85d1a7e8f6ebc187161f7e8de4fbe2a6f89d90a0ba8d4815329415de92d68a9cc9ee8b88a6db66eb8e9b9aa59b6e031c4b9ee558cbbe9f6982a3e7a7b435623732f4912bc5397fe215c9cf16224c7602e134140f8239359f3b5058695c7e7f8d99c2409ac091112b65d106985c7120716aefc31962ecb2e83808173e8e069adcf2398b78f3639a14710e2a5cf86927012ba991093696a2558e7e4b0f9aadb128ec29dc542308a98f73b132c88e0c000000b02f5543b45c213f0b614cb780a54c8406a542ce46b49ec88f59d9379fcd4685dfca7ba13944d30cb404cf9b0d0df2c2345a7aed075bd897c4b65ad7c1b75fd3f3668ada9ed16425f0f158e205ec7a658ffab281f8041ac68fe534c757315801d88b32aa60119acaf4e79a0f37b24b7a1d1614f4dfea6035c94761409b28d4cf982d5403c9eb4c7cd803d43bf0727c7b642880626d65ce53be673fb8740b45b86292e82d7f7a34e666876a4d17c279740b00000fa400000168000000b02bbfdc11f05ae14743d956e69065448ecbe1067f6a49f7a2bd4bd75a0c654ec35e5837ec9b64cbfcaeea8caebfda9158fcb52868e1f0eb943ebff888cc5413e6f4f5cda430adbcb07937d87d9e1d0cd14f47c6c17b11752e5c0ccb33720237e279ffcf17e3f4e549e829a65b6a26bced268d79bebb9a21345c0d9b19d766e45d679c0416b4d904c2f89c256de4bc1e221e9f73925a41be3d3783d9ba7fa8107f62550479d7ea161c268da9385b997c69000000b00885155760d99e624e96bda87798a2866ab11d92c550cd9cb43f12f75652565aad4028a6a218993fa93b05efb25e2f9470bcd73936b31eb33b617993b1a568e37d376ad0e0aa1a61fb1e7bf0256500336e11d58aca6518db2a392086b91a84d013de2213c4f9014e14ddcac2d9d33b1110e3d25f2b90dfd20d0aa800237964cb943c042c87ddee6ae8a7b3311612d4b4184a0215c00ac34e4a3b6024cc555c5c8fa580129263e8562a3ee71c607a53af00000168000000b00ab3d086cdb51667fdd6748efa55bfbbafb2176b217e3f0d412ff07826db530df2c30bf34746799aab28f2d3d51d69534eb74b877ceb021115ff145bc7dcaa8d2260251c94137c2792f2a5a3978c274a8c99fd58cfac209bbc17706ab9a69a4e76ee5261faf79d891a492133acf44e0f17170b304313f342622e258a25371316d67137c7292b28f00fe0b266aead8a1600049c5b3c31a1fc3c0961678405c956fc8a7592a3849ba2ab7805cf02b073d8000000b00b713080a5223b3470e10e203e165dc76f38b12eae62df75a66a55fa8600eab680b13aa8b061372cb4af5904133d9f4172712f99b33ba1855957873f52149a73417a2bee457da74f9ad5c039eee069d4bb8c5fa2ac5d92df2c655a789a35242b39f907b2dccf69e36311a4e69240c4270fe997946e58944f7953422044fb91e6e15e23ded5fa50fc4b23604975d311682bfb1a3b8b87b1f6d25fd2eabcc84324501c6093ef43417998e531eeaa62ba2000000168000000b028f011e45682d979086ab4e4810be527c606ee4c2a020fb4061af6d96cbb72603455e05990f9e3d03b171691ad874972bc8d1103a13e2a3d551382fbd8685cee8e02a2a407ed849aa8a2e59386a510c643f58cb49d3ef2b30008f16511469b396a2863ecbd9e4df237f7c23b39cdf7f3079c71e9c6c4d91e92a89a2d59ce8df57c22095de644b1281e8a1de6abccf665083a54d65b3a55f37d7e954d17318c8a7aa024831ef96a9a289f0325282211d0000000b004b3c8814844bd14038f397be71de4ab04a883bc885548adfa4a8e04d592970b86c4269a708235c3443a3cb32952c43e091da70c5e1bb20f04f2df8dd44dd8b6d59fc3ba76fede384b624f770e1dae1ca7d294a59b67c298b25739fd423da838b29f5c7c9574167d60f761e0de9d8fb0104bc673ab8cc4b8707a717d7de15689967491972cf578e8572be014cc9c01d106061762e9f95f0d520c03188f36dd676751b60ed51f5596efab93468508de0600000168000000b00715a471d680ef1e95433a3c4d4a425767cb7c0ca2d8d07f002b91f72e4f16048b893087cae8ace36e8b1cfd9be9e172a0558c13129841da9bc940ea3843b96417256803841947a449fdfcd5c3ea1ae76f772981dff90648d2ea6af708608b32390512e62ad7353dc55b5991e203b42e082c6843740fe094fbb573900957d2ca93c290fb0710fe8a7a58ed7b69346ec80029bd5fb8542db1e5c16597f7c6ef5080b689641c1e47d4472e6ae218de0ad0000000b009b7dee5341ded215fb7c70eab39cba1b75b41a67a0bdb1d7f6143b028765c3cff0f515c17290541523e8303897241b211389417f970c04c9955d8e35f59f5dba9f90796f073e077be565a4822532cb5fb25ed2ea255749d67fb3470206b2d7170dab05826d90251fa5064be275f887803f6e1e15dabe498e3dd030b8167c2b7319582be9ef55374aef030a888255e8b2025711e4855da11416f03836257b6550752e673d3fa7aea144049440c14179300000168000000b00ca5b6f7a63563477ed2b8f287fc6a0024fda709bf3ad9dc5f724e9f8261b3f2c4b1fcb7c9075b76f0b57ba13f6ddb63e0c48ae393168afd43253e738f10ab214cfa882c1198e050c880c5e1720a75bc53498aeb13a918bfccfa4b39ff550aa814cca3506134f7d3f2338f0147b856851d047c02c2b79da42479f305694a8a879eeec6c54b165b34deae68cd6b22195209589c4ff51d22ad015c3195ac6fe79cc41d29242be3f0b86c9c5b22d35693b9000000b028043f88ed639780d07fdc4386c0e0e6800d6d4d5dd2584dd2ea8cadf77a805f1972c1b43a2bac31f8c154bffe2a0463e83c9bc4334dff758afc3557814384e41ae767bb54b20bad6d68858eb66bcaf9ace9ffd514728d6d70d2d47b7a9f7166aa2a8afb2ca1eb20e7071b0f1015a339057891f71c258b8e73554eda560a931d0f91f5440815ba51f09000b91fac705b0120053c1aac6eb409417c6904e867780f4ab7f578c16fe4fd87d6a4c551880700000168000000b0126950977ad6ea11389e6cbb68968ae8cab82e0c759ca2f5163944689f012d82d45852957da03b0483f3738d493076780b3d36dbc497a60546de689fa48d061b44292d967ddaf8a065dccd8e256b755d9acc119ef10ae4d69a1d3dfa0976d32b4250514d4598e0d2ac823c6b0c6106632587eba457b725679abd8da1e2409b680110a2978768f10e2b511aa26cbe21b21075853227e5db35047ec22054a637aaf42291977de69a2e96c90b211829276c000000b00ca0ee223709a0cd96c84598be2ee6f3d24a989729a97176e99b1f44f2f0188b21e041d74e40ced15f72bcae29b0d92f845b5b046da9accc4e94b799fa9fba7ae1fb33ba58e0a7c30d931963550353e40ca10d6b934729c037f5900fa0fd67b3b76bbf0b4c48b3cdb698530088bf229a14dbeaf081439bfacf362c71411b393cb8ded33597360b2840c165be27dc4cb30d48bcb7e9504c914a5a9bc880a0846b95d0aef1b34f03e84f219b1d365c07a700000168000000b010152d51f0112d3e113a68842d803226ece38eb741815fe3fe12d2b75a245e4ab3c75061ae450dd21dda80866f28b735acf9750ff70da39b8f87263aef84d0dc15ac7b520b38534f7d4a069f7921451ef83f974ea5644a6a75a400b15f18415c2ea5d8ef1c76cf02415a89d86e333ab328719a8f71ac72e2a76f7eeb3d94da69fbc5bd22179ebbea3992225f21582ef50d2a8bd870ec21b7921a5f55411373acecce49a4ee677e5845f18c4608466847000000b02c9e0b05c2544e468c955bd06725ffa0696da91ea567f276c53858bff3d399c9c5de1350308b30525818bf73ba902b0bc1c8eb9fba854e9ff1adf4d75fd8984e142ae8fbfe412f69a920bbcf614aa97e7f45c41232b4f951d01145d04a26a88fcb7785644f28f1b2a634815c5140c57b217062545854ccb51c6d5d061a66bba336e59e19c5f980da9320540173651c1b2a78b0f5de19eca27fc28640dd6ac0d2b22391f3100fb2d701a9221b460a2ce700000168000000b0124bd554eb24b3c84c9c24045abf8b6b3168df5bdb031ba99517a7147ca005707d9d895533c933b2d0751c5156545a23f6b2776f20a493d2a097a22c01366135c9c5c0a41e5dc41b794305fbdefb4c0c6eb03c013cbc1f2630c74d18d4e0d3425489adb8aa677fad94106acb92b771a526f213fee91eab3f2fd6ff81530a804c118b36e078bc4d1fb93fc44ad8a01865252e842f33b48e6907e9ceaafb6cdb2252990c6c217184c443a44a5db3194620000000b0060465c7e5fdb1e8b7ebd6315b64728145c991a3453c7627665aadfdd30d3e78837ed3fc3e9b6ad53c462ffaf0d377781f1bf675be80987f59b5c17c3568dea4f8ed437c95cd47825ba4d434f3ebc1f6f3bf16cd9e9e81c3b95039679020732383843c4e4deaafb8536c8268ad94b4e118bc701703bf3ab608aec8c7d8215fac21fc284a55bd50b3595c112e7caa81e32c9a19cdad4c05f3c539fbe61e50ccddc32ee51e468764ec00c55f91fbd44c4a00000168000000b00f45576bebe067a2557cbe16fd5492cbf6b494829afdebdc78ca73c018fac739a16cc37401f2ee5f41e6caed4f0f7f6e6976e55b9cfbba4f17bc68e45c952f853aa3d62d1360014286872718c9d8ea20d9d91bbf3560aff96bd1f2daba0bd58fec62915168240c6b7c3a6bc29ff5fe9c072647da0c4f662d788f25bbdc62451594436759033263099501b5e5e922cc85018509b90bc2c9fcb33b3b4fce5186a8c55cf845e853469ec399736883a3d277000000b012036866af3d5d2aff56990826ddb26e04c908bcb1548f4e66bd4585bf734d09ee3b36b01f026f9ccd69395356294fd7c79f2e62ffb8da1bcb823a9497fcde9c216ceba02100b43e050a68764dacefd2a00193c18b622d0e371d4c16c8508a37a025290d6e3f6f1856c18959b549e6261760db32015c23a4d7cc1efaf3cebbad6af450cb15e3cc285d98ddd6faa24e532c76f11a03a7663e1a5397a779fb5287d943aff09fb30b44c3bd2878981db36a00000168000000b01de4b007efdd614442b2bdc959414bde48a332271b4387de2bddfeff6b5912a9de081a7c39ff91fbfcc6156e2a4198ba11cd2a754a78b2b70eeaf31c43ba666ebc5c776d73f3e785b3c0c695ffd70c8f4681f08bc237bfa12ddf092f8aacfa854a6d903c844f93febf85d88cb440eb851495fccfa6e1c364f1f2e2b4ea51472c697a3e6dde6d6bc9c8def31d8713285f27ce434d8320df7049f70e2e0783be3f1ecd301bdd25673e48535a09a53c40d2000000b010a08d4042642d519dfd68cd91eca113ed6c43dd9e77ca230d347e07d138079bd75c41a98949a112e935d8ba7ae46d83c6c7a172402e2bd6efe7a25ccc76ddff85f8b82975d8593fa0a7903ed2f60686ce636c5960627ce47baa8ac94eba2617b9ea09e8e8ee791dabfbd407b260ca1120ee836d7e43f1e67d5d1ed4460c1ed856f01e3fdc12aca72e35f5ccd0b968a01f72f9e665555e93784bb9150fbcb69bdaaa1669a7ced916fd3721e6187a45ec00000168000000b00189cf5af02d3e8f2d8d349d7cf7c9cb53234757cd87d47e525ea35fcbd37f37ce5d4e8100bb1d3190675ea79c4d7c743d8a14f12d824904555189c9efb6778368dbac35b015d77662e76d0fc37d59e0f9e6c8c079f12fc3224c329ca3c1a47ec2b0ad91a7ac834919654947b6a4ae4e29ddf107ff19dbffec5af70c2f6dc59f58f5e51797ea706a9124d19780236aa20fa7a3dac3689a9a0f2462d0be27605ea9125ed401ca43f21e77bfaf4e738bc6000000b004b5e7cabf6ad2c77e0a42d81f391f8dd08465d1405aca28f147f06e7d258c8405d1a0906d147ce6766c464949cb61edf8082b6b80dc3b5104541f975318ba182a4946c2996c756ae4e084137001e4a1a6448dc0786f01b5f962f82e602a01dee00ec62bf2f3cd1888aeef15ab863a740968c7f38d346a43147e67fbe9e034629e5ec9b454bb8d6a6e1fdd31349f809303c577df46f7e4da728e1abceaf5bf2ace802ba2833ba4094ef860198a9db93a00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b010cdc0c9ec2837f66449ec16c53764d6d46e2989dcd12d4843b7dbcdf44d0b1fc6041fe6bf8cdef5ee1cfc604d320d0f7b2fc81117f1f573a628813011a56b514d4f3820913eead63f6cdadaf2c88fc2f03346f55066872ad554a78fd874d85731c34cfb4778e1740477e935d8faebe02f53267e88ef61da7e90d9b1039e844f1de2d70265ff9952f58f770e90fb175f0f29f41d1823944ff7fe9f1b6cff6534110ea214b0813273554edf532c400e54000000b008b93c1d6d77c9ea2da8ac8d08e57aed30937741ec30a422d8eab311d41228a93b6433a62ce1e9144f0f2128ab449986ae1911e975cb74c381533200fca70a8ca265f5306b34553f039b1f1741fb38c8d1aa2a89744df94b28347c8be40fcae5737dbe588504e960a7f709927d60aa3321f91b9a515a5b303e9fc6c6ef851cd89da4e0486426346262862b5416657cc30b005b61c45af81300238188e032433511fd82f6bdd48719239f5fc0649e946e000000b008f8701258d161bbf52af2d85a9e9c53ca6b0e9f88076e2cd6a2fb09495dd09199e6e7b7358c0f0e549fe55261aaf25b89b6acd04e3478b954c4c41c207b44e778647ba5384a0785afd0bd5588c0167c415ebfea44d2067c9c3f3fc4d4b93eb9d3817f84e918f54f74b73dd1f52d2a47032de41e5ef514a37d8fd8651341c8dc2a6d5d3eb4c9ff2612aea03438ee42112a0e8c22cdc399bc5268d4c06a9f4218ac2cf1a6ffc1dabbdfa59969ad2e0d2d0000021c000000b029c4d4a57f8d14ed8012a300cfec350bcc2fc924d08872936b0f04efbd8ea4508c22d3f6b7d1458593cd52cd8e449ca9296543b835302e8b7a2ae0e8ae78eb05f3d00490d0dc6d20de1738ac9b339e7aeb85ad0ba6aa25f1284091f99c9f5687290c09d8c21dd544c7fdd48f838d6f2f2fa54c2edb22676a59eaa2cff0ab01f34f5288708ccbee356796cc03d58087dc26ef7c0f3b335a33ec612f379484b5d88b1ca90253fb7587d7b81ee3c1432fe3000000b03039bcb3c32d0986540173233f1d7e05ce25af3936ea5c387286dd570544e911e396314abbebc24503e9118e5956636f54fae971b8e0143b631d4d399d6c3548474b368653217b85a0d6a7cea934c3bb70b4fe03b639af77d26ba4ce135134b63fd977310faa81e2c175cbb9e735cb3f04c10217b22b67c34fb94308f5865a51a9ec17080ef9d707763cc97fcd55f0c72d515c4713e2827af0c8123bdebbe4b0bc8300a67b2088d28a26e61ca9cbe835000000b00c19fab5db50fd6c4605a47ad9aae0ebbdb04594784708cb03975758ba2c563b8331b54251b3432a91b90951a2323f8e0ab7ac67d4f0b3f27a146168c3878e9d15eb601b2d40a7b71db02f3c12b57f0afed0f43e515228c48d93ee93d3dd96eddd4af8bce6f6031baa56825c802a46b22e293b9ea6c9b435684802bbe6a828cf4da7d55a8653c188c2da09b1595431a8298d5c594ca3bc7855794cc5f27f5cb9d8da89196a3f0f3ecf1bf3fb26f4f8a50000021c000000b00ed8094f5634f0ff108822d5948a4b0435b9f97f5be5d2606b6a46022336e61083dd9674218234ef2f336f8d8792528ddf867eeb1cc922f40ed31e069454d63437801d570d0c7b28cdf8b45dacbeb510cef15ccde41dddc9cf02b4ebd355c9496451db159b4e59aa29656bcf989eb95f2f85adc6524ed0534e934a0429fa381536f8f0f1c45e55c4b03745869da1d5090d7d0c0d45123ed87f63deaccbcc1b12178a71b2414c0df83ddc0b6aea1567de000000b01a0a7a37b2b6b8ed04e9afb48f6ae2c144c7e891a1bc35c4c9e02fd00e97b4a8fe7fd9cc809c0297d0f06a4d095d0df5d26d146b81558f6e1f9fb5c0b890003ea3553d7092608a91662f42c3fe438d38208a08588ad3e1e56dc9ebc8a58f4ff03364919b22b6ed56814bf2ad0c658dfa21de0a99c4682bd33931a5c5fdfe2bc007c61d023e58d9c4d9569ce2baf1e26914d9ac251790ecbd5225d4895432a7c21db05ebefa69cb5ccb99e5c8dfc1d4fe000000b00527a7347daa5d853977d370b3f28a77f07b19efaffcbe414083f4ced8895108fb51d71095d6d1632df7d11404ea34f45e3d30e637fa12d56cf988476c78380ef0c76d8a9182870ca14db2a3b8e64b1c33e1d8504f0577730c0ac0a9806a900aa300734210c0bdf83b6cfddc76e6ac6c27b8be4d333b3d38e240e6620b5bbede9a2edd3e5839ea51b588ed9c61eeafb52bc6078247a45550ea30e6089d00df962ef9d7c91e7cd74a681f0b2a907515410000021c000000b0253b4a1a57d73a3c5ca284e8b16602017325b07818888abb6cf0005d558262c06df6223c399f095bb73234a7eb59de3565603006921eed9afef36615e3fd3a516db67459f11462cc1e2f1c2b61764b5e09a339f335a6a6e2518eda94aaeebf788fe14fdb01764feefae8881f729c401116730a4e5b87aafe90b85f0436e0f90fbcfa022060d93ca8a6798318ecaeca550e08b8fd8f6e7550c7d70d156f3ccccd286b468a546e366fe3bd27ef4aaf4beb000000b00664cdf0e237c505a48c3a7a67b8c288a0448f40d0a828bcdd6228d28b586e6c9df559979dc84f6474311815c79c601ea9008008cccfbb9afbbd669cab87d67d7907066cf4e22220e8a8414fd806a3cc6a90516667a37a38142070cf2498ab10d072a6d8d00e008c706330a193b706d815131e1a387492bf51cd63a0b7790777cf9cf0d9e397669cc84ba13e639818682c11fee2d735852a22471019802a1f3b06f4cc1c16d20293f06fbf85eb25c28f000000b00d1ae1c45571eea44ebf4872ef8596b4fdffd3c7e89c2752acf0b9347c03cdcd32f1f584992fd91bd31ca85a02171f04c99dfc06493449a13af05b590549866a79dab5093358109e1eb225cf294b2220b8806b6de7589d526189b18cb010ee508bb1d28d5741e4ee48dd6a9702498497030809fe3bcbeffd06fc9786b2bb9deb209344ba45f9f612ae79f3ccefd0685e049255f864f2d38b008db3c3f76af0575a70f53a135655a1345ad8f4a96ae5090000021c000000b005ffc9ece3269a35744f8f9d2b1c03f76a5714f8983abaaedadad1844f3aa2b6a08e9b16cbc14f8e302a49982e8bd7df44451ece3648f3fe3e710d50d2b89f0950e2e3085cc06d2754ec6fc0bc0f0b110883d3412b5a48c597328edf18bf5ffa6aac8b3e2a24f3c00de50e3a462e3a8a014ed0f28f44bc36b8629a8c9b275131c2bbc77169bf743c4baa0f8e0e92550b0a4f39a5be70e2bddbdbb7d22760efca1ad87c0674ed3147b8bea4337e8e7f9c000000b00406dd9ee4079ed2973d713805ecec0ece5855b10affacdefceae1c832181e67a4e08c0a608967b301fb2329b694d1a08c674920ba0f2f7d09a7b9528da2ad553e9eadcbfa262ed82d10f31b28a636aee58191fea9e76db354383973918bd513eeea026a53f983f76ef27d7e97900ef607a879c528eabc583a33e5a1c55311b525a01a689a8e4ede8ab0ac4bed2989fd1bed5134af5413c453195943a1d18685783515c6c4d451cd658d0466d0af6910000000b0188a19a2cf0c3e78740d84fc85a37f2479983bdcd1622e473a1380a43fcfabb2e1fdec87e831d4b9b76b0d885582f915a4c5a4efc8a0de79aa639e03b5d9a07200ce0abb9b962e92d7701c4dcdbf9106be99479bc646de601aaad8fb20d82bb5d9c3c4845ec4111ede6c48e93e3b824b028ebfc9610826301b2f1c453448226154f8636a5df3842be7114945cdc048eb0bf836f7393dade7befcaaaeaf6ae6cbd32c10b46ea226e381d110207775c50d0000021c000000b028c94f38bae6f2899e6104308acb7be0d4e122aecc39da69d6063d2ae01273cd37ad4e44ecb6a1d74588e0c26cfda1817c60a13cead5d8ff2aa7f70aee19ef2a264f6e32ae89f7070bd7bc8031eb2d2ed1bda8a58074337e855af2faa8fea5178213f3bd367c6238fcea5211a959ea2c03ef509dd40332967bb126875172f1f898de4edcd9203183f3faa2d31d34c2851136e0f1f12ebd51f538fe653c40962b74dd154156370fc83b3895b793979f37000000b00aeed866d882045f0705776afd23deb32866a251c024d5a773944a600f746a603f15573cb6826758fa42034b6f07447bb408af8fbc4777ea4c7bf800e0205e84fad5fdc66c2c21bcac253d9447bbdba6a2e81eb32195c19f8897aa450b75df704fb7a914c01860292eaf2d10fbb6a12109960481494ab27aba69412f9772c24798ed7f1abdb4595f731ca230c808b6ec195e4cf1d6d535715d21a0b6c884f5d32bdff99242ac3a2139b5261c9bb91282000000b014f391db085f00ca21f9d5dc1338781c9a752d19892e68dc373d58afac818c8deb2b369f7eec20f08d74e5f3676708e52a63e09d8f1fabe4f65255d24da95c7fb7411a49b272431010b9ed20810569e6a11f0d00d4e6d81120d7091e9c69548bb760c7f0fc3102f41edab4a0aacf88471b7bc2ef5d12843445b316574f90c9cbd545a589351297824d4fc5f00b0955611417278a1ea21b11d72ee65c0c834d60c7aabc790b85f799ca51916f08c7ef660000021c000000b0187829e3a9cb4a1db3ddd0fff416231388d8b87b078cdf935d7f6d4c80e6243730aa54b5fc2e634bc9181ebaa0f0c6d54858a54d835bc70b2857c946cdccd6869de6a59ff5f923c852a6c402a4e43d2ebec8d3ba4d5a4acd313e23a121d978fa2ec6c7a73ff810d812d6271adac19f6e2b921222f485866c11446863c20ebe5e6a4d09b71c0e622776a611748419adba04ca994c75b7642e305fa6b2a50ea35529b6bf4120877780e26b180db41a2088000000b028de600b3e9a0d22ef927c75702fa589f31e9c931c7b50c9739fc55a5c78ec4aa63a85bf26adabfc69b701534be427252014c7f7c871d723f005cae2ec4113c805548ae4fd2860b301ac334fb5356403e46df6ce0ac6ba9d40315a372651f593675d8ff044f3aeff73595d7f17d9f63808ad6c3e5dcf900bba5fd81182b407c478a5e0e38ae7b0d700b992e3fa45b5e527e0aac33f1d0354713f7b0ae72dc57f5fbc57986f6f1a249acaf5f0d3d3700f000000b026f56f279f1f02ecb0ae3eeb4661276d8b161b8899dee4057ba729a09d21a9082e154077ce9fdd26f02a5aab1a0425832853a8ea21a9a8cff931de35ae114bf637db4e6831055eeb0da1b7dcdacfc46e101ae4d694d53d02a9d83554904e272bee7e6ae133deef4e0186088d62a2e7ad0806cef255a12931398d4e4b6972944b6a3824923f6a978d0d0291025e5a47a919d7ca93b54c6d7059aa8016943f9f35d6df85ace7b74346acdc20110c28d1d50000021c000000b009c9424746990a8141dff40efb4e8e23200a4052ff5005ca03f3cd4805f41b3f94b3c2288bf76b7f3d3913c982e9521045e188af0de43a3ecd62bd79e47dbf0510d89685f55cc503cdabb63769ff621460c9a4f25e7c01945bf77941407ee5f1739a66f44a6a17a327efc82a376cb7e523ccdfa7e1e682bb0bf624fb0c3b886e31c92edd3445b41212367c0bbce8c22d10c39aeed7bceb798bd188bc32a2defa73d321ba7b29835db256f0891e7735cc000000b022f877825cbfd1a7c2839a0916f23713120640a87e583a8a9dc9ecb5dd320bbf78419ff4dbbe74830b0ec624253e397048a86dc3489960a614bca1e7648c43811ef080b2f5c766a986c6f1867c0d6d9b4ed51ece984cde832e01732f911871cabe0064eb9a67c9a2c237b082690b54d80472a4bba3a9b0ab1f0976d09946785d8b9cede35fdeee7b8a0b6734a717ebd610a9cca10d6bb31e6e52a2c7baee7967273fdab25b1352a9b87a703ff7e7aec3000000b022799eeb55b20f36fda8b18497e9e8843cecdd2f733e67b450b74ff1c0fa02df8cd416f388e43ea7b25e3316e9178960e92f05142454b1964035641276de9e278f3ae22be1f518739e28884a2ac5aed2f1a4009dabb007041943d30f91dd6255ddbc031219f0211379e7222c5e8c04ec200bdaf5e9f1304031890b4334eaae62e8c9db783ec46302512832b18493c5a50622865988ed8c255ad87a397c085d0eee9bc59cb5beb1194ecc8e3ce4859a8100000fa400000168000000b01981d3f5ea832e04412f1cb839dc1c600766970653f3811f5e594535b971fb7603fe2241bb08fb5590fa9c155af0d9fda72e78f478eb41f18a0abdcf67537b770ac6f7e7a2740c5cc1bf85aa0779c310e4d0550e585c0b01e9bcf1a9c0e8614a61be435d04ef11161f1d95a61248ce65250c11cc447cc28d18df92956bf3d96b10ba245cb9f658c8de4a9aa2615b50190fb29d617ec83d0f0833b25661ee19cf66f1144ed681eb261e6326ad584a9f14000000b01e206070deacdfdeed93878a9ec47f7df5dd686c488c63952e20ff8a6042cf618ba0168fb21ce7294baaf7816f04cae0a638f46792e6b99cc48b9b08ad6348863721807d15805bfa6af0de31d29ba41f2639643628f7664e9c8bae08ce88bfa072679a413173fb1ca03ba7be2741f4fa15a41aaf96e82ca5584ab7a770d271cd5b89b12541d8ad3bc7df54ae77404b2205fecd74ca4d967f2d7bd5159e74bda7bc55c8ba5f45aeedf829600f58eba86a00000168000000b0269495b7a5a3d10762a8215e3153b26d5c9b94683dd0edb89ce0c27868f8ac1a35a90619692878453b1bd3f24f0049b22a1b157c9b8f29374a5e922cfeb3a79eaa63fa9cc486dbfc5cdce0ae2ea1e2abcbb298d8fe3db3de33955d4627e12f8dfb639a9c42c477d0cc18f4af3f653d912b5c50f74768cae4d15f747511814750f811314920f103e45c812a33be5b8728060d7170489ffb7ea9d7390838cda0146544e60f79dae174e4086d60fcd77a1b000000b01757ad17a1f5321bf1f19a2870c6ae75e2f1a59b0b9997eaa5c94027d1482d6f0730d0700041e6cc031257693e57ae5553a2c7d18ab43fc2c39313d62745e05a90ed826bc18f1a5bfca92972f96e567dd472ba75cde7db764d523937debf4c2bf11c9b334a5301de8e8bff9f0a93035c242a6b1b59d80550160e1c701fec55d58e9556ff64e5adc8ccc4d274667e1366211546c435aa93a1b32ff411c49ccc718ec117896bef6af3efb98991feca0d2a00000168000000b014c4caf53dff697fa1d4b3e4ea7c1cd611826b8b3f8d66f96173c6b2297327a1a0d2a64e2a16f87fe5e046fb1d58f21a1f0e84fe970ee3cf14448f2b2a9163b929d8ac1f7283229745dc5712cd25ab430622745388701d5594f2f2007c9142703ac1a82cec1d708eea8b07e8a86338f70870e528c28d2e0f679e69d712ca9a5971c7093da1004608292e2319315bf1a72dd70a80d26e0d37e8559ad057d982064a728c0639376ba4e8278765f6c72915000000b00f35faa15c85e629adbb6623688ec836118feb5ef9d2ecd9f5dd73f76ccc6597ee54294398caef936c45d082cb50d8128302be70b096917d426fe1b738a6c49ca6a94e6c16fcb175d6debaab229134fac69f1f451eabd01f52fd687896da452784b68b6b25961731417129bc83d2e6ae0b9d202a06a0df10374b71513033d488cc2e1e6b91e6932d4273de60fdaed234249027a958f977b2179a2db5ad8fb10959eb446bad8d82896c310f40d56c0a8d00000168000000b011eb66cd85bba7c745a7150770b9a47c07df0ffba6a295fa4d3f7373691c4d438999389ba4bd6e11b40c1d344664aa4e03c47d19b098c1f763c088bc29a2a3b5d20a9f798f8151274920b6e90833bd8a3a301878829a3fec4e0264b108fe1eecf3391de139eb08ebfa558ac4363444f91241cd85cddaade56b8a0d73b6cb03f283ccce522a9fe6c24020b566e1486a2a0de9ce217bcb0b858cbbfcc31fa64378f855d5f8a82e85907a0f1bf88ca032f9000000b006a1d16e3fe04c6238ab7dbfc5cf2f471e9148d563e1e01284756095c34e324e310467d5cef691bc4e33c94d3bf466bd59a14c306516ee9f12afc5238bff4a0c274b0a85e16c94f3016b5c6be8dea3e0be0d96ccc8b47fd368b4e7e9cfe1cb8ee98401443c6c3877c8fda0a9f0dacaf6046aed2dce7b5b3619a49c5702a8a43debab7fa13a2423ffa28f395dfb35b97514015e86f8910557ff74425d9a98ab9b683f55cb659a1bd9c5426986f31f782400000168000000b02093ee9082b75a54a60238b87b2b9a6a8ea88f469cac0e1cacfd05469ce326844503afc0dc93e274b391fffd8d633ea0be3951d285ff36447c99be29f1c1a70968ba1998a09e30c44f190d895dc04cee8c93f5c0a818ba73326fc71d544fd5cfb4088837f5e71e6bbe156dbe14dc155820559894df49879ce25f6b91c863de09aca570277a2f1d5692b6e7c90b990cd110aadff56cbdfd170256c3a41e711cabbf620e9bdca7cd9ec70ceaa6f6ce391f000000b027d987151ad2bd7e51a9dc75a1b16278816c7d9d21ac07d19c73aceb41e5c296714d87ab336186172d74cd21c2b4c290761e129cc799a7ff85292ee41058729ba2006226627ac33ec0fa365901a9d49ddaa2f9515d28f286ae407b12338900bd6930c12bed403a63d8e9372e307e635e2e07e01e0312ac47b754ed7e0bec96d814a08932d81d336c6f645183949c1e8c25d2ad7ab52035dafbc20b5533caf2330511b6a7f8873be95186919ff8cc7ace00000168000000b01933fae924c669059ad99b0f1637741eb991a8b5ad4185093a3b347c249bdcfb5c4439fbe333a408d0d76a591c4851c35e9c2fde75140f9533e212f9af5f1141790c5e2e3c6bba1f4cc7376f84c607f0a22243b08f3a64a6592c1cd997fde110abcb917893bc3fad97fa0806d59cb31d27a4110bb26bdfae935106d772b49da7a0125e3b43bf8cb50e82f2a31ca30bbb24d3dca52649963bd462671ad128cdd4b8e6a5a52beb48913a4c4e87433a3bb2000000b013e707fb503f93c292d10f57aa815a4fcac495068a70c055499dcf8d63d0b9b1dfa56aa5a96b8b4655e9e9097d16fe0dcfabbb6475c49248404d7986deb12790bc7a12686600f64ea57a588f4ea1ea9fc768455453f80c4e6ef80b1d4c543c9822e11a277e55a5f78c94e4a8adee885124d2f2f7d600b7cd2623321d87619edbffa1dc9ca3ee9df667aee99f8f1f964512b2edd5e880a4cb3567a296bffffc91e822d47005a2c6b2d20df2e21ba2be4e00000168000000b023738f3d7443c654197575a34d8dc3285d5a3169ae44ae19fd0e389c1bee332f4f276b8e7e19f853072cd3cdff7a132f7df18b3d97298da3f04ed6988574a0e33ed47136a7e9008cc24618c6fa24c39278ebbb1a5d03bed39a69cfa57a6010c67f74b69a541d0a1dca422eef43fca1481d6140f894261e746e52c212945f816e832be2d7011f9f56619f75543c935f1624b27af8ba549f1793f402e5329d44644b649dfd6b51748f3f248198a8b72132000000b012dbb7f60349555ce77f68df64751ab4bb3fc263684b9fbcc695a2068656a04bffd40ddbe37dfb34c30ef425510b3fcc92945f9a6cb8d0a9af25196d84592ad2846ad20b1bc1f1122d65e4d2c1d416f6c35632ccfc3192509eee61728dfd10314532272bca532794026890dec113e43f04fa195e105fa5ecb9b50d7bbf9033ac0bf34d003a5a670d34afb7368450c9852a5ce36c05203763b49d57a976cf06e49e5522d11114c9cf4815776ee214eb1700000168000000b01eb918336fbd4652ec389c06f246cec7a6c20b00df8e51b31c6472e5224b4677ffe2f97e33c81058b0e55c1991706946b477f0610730e4c1b90359572b8433b27624e3c5164e1e38d06bf65f8d685d0cd15c9a37af3487b7eba92ba8cbfc77b78e95b51d53ece3ddf7a24570d7d729e0029d208b8eace2df154bd508834cf5638319758cbe09332d12b99e618bff22540e79a4a0af07c584fbf877f7ba950efab3621f9770c365c6fd5b6544b792a48c000000b016f384cb388bc790dd163bc04c9d75f9a33844d3ee969d152d1bce86bf46d251bc78aa2946ca072234523569401530624e98839aeaae1aee6b66bb797eddee19cfcb7590059d79975b0b28954b7aa88bdadc6167568a4f0ac07896ebd02b251eb0633dcff9ca127ac4d46d75b0e18f7429135cd3fbc5d20cf4ab3f1a18205915be8fcac23aab58925622a1b58aa28f2a04ba684ea6fdaea0f163bbdc68d012172a6e2b72a3f2bb845f709052cfd3ceca00000168000000b02a042e81b0f5f048c1a145145c4cf1a6baafb8771c73376ef29301f631543f447d7c6a35229d3d6125d26fc4735ddaa063f78bdde78756ca2441e47af79cfb44b00a7e60bd707b9b87758db29581b0ea5a7cd39c378de2eb257e4c0757784fd1f79697b8417191cd122e4ebf3206c17e14ce0c8f54e319654f2d27d16d92a609b35b2b1921a94ee7c9827d2909f86d6605e0d2703c746fd95bbd56e2d89638c95ffd0352dcad4e83ee623eae5e0662b5000000b00fb63d247f6be16e8af56d9fa9bd0b4f2b1a4caee004bd72bd85e9b682706e876f96c6a25b97ac140846f8cd987eccddb1e7a46255b12f66325fed78a4382eefdbd814c8e55fefd71c2dfea08aee630d5d8572336e11cd5a1f582a46a5d6a9a21d67da31119ad1fd44705d5cbd5e55d40e5beb9427eb1c98882ffc2bdad5d5323eb2f55fd5d3944a08891c576bf90ac12b45a5bdfd89cf6acc40310d76fddb16970b533785f2e5c3c21a0c4845c6dffd00000168000000b013c5954abf65cb9575a0f176d1c1e28399a7fa882cf6df08376f6034e20970710d2987613942ce564645d428c6efc000e5ace79f6c9d0ba5cd9e1dec39dc41545156096b82901d6f79c3fbbd0634764e051dbff60048e69cdfde774715d62cebab25b9e325b60af391fe311d10b98cb93017750b7440b0fae3206437a58ca79698fc523c671920d88af043cc5086aaf91475ec155112103d30a7a47ce0fa88bcd61ec0ba92f8023229ff4ae5d3a367aa000000b00c97a8de8aabe4d6f6acd4efe03bd6b9f263834ba94a272c5fdb68a7ccbcad04c5bd99a05911b2f66ea71b35db7157794bb2fca7d0752f0a4d40749a118898fc5d90d755115aaabcfac4b527e9b14a3a3a2607e7d069d5cd3053f519ae5ec29fa7b5c01f62787b61fed963998e884ccf0322998180321fb766141b1181f82ce6f8d3304487c0c2e3be85e3888096807c04eb6d7bde62422327c475e2c469ea1890a0b8333241f2e164e12f0ac8a0bdf600000168000000b01ef95d91924c9d17ca619e711320ce16d32b4c5133b5b8eee002dba874fdd3615c07a51c7f905c238efeb8f3e6433a0416aa0c05f52becf06f6fe7660e17bfe7c5434b9fb354c3df7aae2fab9cea551a4575a28b0c5953db80e25b577e823dcb3fb9a0fc3ea618f3ab0536fbd6380fdb1e6be09bff717d02e608ef125648e20cded2d01af0e3fc6b8149a012d174f73303c6cb2429b37e738a0042aa0d5929b90e570417f794d7825b0b9e2ee04d4c81000000b001be33994fb3086403934c17dec4fb89e66370e1f7ff8456ab776ae05ba3e441f8fca6dca0ea33db177c159f38f2fd3221aad960243778f67c71b5469742da7e70cb5d94d34e43f2ada0a39a567bf2bf1051c2e24b094d807ce09f99b1a183d52ec41b1a956f8e846a264c77d067fc2a0aff4255b1d49d2c111f92aeabec4f2b5cbafcb54e54a6b1a34d6e97c786c3d30d4f61cc3011a051e472074a453527bbe89070415a738352763994a1594fba76003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b028b1cbdcd631d889feb7dacf3c9c7cb5e142d41c9bccd5d7fb49d80a6756f5476bb0401119cce83de0de2a14a9152e41549258a22a6b5743773712cf02655395242fb3ce556009e99263f2937fb6fea18393db6de0c618b68081d7a6069084082bbb1d8a908ac312b7438e82ba22680b0446ca238e502e714978ab94a5ff08ea9c86f547265cabf5469e6b27f6be7a7424219de1d9680e81022a8e1d5e4661f729fc48f7c469a9ad5c7fcfecb2e5062b000000b002ef692ef5a4cf023bd42bd8af98f4677d6712a88164c5559cf6e85bbe7b1aa0e2f7533d5f230c8e114634612982498fff5975a108f34ffb3deeec0fb750edc106eb81c5e085a3f0a978bb3a8bb035298a4fd0e5226e05127a808345dcd35a0c63cdbb8c57ced90bf8b7521a78667b1b1d9adf582d40ad35d453b1551cd276631349cb151d40d72b3ccf34f821a0f7e70090d6a5a9ae280210c349a143d47216d82451ddb536feebb2e13801ab33c32e000000b01ca6edb2b5ad51ca29ff9072989ec0c86eda3a48ba0f082938499ff5c546958ae22e6e8648ecdcc37394fd77fa0b63351eb6b2cb1d04ee0dedd494f8f1a37d9929b70fc747ae260be4d452510c3ebd3dc5b09f24df0698e3bbe45f1a5cce06bf1c187d1a5902e575e104c2373b6072b1276142de2c21598b7509e2a3f325a9781a8b2d53717658d8d7f386b3802066e10a7836fb71c35d08ae96a35dabd1976b0a5cefa0fcda5dc0128fe20816887b370000021c000000b019ed01e5e08e1cdb520685a9e40c8ff64910957490b5717858ca10014770de522df4df8ca2b849b745e55ac5dde26c3acd43dbfc210202ebd4927e9bc8d9cdf33f4b16c74e29ac0cf6824bb6d7aa6d4da234e77936d34c84d8893b4aa6486455ca64f2162c9c9e6e9506ce92978b8011119176421055774bc9eb2747e2bff13d5a4b770e62eea27d863ac1c3679d8bef062536c321d58db1db625f77e8348b88bb587b6564b55f1bec454b1bd3b67c79000000b0086a21a3af358c12bac902fc35a2b02fedcf2e905ce334fbd58b2cf34d737d2b45b28c16489fbf77bf79f8e3272b9832aa6a128ad51726495af6443eed3cf6fc71a09e03f303b808f245d3ef3d673ab644ed50a8a64f53489ce89900641eb02517fb62000b2e460c63f615182be928eb0a661dd9c8ce83eae60e6232cf34c6709513d20e2b055fea9d9c43dfcfe76d6c085886164fb85efae61ff55c3e75201b1d99b54f4b27c0fe1df7f573d506f663000000b02f221744a274a5c294e856f679f1a1c937d5d36d58e25a124ebb57f7c0024260c8761718d7a932fcdf8e4d43b8d753e77f45f21e16fef3b8e788ead45f78a15865d5fbfdf3257f1b8ab9676eb31e47c1422659357700c1551d9076c43aa254c31d348311d16a39bae9ff26032ca59a42252bb3dd9540ab08e8a08212198ff9d59c131fa8742d5fe5b1d5b3123957384c2c9ade09f5f8942c2692e1a04e8a1c01e43067e60729678a382ac6691ce596010000021c000000b00bba54c1bdfaae47b2a194bbed6cf01d0ab42a6764fcb59facb97c9856369ddc7c83fa5d8589753844379d9be23ba4134c45e61daf1b2763ec5014b677be1c1be51024f09202de6f8a02bcd410ccb4b4b64f3887569d54c87a45ed171aa007e808d999c7528c1a46228987c6de39bef610738d4fc0dbf3cff613e61fabf7929fa5eb15861b4730d62ece6999329644232e6d1ce7b6f61b42632490b7e938c5a09d2a6c1f8ac78f704a03b9c418f7c35d000000b00316634bec85384ed8c6c28f3da8b0de595ed364bd7b18e19e11a2ba27e8a780b7e91542661f1e273756c715e76181dba882d4cfbec734253a245e96441991dbc0f62d6a30248a6a969a9c8f2565e98e3acb473e3edb9c44e17392de31527306f2d45c252a4df8f4de60cf5175208be82d6d91b91c3f104162e982449e8633ffa3342debc5d78344400188a3c53094e313255b9aabe60379a6fde129339f4dcc81b17c959df68c86b98460884b249129000000b02b46eb54f634b5369397075a256ad6fa91692d1c8d1a8f206c6a13c153a7cb3f13fbafab6fe73e91a96f40eb16adba098da383f47d58072c41ea858864372fdb5e3155487eaeb8389e959cd4fa567c20459e50f4652bb289c9d6555af3e21b5fdd99a73a2998b40f4c44575c50612e4510990a298e2f5008439cb9b4591bae0c457bd5aafb00d4d440d2d86e23f78d310cc109170b72d8542ef4f97d8b7553054d462444c76904dbcc69ad706dd77bfb0000021c000000b00ebfe238759ebfce5fdcd1b03efefdf9e8e6eb00440b4b5fa2122123ab87e8e9a7e7579814a2e34f4e54cee47622e590b280b5fefc29cc3bb3656a3277890cf148943979f0767ceb0d400e5f782a15711a1455f7afe6f7e6ad04befd043bebd09a0c65f1ca5ba7fa280064628cbed28f23dc2c9798f44b36d19cef9282fe37985172de145e89a5e4bb866ef4cbde8c6e1a8991f52a815a4cc5e2c0773326dea13af1c492f4f48af7a3c68df947ba25bb000000b01f67cbec447f41f9fa75b1061586d1730620c557a0721b51958a4866474fd761cc05237d650af50e1127a829de8d02a106dbdd716eb20c814bb83a51dd9a0541f932f3e7d5e4ed01f523f369bbcc2a15b3bcf6dfebeb0b8bc82c122b89342f3052f0fe6e59f143e586b5057795491fe8034ff1c3c1198e12b7035892ed07dfc6c772b9c15900eb94e5f22182a086ea61029874fcc95ae1e421bdee143fad5b6a8abe7a34dcf96b6447d41548a1de34eb000000b01dc65eddad7cf688c391918f2c2a090d7dcb4e768ab3def58d02a8b5bfbbc79fc6f2764a04e29f0a7994225b80f64f1160365fd4e7a77428c89a6ce60eba3bf03feed7e1236b4ceba1c7b7de1ccd8cebe7622689352f08a91a6f3cbc1d38ef35670154dba565321d0c804c23459c305c06d3b193ac221fb726a2da4e628317e62d54dc9d7dd8a6658840bf73ed8c132a03de03b4665ad5cc227a487cb9fb436860da4b57119ca155ebb06ce5a5ae76450000021c000000b02b36f2d6f7fb876c488b7bd487774f4db30073422fb0c4635045a8b358434d357a392cd84fb733862ec5b894a21ebfa65f513e04229bc337459535172f9ba0ec020dff173d2a9184eac6be5bc566500f91068277f94418fe34d9a34bf9fec41e8765471b912913c16525002a9537d228011a3707df579c5eef5c2c02f2d5fc847d2c532745f81e99549cdbe7ac3ad65c282524267e517b15eb7f57f0137eb1ab03ca63d46a61b9dfff86b4a1f89b22e2000000b01e29f1227d12f2bf6784f7a84535883dabf75ba26d43e1afccbdbbabcb0736008be0f5581b903db955774d8eaa68470e11d02ce8151e29c52464abf61c3684e3a0291e0851d91bbc036b1f1acd77c23140b49df6aa0142034ad33c7250b39031eef615777da312556d29651e59d328ba2bea75b7159cf021127784bc4cbac36c81f471ac85279aed96a01478e701872c0eb402b293b282f74e8e565c17ac610c853d190268d12d0a2f73bd2d138c0d3b000000b014be21ada57824113cf86da1f149234b5f2e51adbc6bc5b58b692c79a5f4b6090e1341500f7cb65f399935596be55c3208d29c16ca6909f724412d0be82078b1089419ea976b6cbb293727c8b08eda6a1a9a6b7cbcd41635a55dac20dda8bc5b765447028779b274ff3b187f4fa195781069949d7e3088453039d923ab2df2f7e48b90a1eff097e1b1e5ed11de1a38881c55d39fb3bf543140c9343fbab016f24d22fe8e9727ee24c4df9fb13c6e033e0000021c000000b02c4b2acbbecd3b676270cf5b611b553b327cbeeac660587edd516bd0a5e87458fb2b0da3c13383974f6bc1ac3c0e313ee46b61149e22cd22d85ed6f0f048e1d397aa92c9ac905541e32ee51225a4cfc03d37fae169a2b78e91ca1f10848a677033c8e788790c596db4f1e55e96f93e211e9a5ab3794ae6f3e3b8f121c523c25d8bfae32aa90adc854b438488f5be74fb1d86a9159f3a7409f056c1628f6022ab35036cd1c4ebd3cdd7c9e0758daf6895000000b023a19f0d8b708f3d03a3624985b171ec824bd6178c848d2289dfbe4b7412f0a498c359c4bb1a2ec08eb55dc61dea02fbfa51b20143b617a720b8ca8bf9422e4750fc2b957ca1fcf6cdcc7d90c279fa75a3250901d6b5f02d6710fc6a34057b4f19ca9e7f94d2a6fde5fb7023805a2426251aa248dd755f6b661454fe308591c2d5c109f96e7006acf052cd0bd28003ea145e052c0f800c61a342266007e29bb13189cd6d79b8cbe2ab513905ce778a1f000000b0294b6701385877d22405cf9f549b56b144f6f55a360177497ece327e3976f02ded729c358b2707c486f9f1f539a9d279ebb16c02c474c54ad32339e243f0abb4fe0f14a6d00f502e438c3b80dfb4ed93d5b1bfc69d1da13fdbf173f39ff93d6e38c44e7ee8e0d6febdf76b7e15184ad000394abc623732a1a677f3298a8ec016c26c349a58e4939d6d6ccc7e8b701cca24a35b26f447f24a1e0d246b367bd384aa4a05a0148368701c71c48079b4e5d70000021c000000b003d3eb0adf3b810195a3a755c0bfddc5251efa09cb83e07c12b5987b9cf1a2539bdd53ffcfcb64874bccb3d4de506545e5f894e128426077f24f0c15b123f1d99ccf0da75a1d6ae8ad83e0b7bc26447fe2431a389598a3213708d7190c35ee0c25622fe3c76552a3547e7a90b313df3122c4e61ea777113197cba9710a6efb081d4608eb12c93d53f82a4bede6704ccd1daf991654062b6189baff4fed1f95b41ad61e304e36c76c09a5fc21f02a78bf000000b00cc98183ba4d2a4599d6f959a0a750068d878465bdf7b73570e3796eff6fd1c4944816bf27eb970ca8077825cceb2094f1138a7921cfbf1bba9889ed280d5a39d6ab7d48e2fe0d96262106261701689f96685d648caf78f8eb08abaf8e5710226459e3457258e6447c078a124e71abbc039b1909be51866a1123f68f0f58d92b45cf32529abd0dba70f352e5ba5b8f7e0984bfb415a192116c930c121691e2a3971e43c11d4628751203ef8a1126a521000000b001a940521b52899e05fcbf8e3afd6863e87018bd758f60181bacac08a3ea509ecae41b0e9f13709a2342439f1f0308bec9ba2d770324d69d874b5f2ec076cb527f650cc48cd99f605effe38c81ad16bbad18150fedb306e8b260e2ec6f8c6c069fba9daf5297852355ed303bf4c2024d258905a89cec179fb5c5ab709108ad3ba86814bed4721b289f467cb69850a5ad1e3b6a69b606ac9dbc9942b8b79730a0cfd6dd12d97e29c98e2ae6ec7adbb1cc0000021c000000b003c5ddd1d743e6bd0be8110b9eec6763ca21c073b3cbb52fe68657ff101bfacebc4774b0ddf7c48f10613f51fe1beb8e21d153e5ddeb0fae83c047cac68f30618d749359ca7c73e2fffebdcc7e364ae3d1c9bf21a4f39776b4e0320508d8f9c5480301c1c31a403a4e8bd90df9af0a21111752e4450d25f85c346c638f7e298013f9625c0b30a46f47208ab15785bbe12d8e97c135a85202b6a728dd9daed8190bd0ffca298dd33404e3d457d37aa3b0000000b0033d12852952df59d0448719eebffc533b4666fc20e858e6bb47bd34df1be1b07d6945dd269d8948a39cc97105d4ec357cc3e1de04d78fb46063a35af1ee1cd7e1b1ebc676b74e65e18afd2c14a4e7d47b74466644c8b83d9386a2aa5805679e0dafa58bbe8e69713e9e20005c14b865131ec97a3daba382648e06273a2cc1cf9288aba27c168d07ad58adcaee5b377f05f6479448b8d806e1aadc647a7ba33ab9fe7da45ecba1c9c16dcdc47852f4c6000000b0220531b58f9d9ad6feee8c868381298e62c907534fe2f509d49aa8403c631057f139e31e616fe2567492c50a2ca59ea3b756848653e05088ed611b3b1467ce6c7876654d6f249cf3cdbf3b2236e85402941682400606a6a28c00b3974dbc08aed99fd13c74fed8e22957e61808d7ae4c21ea655902bea81673c493202a161456cbea0f8315bb0bfb50c2907b62814a2f14b4df43a54d6fb3630d97c85f098e3245f1f95c72c0670ccfbd055ea89fffaf00000fa400000168000000b02a408003bfb9c2f38e55cd7bc5977b6f571c25450774b6bf85b8f747a9674636caedfda8eadfdbf0912b55f846988fcd631a9e00d0beda281af4df3c732f89b9ca62f919222d10c14ed86c4e9f8a81613faecb374e95c82463c71f206cd523be602bd3904eb2228076dd543f5e42d3772b9ff97d8c0e5b9049d60cc924328fc92ca667bf4b0059a05df479642177d82b2c5859d1108efb866fcb73482f510544421f6a0408347ea115780c8f599565ef000000b00378e4be56ed1cf9e03c71d26570ef6b3f6fd9493ec40da991b24806fc7428987234a89086ea86e3f2d9424a77fb5db3c48bd15ba486c0f754aad0d67f6baa9ab9db04831075b1afb95efa17d6fedb24db850877d2a31cc9caacf1ac2b1414da6dbfcec2608199ead6d1081ee0f33ba51452372010cd1a6946903d0bf2fd0ed86072f484832d0090a2944eb87614e57719cde0448319c8aec0eaff5c46c0c43f894b6a439eccddff40acdb34fefad78300000168000000b0071be37b0dcb72d0be074c6e8580c9f7952746775d5cbf1002c6ac2d54000e1353d762181bb57380778b44dcc53669b4d4f29cac13d7594e926553a67265201937def1af34e8d459f5f9413e27e04519ef0dd25b90d5d6a667dcbc270cde05891dc3e0dcb1a38050a795772b8289613d18280ea7541fdb4b46473c051aa24ff68f2daf31eab2b18c77f1586e5ab051f40ee6b1624b610529fdefd9dd5006cb87b762ff6becc58ea84416c7b3312f0256000000b024abe33cd5febd40566a84b8a980471dbac26395f8c88605b85e9bb0fac2e5685cc25aefc45fb5a886f83800271b49d9d16c68550507ed09573b4e6b8e5923ed1237c5091a776eb136b2b2a559fbbe69c985be6ac7abd85db2e8ac9083f10f0d1f5c90e5c04611366d8d4f274346f721301d8fde13475fd3b5f5911b46551788e4e6bb8f05060b5e922d0e7e5f01968b0a34304fef1812c71b052b08e10711316fb69c53a273fb7001c876bd7c30031500000168000000b004336816537c7fb9794559dec6981a89b69ec69ee605e7529739cd284f948eda0d06a3cc44be6f5ad7d65908d478944de8097c86b85b870ed495cfe97aea25ab6ccb9902f0ef2f1b3bcc2716c0052ae208b036098e77202b31754469ba6d6993fd139448a38833297cbbb1c51af87b6203bba9147ccd27df8a745929ee9b15c48fc013ad7f3d99aa4daa6760a471dc3b0c82381815f5e462cfd7ec758eed7de06f8b071cae111fa9e21f46a0d4ffb97c000000b004e98730867325064ab2d6eeb7bd1e46aac1947b0355df9feef25f66a7e3c02eec71c16adfca42b4a7097e7265388bf416a91b86df2eac87afe5b3c1dd61e1989e906c06dea4b650ff1c74b5b34a08fd25bb91772fca7cdc81a75bcad0703df380e506f53be5c6680658043862f519530c5cf431c02803413af29325a274a0ee324d8b18ed4f835ea6b6d076cb27cdf727dd236c51194e7ecc1fd07e3d22b879947a17e77ebb3c8436a0b80fe046dd7f00000168000000b01457e1284f1b7efd5fe52aca02f545086680eeb923ec3529b07b6bd234baf4ead12db785e5340a2d252bccd6b14f19d85eee103928bb0456eda34687c6d7561d11c7948c9ce6dd961b1404f92213540f572f0dd981e9a45dc2792ca74177885a03e7d1194883fac1dc89794a9c81621c16fcb494b24b288f20bd723363de15745c7ba8845ee888457900e23cb1c1b5dc27a4704a70e5628875ddf5dbc401964bc3421a81016b042a690a9fc89bc2a936000000b003ccfae9169df2d8c96853352c93a420be7dfa3e6b474b404c351dac5877a3dd7116f6eb6c3717d8ce7ef42b18a392a1f88c57eddf2f8806d71418a01831e9c6e3ba6e8b413250d23c457ff1f9150adc997d913a4ee6923cb1a94b686ab21b2bb67cecdefb149b489cc709acd20bac022f47996f175627505944bcc32938d6793ecbd0435121307a41bfef1de1247e4217deb9a2d0d0ca00c0a3c0c955a8c7280db0d37b51c538c1a6c855f70898010300000168000000b00e2c9fa53beeea5eaf57bd757dfe1c693facaae13e35cf6209e636debb475a7c9061d64a13d0ac98a46a7715fbee730d94725fd302caa0f2e6bd7cea5a65d990c06a1c7d8508040164d5a60b26ca90f6237b0227bd2870daf01f31e41f557478cb0171d7c4e4fcb71590892b50cc5d232ce3b072f9227f66f903ea73553fa61d18214dc40521bf486341980bc20e16630832866513b533a9d64e00a5395ef14acbc82a4cda9e6a402361350ed9d33b66000000b01e9686fefbfca1edf1eeb01767b275820d12bee964a945f86fd8e03d2d7923de5db50f1f6ff808290e0a65a716e262d7e3fe46fea746cfbe8ba9880a062ea51bdaeac32d5181ca5f1e14d5366a84ae0d7a4c7079853d3043605aa619a32434685df4668b98fe5a339c6fff198a10159f0850d9ed33917c444dc7a7b7a0aa317c21d996c26accb1409af535923aa1e5d70df0723aa95fec3d957f5d96be09642dd15d329c127f8ba305d5bff7ebcdbc7500000168000000b022153abed8bb711b01691ccf6d148e48cd4c1cbb7649cced6b154e815a545dd74dd78e34694a044e37646d42ee73b65ea53aa5aaabe9eb96251d6748954dc04eb35b5f3f0f7d9d8184ddde16f4ff1590e2417cea1f5d3772052c2c659cbe0265c9825b57c56e9744ac123101138c2e3c10f50c40e9b72b1d12b5a776985e66ebdeb857b0224ed549b10b61c8485b15d12e4d47787140da6e5c0a0dc21b8d30c526aa40a1c87f5aa4172f4d0378c6cceb000000b0278badf450c851255fa0c708c0790b3d1dc037a80db09cb086c763e5b3c75b328f3aefff3121bed23e0003d2c8ff7ea4b265d043cf204f8fbf249b0f2055a33f399b7123c71d707a515f0bfd5c953c384a1b28a70b5bfd9d2e9668a7a301f37709202807f403901e8ad47380fc05f8181696f994f6aa78091859ea56e9737205059695d6f582a89a1d004851093826e710fe329db8c32631f7b0f523b44971f40f01200fa3e8b4aba7dd5c041c7221ef00000168000000b0000744e5edb6586dfd2e400fa74bb0a9233f497eae003733464eb73b402ca8c5839d28d3a21ad3356dd58388eab4a701ee05451601f6d21cc87b31669c81b4e9600db2f0bb37934be9b28bffd2b43647164593be0ddafbd62a11dd168232aec6ea3427a5a6befa867e0491c7147ad64b00b5807e2bbce368d6521c914eb86af35a0fd2f034ca7711f2e261244427025a11980edf41f309b042e36320b8fbe538948434882c116b3853d63ffe1150008a000000b022bc4a0c1d5be070a25f827774f6cd483c5e741b728c3090b16fe60936b8b758066290669a8524af4263a4dde53316fa9a94d909c58740032aae10bcaa781be308c7e638176283170af351e111e58c53c7aea3204eb619b98e1de082034aca60bb1b893f9cf7df849770172f4e715d601711b75321c868a499985eb96b1e3dc63f4a4ec5efbc52d38a55ca1e63a3bb2e1959263e5277fe597bd55499bffa515dff05375e2da9c7684de48d302be7598b00000168000000b001dfcf143c143bf3d3f875becdac36afe7999fd14c1b3ddbff9f69af3774a66d03426b125cdb776b1be54f202de6472528fd3ea30bee24587abc4d4a151501c403f8a7a1fc2e6f65045249b6d4ca6da9e789fe470467fface70303551235f2948fe13611b7d3e4f02c453174cc23aca612ba6c1db0022502cb311ad7e12cebcd8453b55104355b04d3fe933131b9ed2321ecf8e7fed67a01b68f9a5fff518c6125602420d2adc5dfdeb31afd16015b27000000b01c9ff764871295a1de6379c3ae402ceb16ca9c9bf80130dc6033978db713f2fe118de1ae12cd82079b343b297bbfe004b2bd49cfe9261611f20495c1dbd870226ee2eff4910340128d8edc4babb11db3d10d1546b5f569572665e812d59c25de04d31422c765936e015c328729055f8615027f048a0199bc9fce08f611948243f1183a11b26282200131cd4b2de12af927fcfda118522a2fd74adc6ad025633d73379309e75bcab3d3183133ef186d3c00000168000000b00f3538edfa3aed0c2fd5ecc0783c72d78064585e1af184cfdc25a3bdea735b0452bc1ca76ffa511afadd3644d8777fdfa836964713cdbfeb3cd30a6e60e8570770aeb348676b58402717e17f05c4c90b7170faf837f4492d98ec02fba16ce99c64dc472ecf3d3b0bf073f36dc1e3297d24df2915a73223d20ae3276ae503fdab477f4644dc899fc68ea1702a45d3221710685ecfed72911873f7e317e37e32cc2336358935e8ebdc6d10e97b52f24fee000000b00699a654991c4736251fd1083fa1b46c59bf57c6281a0839282941ef917d08e2be1229368b6a1c662d7ea15d254a048efc537442ef391201f166d16bfb5d4b86f50094421cdd0653d456c807f20075707d1bbaf78c3634d9f41fe4aac04847b153ad0b2dfe56819159fc290b9f6877771151765f62a58ba985305ddb5d35a443f7815fa70b1f1082b782eb2b34704a9b16839c2082534de0d114764dc27dec59aec911c1ea5d45f8db5c5262bc46c60f00000168000000b02719ce1c92731b83374cb13f4d0601f184723b61f4a2f141e5e9bfb97f777935af07f8a3cb315c3123e82fdbdfe5b6de0c30e05d31dbbbe402d2903656b29a1e934beb5fc7081afaf183221731d1fef38d46d31b69000227ad71d3f3fcf366686f264349d1c188aa99d66584e250c1e109b7ed2e424d4fb5e1708efd17d8983c9c58818e6f9fa994453e29139607c9e9189f335271a6977ea850482bd16252795c202bfb155c93079ddefa47639a7ea2000000b010651b3009ca43a4d639d62f81fe0c44e77b156aa97ae2d1ff17583d0c0fdd6d9d1db10c45f6fccbc2f4a0cf3559821207aeb0538c1decf756e481dbb3998c24111964f0e9e3989ce8c3ab34967c35bc4587cb6b41d1674cf0c655ece6635c0f693445faf0157020b905da14fc56e4730f43861d14d89750ebf59ab278c3496c4440419b7b8930b20e3299a7798d88bd2fb70396805b577bfeef4988bf384c42fa38a615bcd008c37f0a3ec70abc57f700000168000000b02f38130d085ec929bf449ff2fcf6fca4dbbe50fb592874355b9c5859eefd8963ba8d4eaad1b627325b5f1325a07c35a14d14c05193567b211abf0d34dfa9ed4711d06018c069e70a75bf8ce32cbb6ec1cb64095ee706550c6f4b821350d2eb7bbf9b7463eed79fb9a39d52d4f7819f472428f70bd93be06c1aed976537f55dd5ffa98e8950e7e7b85f223468a22898fb091e3683e6f5bdd53cd6f73f42f2684ff046eb34385b92c83e4a14e139b0f484000000b01b706853acb1d48172ab5d202b862c9eb09abebe53f88e78f5f5babe16585f8a620ddcc977fcf7554b8f697c4b2b6ae91045309bb8fb48cc55f9b16158c00ed49449b59677f8df63a9da2876f7e1cf3b0f02da2c52267f3c51bc377c1294618a187573f041b128aabcc3d8aaf89e3c4110cf5728dbd9ab42e93fa2b33d4b475abe8019af922efd940c37f5e1131fd0211f421ff8618ab34f7f6f911b0c25cb39d286e3f4df22bb5755e736cfb5470c8a00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00478ee59ceccc8d92943aa8fbeac7095821e0fcfd9dbd672547a80a0c5fd181fd2232bcdbf9333063f3debca5596a578a5fa55a879278f21017a0dd2abff39dca0bd820e0d78f5854fda504599c705303150675daa4ebb61d7a13527896f1de57643ba35804f4b83570c68fb23601c7a0f1241a71e0cf8424ad693ae6a4f7afb72697c93881dd8d39a77ba8fcb0f66270d9fc05764eb27fc0926cfe3cb027a8dca137873ade7008c2323ad48b604c5ef000000b02260e40ce4711acb3c1667ea31462820a95595f1d94c514c99777349aa062c218be843f107f8e11f90cd396761a003b955682bae024d22cc04b70eb150317913e79a75a6427e85051d245baa32bb2e24452e34ccafde909a6cc5bf5d7b43f26b3c876242f0a165d1873d0880960b4e19035a17d239f76b480feacdce3d39240177e7c1b5815dc9e88ab8cdb243f28cb72a2add95b8e084143728f7f25cad15f7effeee173a3013f64e22a190d5d2637e000000b02529c3a88c7ed0a211b69566021b758b36f08e822df3b632f8a8340023ff0d645c7546666f6cbe1305128c32c0b757db82f2f4505e693f476ee2d0f3bd886a9e86683600e05158729680fab0f42f99b39ac2c60faf047092b602be9a16cf860fd37882e6cdaba84ad6ab19c8fdc8cd3b2d899964c082666f9a73675c5efabb41f69428ef52454e5b74df5131f6ccf272241649e06acafbb928653d41ca2e71b4a79bcfd35fe84411ee313d7f9a2adc590000021c000000b0198978b6b6ef329110cb36855386ebff9b0c49ce2f50ec0df0f9e0686aba62e3c1757091135c8ebc70540aa1ed0456ff1d55694fc03aca5efb3cf27792fe3a0e85a2d847c84dbcfe12f13dbc1d0e48ab12248a4c44b0e6acd646b551c20e3cd44b3c9591ecbbebf4f852029073637eec0cb19d3ece532bec962279a502ce0027ee6183432481ffac25271b69f7b140e900acf17e559d5e536d5df9c55b459147f691b555a225eff7219c285676adf094000000b0082caed5a729804bd000550eb291209fb38983fa54292847309e63656be75d716d0719006699137c8d9f0f73ebb2c8f2a8f072715c7e34ca36e49de99718ab85955e835859b242b6ddf6933699060ee9ac49ba0d3d196d0e415399e2f65acb64412d157e9e14495a6a270466fa6c47ca1d0a3582552b458a3c62ad26a8032c4a31fd8c5a52bea10f313473b247eb65151a9cee10d42e097bc9fb0186505afacec84041595ff798db567689c32958fbb4000000b018cd8b5172dc4bcbf8e8b0e7a1a39af7510216c603207c39475c60cde5d48992600b048c0cc577b86dafaaa3db191a17243d95cedad390d0f425a034f4b33cfd8e9187a0f1b4a50ff7c9dff0d571ad47d698a0696327d09fcf726d4c2fb8e7d6855e1e5cf73f42d9e5e55d67059c1c0702cda1ff558f4457b5da606653f26310f5a1ac8548a3c866884453cbc0c6696a1c1cb9e6a2eb0008efee5e1316c2ead933dc0448ccb1db863d1d634cf68e47e20000021c000000b02216e86948f08624cf98680c4b239cc861414638865201120c09d8694c267793902f8d29e3658442a6bcffff6d482299a4097cd0e248be277ce93777adfee60b52122bfe202ffe9dee00a69eb1bd14137eba66c47de8fc85f8264f5c597cf4ed05fbd082e817cd908a1b98529d08efd8013d33868a6a8f712f8546d435a4fd4e5f03f6f50ca913da7c10d88e86292b5b1e6d70824d87104ea503f827ed67edfa53223655f8a17417969063b59607f1c5000000b01f4c3efc238566481953fc2cd68105075bdf40e3d761844a6327b5639f2c402d682222f8aa503a76129a0dc20def841f8c8fbdc7cebc7aa556ff52dfc132b6b39bc5709c2c124e0cfb803bb9daa31995c9c8beec13a348876ade3ca61be301c0ec2e10a41add66f273850c93f0c372760022c111fed19b5032cabd9dcab0e5d678b45361db16946422167e9e962fa4b11e4ae7a426839afefd07674446ffbae4a470f1351110dc96a944749007b545ba000000b01df6f69bc8a9ffe0573dbabebc92f4c62b77e453f6fe4e0344b7675234f0fde2fa5749e1755a5785e11a97dbd051e088757dc37f62ff29e3e68796f7609107905a09079ce8eb3cf2958a70a663a76ad007d2202247e6e8d3653cf9cd2d932717f4d2ced743b8ffb567831dff34046c8f07519b49b55a37a2b3892e41717a89680438d3fbcca5a23ffc3c83002b2fe76a072bfddf6c942db3bcfbc59f497b5bda4341a1122dbab9595243b2fb4cf8d69b0000021c000000b0048e410a47fdecda2bf97cba92dab54e1c57d48e3fe07c1e4b13ee0294c8cc372b6857bfff658fb61f5897b8c397823dba45c4be6dcd132c8ede3f3866c659fecf88861e5740810500327bbdc1394de34a7cff5dc48d81894abbf07b7cad395cf823b10421d93873b3dfab326fb33538213b906dd8c722098cf27db0d493e85efa5da6623c3dc2d089a770b483e77a22038217053874d4c968fdbbff9a7f9fa44f5983ebf7449ec1b3442c40006e412f000000b02ead098c380c8d48d508fb2b8f4c53dfd2065e39e524e46e523838ff611f495b8f885b14df76116cb07ef5c75e7519fcc62b0be47e7359b06fca5bdb4f59ea414f06be465d52049f7aaec1a6e6ab4c9fdc155e15a152b96158dda3c57bf4d64fa98b12c2441c399a677fbfca52ddc604221966694addd998d48648c83a85c5b404dc266e25ed885588ca610b077e260b17b8136166e29ca18f00eb22dfd747393b31d2fe3986edd1265080aca9d66f08000000b02ad642002fb354927704541b8826dc11afb0279589455374eccf826d0a4bd8b452b3b313ffdd0839c8b3757143994e64c88d471899aa62dc8ea3091d6eb0531d8bd0ba054feaa7d08a1ac8ac13cb2e31b392e68f10371d7f8582a9e608481f5487f1ce06151637d5e243b20b687d496a17f8f93c0d97ac00d43f12f21778e0b4e28d09afaeb7a3a3e485c163d20b55281b48fadbeb7b3e5f7aa1d514aba28831ed7eaff0c0bfb4abfe3250c9804d2beb0000021c000000b02e8eafed9f0aae75198d13d80f477b25820518e0038c406ae3a09b552b6acdc135eb8fe881d3e0477cb40aa1124d8b1245fe41ed2b6147b4a534ce4b56f640f15fb338c735efd9551e3d6e6ffd27b1076e85bd54290a153966feac39661a6628b34eb967e060508be5e4312553d99a342d8b45e8a13ca53d272a3e626eb41b3345f6d16120a8f072eef4577b88dd2ec321ff0b065bd9e43e414ba92eaf0d7dd1765435ea7f100af45e07deb0ca92c7b2000000b027c347c5e11c429d4de93e93e2c140cc4c61b19c0d38895e5fddc8f8b8ae53774840d6feb6299df3d4349c524dec46fff046bae135a1b7a194d91902d87e05ad18830362e70b6cbe394862d2636aa6ab4539113411b15afa0310eda02bfc8eed81c1c99f19afe6bfd5b6b0663922e5a11d03ad7a40fd006ee2d14d5e8e75d5d675be1d13d0ec3b94135ef42b4c1f94bf21cc1a6617f26423c201f94fc0c96a38188f3e2500b14378ddfb9dd922bead89000000b0018e28e5fe8dba20d730657895f727b591b98b6a059a4e7e490a2691358dbe88e76a133044be1f530f2380a39101cf37b2ab312905637d9de6d894506f17b1c5381055674eb76539393eb002a6f808a75bfbf625c2eb2bac1015edc6ac949073f1f48a90f651f7807dfd27241af5e5aa0f34bef6919b2cdc5e13c5c76fc6c1402848d012311601d7161bec6b89a26dc711b046fac6df832fe690d614cc94f5246af6e7e88e82644d7cf2012ead95b98e0000021c000000b02767d02090c6ee2c226cb18ae97da8c76e9d99ce00f4ea40c31f4e79dfcf03cce5f1057bfc1dd1808d0fe5e9307c6654ee021ebbf3ac4f642bf2d2d890fc7699cc36312ccac9bad6937a879059e5f658c9127a18db7cd835d071c26abf8a5e864bdd7e70a04fc4ef015261cb28830d3a22b2aa35340e114e2d79fd8cab2d7518d1661e7d56b35c6d4198af614c9631552661c55a69e08a43f09135ba611eef3817e792bb11b2b83463966d540313fbf5000000b00bfefbd2487dea2af0fa1aaee9964b24cb58dfd6d2ffe0dd145f2acaa91c44979e194f3de80ed90e68c6d5bfa8dd3869ed1f9f9461f1d76fb85f954358a6a9e5a28b2830f9d668aaa9972f546196f52e16bb2b14fccb6827a9c0ccfa38e0affcf6baf8df5bf602b9b2f49033288a69c0040d9f1bd46d2f31f946f1e8e6eeac5da236a591ba2171722abd6496bf883a6823bc89682ec9422a04840689c692898e6882de7a38ddaef43960a2e3f81a8dc2000000b006955afd1d2f1179aeef47051c22a5d9e81c6d3d14f5d6420fffbfb5e1f1efd4971966ca5d1d5dd558386bb14ad883f2f051d222c6db60ff6e8b5f1e2649e8de89905bacf4ba498a02e1a1c0e2eb7ed5ffa21e67eb4bfcbf144f656023c860d6388634bc27c0687bb90d5b882b88c2442bda6abccdb61885727f6705b6243d4017403bff5dd2c449a6b1d0400d53d20d0131e61fe31c3e75571566819b875f5ddf465104e8cc7b89d8893274ba900f4e0000021c000000b0298c255c22ee7c3159e76c63af87da373959467bd5e28d68c4d9b9511ed23419f4358122d86c035bf9f525175c697513309cd107ea864fa12591a7ad618145fcb388ee51fe0b6a4fc13c067c58d214e61208c7ba15e1fa3b8e6d1b01cb3047437556938d57cba9181a5cc7b367af61210d8483342dfe4a6951f4b3132025fe034faa014520d4807fcda8f4dbafef104d0853b81e60466f8f986a090b68786b3b1a44a2f9780bcfa8268268577937b1f4000000b005343d2f66ac0180a92fe92a8e022c3dc908f6fad26ae2f24067dbdb70b37910e45df08bc37fa8671be05c5144874fb376f6abdba88a5d2b3ffbde0f0479381bc5b96a9a9b4225808fce5c66e154b849532aacf146df70f3f456dbdb7ba672ca0478630365c54e6b6465fd076f1148290eacfc5d2d39b8cd7dd8f43fdb568c9dcbc75aa73d95a87d0b7df195c3e5870d0fd7ccd72c9f1127b1516233b742a540e19bcde3a50a8ccd22338dc1b89bc102000000b0078fc6c9a29b560550103d054b78c472cd54e9af6593b004e1d4eb650a4c62b64452fef6f7b277f776bf4a68ce1e2e2ea6d2199effc7bcdca442fd15725b46d8c0156af99263523d34895f32fd6eae80b5aa4276899b65b00bc39503b98197d3a9ab0cfe809164626a150f7145d39357022a4087d9333fa5c01cf3b59123c0cb9ce428f7b696d6d757f055feb0b1c064211ab215131c543a15e0e71196a37643fe749249218c229e63ed1317a2173f1f0000021c000000b016bcad5a97fac1081575372c156c998c0b810a181bc7b560eb0fab21c73338c7eede4da4da35f5766d0b5c32dbbe0a074a2f2145dc1b5f131ee8c606db9d5a863a91edef785f97b5b1f45a05d422cadeb9de600cb465cdfc94fad0a1ef9678f1c18383123d632c2e943ac59e5f4de64b2da1702716fa7eff4c369b74e29f1eb9c641c934912cbc8d3a85558c85912610058d7280a1cf69a536c00fed6f25d0adfd203d4b2a5d4eb3c0db3edc7a0704e9000000b026b1a54b68927195ad1d84d12e16d2258fe2ad6541acbaac7e6ce81e3f79f47a3efeeee67692cb5ddbc255757c79aa147c91c1d0ee4acdbeb7fdcd3e97c96ad34330b360f94ca4ccd9dbe3e48dd8c3131d8d1e58703fc76abeb2c5ecfcf8c2c69bb81ce73c8de9a0cbe2b7cef056befa1dfae8b76db8f8ab4295b226d7e178571dcb5b980b3e8614ed7a2ae758124238146606277095ecbcfd6fc036fa90b83720665bb828cdd34e54d7e87e8dc7a541000000b020a2fd6a5d0d208840a5b416fdb28ecdf6a7563989d824f1f762ad89ac27022d11c4e1c9610453d131c51303c748c397bb386b602284fb4d766d109c46db7f1030234654f9e4f4f69ca70b1dac5dda88eddacda16edb86cd261a24faa64c0c754a8d49a73fea34c9789584f3f7e7ec702be7d87c1afdae770089700f5ede6bae7be52fda00d6f933e0dc130e73ede15f1fc54a10f6106c3b674d262fcfcd33bb52a93bc3115cb4a14fce501f654b691300000fa400000168000000b021eef539c47318c619dee9025ba3f418b5b8c39f885614d896f4f1520066f2a8d82f6d7af5a72201536bab015944ef6cb1dd81bdf9b2e9673da026218edd955de7d08b6b53d51e7f0ddf137e9b5c5f3568ce6a489267d3a48c4ba6056799bfe7f36ebfabbd465eae1d071091858549250adbe478dc48e49bfafa00a2c9b9ba294c59d93d52c1867d3692e1b7a103ad0e0d3f54d6bf2e890554ebba2b849570633e8b59828f25e43804d6d3c74e04081a000000b0031ff2a6bd05d0a4ed223bbd7fe5fba2508c893b2bde88da1a69020b89ed55777b6ef28a08674f2ebdefa050c252efeedc7970b25e30da82dfffc2b128f334fe1aec8fd8cb981414742ad16ff9f3304e9d3aab427952cc97d94cad9ff5732b03401be54d49579c39edd865a7e63858ef18556cadb59abe840201638b0a9a563431d479efc0baef21e5a80dd127aef21a01669239d07971308eb2f0f5b6d1d54ed37647e622e49d24f7f801740dabc37500000168000000b005666486f611cf6a2b5af0d20b2100909a31fdb0020c69b73ea6fb483de76eafbf2f94e7e31791d042d5d312b97b54945d6a85e8376284cec4728513765f86213673e81807db78fd05e0472776f257b83a0e79911b024433d1f8c365a6dc588da164a5bce7c9f468835dd4e27d22e1b80282a8458b473636514cd72bacde6241c161cf5191763bca2d21baf087764a34076cc7c6662b43e1a1cd13c98399e0acd42e99085cefdb3dba90de80c3e9620a000000b01d7e536cf0e9eac4a3686f741f63898cca4c0f324f0ea5389ce4c01ecac01ee36fdb3faef3e1958a0caa7532dcd7ae583dc611fefb7cc80b609c7f32e41f831782a7ef52932bb7e7ca79051b1afb52cec9bf585fd2a5168db4f0c3cd1c65be99a38f2e83b3908f09bde7d2265e35956f16a7cc3014b2784a5affe768522a5ec1f643aa961b1ab74ade135ae3ebb914e814d7766e6aa366cb09c8e9441266e9d1098a13819e4b3ac9ada678d17bf6738c00000168000000b0003a3ab9888c4f3373fb85b2036fa36e1e4e87278cd923c3d4c5dd39f0b49a058f531de020001c6006f44867aeb8ade8736565421b5e22a3f6d15973d47fe0b5ba44a5038b8016da5b9533d6c9f9c2021b0bfbe404e56995acee4275f14b52fe759437a684ffffe524e8f601a4a6e06f1d65ce8607d9a44cd1b0b4ca3dc19b00aef2654f5bb606e25d4c0f6f0b6027ce06a463149f2e0b53ba7e9f434bc06992ed0dd95ddefea5e56494ed4303688585000000b00cf84ae5d11be3c6ebbf4c885ae99ddf522e8bbc736a3472a4afe36b8ffce7e25f33672ec4d25e331b609584973c16801b1d698cb962d11dbd9e8a4c23811d9dace5ba2a45f405bd641359d7b19488437056cae154b397fbb3c0a696665788c0a3ddf05b6e846f7b748a0effb5504ae404301d368bd5ec508ab36e8849a53f8a204be70f34489852bb2367464f6a292910f0106c4157cd5b4c71b990c02cc7d48f492d96e90b0a03d8777d84e8036b7c00000168000000b01bc07294467873d37453373573633de9c6230cd0c70a92e22d4609cc84c92848d3c6395d52263453b7450d98e0ccf772079996ff3d166f64dfabd4c7fba84d913f0733146d139d3ce511bb05e51623ca441137e4af696ba590370028ea6803bdfb78724a9432c67db5c6b7dc7aebc1ae115ae735b12f3620e116ccf77d20e38f5184991cb75ddb813b66611a9f583888147d130ebb180e8a434f03f5e882f3d78719a25cc76d5ace4df1ce3265499c61000000b0064c62b62bde2c3508f53bb5e1a34c44e31bc419acd98b0bf431a98718aa3b9fac0095cf6bad1f86ed8f2ec3ed16c8aa6daf28ba158b7bbbc198f9002a9a0f7a0a95e96ae2dede11723736f7beb4a5ca85c40259ab1ef718209f1876c66bf9229ca826b11ebad97d49b938098599b68021491c5a2102b67cf0d4a03cda442a1d19b57754d8d8eb3d4b9c4c0007098fb523319c2c6ebc29bd65d7ecd1878e2192b76023120950e660637fbfae5dc28ae100000168000000b017963cc7e285b2de074ea323e3ba407a212f85587d1022aa2305cb4a24ba028020350f42a60d701a6372f0e182a2192cc2eaec3becf0c517a30978172b0e073357cd233d88a50eafaecce9f18e4db2d4466aefe9947bac9cf05a4351f20dde73d4241c9c7d4f83504e723bbcd939a3d506cd249a0f84a639c236b556aef010067217642b56803aab25608abd3962cb82185d8c6cb16f4704c34303a8ea444f9111e22620707fcd69b9d750cc1d1f2b9e000000b01cd47f460ae7b4133dc459dd27e1a6d76675fdaac17a3f1868376e82b64cdff1e564b46a1a4e0aba5bb5747e5bb35a32d6b396d4712690e5e3c51991881eeeb2194678d7e15fec4d90922d016fa7abc2ace4fa69dfaf1d6a497370d6163f24871a50e161614dcf589086458531db112115e570d68c4350000939ecacd7f7f8f97b48cc6a0137c0726afadaed8862f716296cf0502def8f0f062329cfbe078feba5e61f6d923d60b493f25a18cefd835f00000168000000b02edc78ca40c01a51b43595d0a7bb9dc8b1d09658665cbda5fb01f4cd2d5fb2d93fbeea9b396c9f9b940baeae4f14870009de84e65b462ca29dd214ef0704345ee31827297d304344d3923cdec0527726cf1b781eba816c4664da4a6c6f4c1077cad184b71116c62773ad858cfa90a0b523715af373857743bfbbfdf505f7bc6632dc99acfb9f9f7eeef5f158a920aa570f9c1da9b1f8845c34a6265390fd77664c83de85940752b1d4fe18dec9b439b7000000b0281c4b417afd2b0ec1ad0c4a68d73848f279d1d748b46fa5f7e61d6131439daa572e7f65b293bc855d6522bc7bdafc9aa3d99497976357c31f1d9fca011bd50b0f7ff9d685cdf3b434cdece56ea03ca7c3ec77aae7a4b0542c291f3d38993251b4a2d9c7dea104a8778dce5ba75d174201963b15bad41c85a0eda55e595563635e2e22301ed5ec892fc5a6ce17182df314d87fd56e9efc1d336ca7c099ab5652b38dcbab321f20ff1ea38c6b52f6647d00000168000000b02541e2f2c48acc2a7d91ff2b91cb5b533dc7c281a3e193d89729e63dc21046f6b10b14d374120dfe4d17e987d8f36e72a7bc6fd1e646c24f3714ad10c526f3c104c907d07cd023d860391cc5eb0a433f6e9bfe9f6900dd5c2aff4757a064bfa44f460beb056c17886ed3547f8cd09d5503dfe93fd148656b7a1b7a64d31bc7a9e0804f2b9f509065114584568e31487d16a94a8eb4e83f66d77f3f1f54f6b559c538622dad964314a60dbc9114f92740000000b01a405f1302822059c6ea1272f0ae160efd484aa3ea6acb2a8b22f5948b7f489d026052b4e8e231d3e1bd62b346a0f4325e34a3873941c7eb07c2c1826592f03295a2776095b8899830209eb1f31a0b9cdf2c5458562722e1fe9925eab5a33e24b0fe6e03e217a42fb1f6502aaa1f03510ce354175808a9684e4bbb0bc8f585a06a0bcec380ac281f4a2b5fe833d5672d1ee25fae26f481564b99865eed9ae0ab2ee86350acfaaef6a4a552b708b5ae4200000168000000b017b7ce6c1e963a27d2a29d20913d55296ceb311459363a25a98ff6b3b14881d7875359ee687ae03f8ce6a11ca298c69d755c1a3902e22b51bc610207e73655cf8a2d02d61e13d8e0423354d4d32360dd42f7ab1d468a8cc71d945d4cf7af48c484002457c19fb0cb7b20e521f61cbbaf0f1e882068e9db08bf7539e32ad2e5082b508cca1997766d3eed8a5664fda75418782ee23a831be6a8ee4dba846ff27dd8b393211769fe6512e666814b15d9c1000000b024278828c89dcb02c156da317c24758135e7f29cd71d453e4f0787b7a260e94630a4a75be99288c6bbf0d5fba8072e849a00505a735623eda73219768f47b6968bc4031c342d9fa22a7d87d1d0397b9afe3d354dd51bf656dba8d121ddaa2f25e9eb907b99e80a35a9b7422e28baa77d04270924e12831f4a266c1600491ff487582eddf4cc31862152162f17066136c11d0d5689fab5a71a451cc295a8f7d945605cbc7a39c3c3fd168c1c75367abc400000168000000b029ed48911378f303808c9c5a3f295bec555e8a4819ace61b6da2d76f60653df845103fce2353cb390abe61c6f5f9f7b2f4d857ef2e66697114292e4e670a08e14760eed84c73c651509b07eec80f1ee9a07f23648e0c621a9251101793a40daebeb290e5fd97bf9908c1b58564aee79a19e025c322f6548947920e5c67f085622b6e16567b4baa41f928b8a32ce7c86406768a95e2fd4c1beb486f2a3a71efe8e112e0a21e670f44d28df5fa115947dd000000b00025f5399bad82f5a5709ed2127109d7fc1e471059eb54f4065820ba4e55b4553bfafaf26ff6d92bb7937a0cb2e0830733bd39ce52af77ed739379dd24093033cacea39f20169613f2ec2cedf3582ce70887f37ffea709c8796416f35e5015af0c5b9710bcc4f1f32319d638b996a8c41c97ad6c82f902cda94e73f3598ccf70fd53fb8c4264e7379f9de4af70ec951719d6aa920bf64eb2a2609013cac1cc637967c6c72ba91bb71a87baf1cd5f125e00000168000000b02d09bf391cb926581f2c4f435281815f232155e6df4d824cccc668926e91d3f4bd43aac3ff391a18260738318e3e699c0b5c225e37fc5b0330a65e22563e27f2ba08b2ad671605e8ec565ab1f57c5543c7030c250d1f897e1bc0afe9e2750a44706cafb4c15374133ecdda6cc878a024254d497a5b8a69b2009113e60ddc716a90b3e6c5533c5107b2ee28b6707ec7701800b15a0a4a74c475e620bcd28b022dcd5d967e594e34a76511f24c9d150ea3000000b004447c6ce36219e48f5bf56313145095c6fbb492e9f4f29b1da3f65f4654b0a477f89a8ecc1911131bc676cefca7e1672bafc813b536790652ce26ef8c04ae66daa2acec693bc9a7130671247d354111d8e8837d64ef0a58590caf6e4474a42b48a7025156a7bf6af4d2925cf6da222e1db98f2cc2a802c5b589c4aa9b28c1787ea6a30fde5520b1e478719abd6641361911f35056a35e008a534742b74560a47d0650d53c1508a0b3abe0c68b09679800000168000000b00c8f39b1c6732dccdecb3775d8c6035f0f8ff1254f3d8798682cf5b36ced6334b09a43a875e21737d591d37664b8fe5b73d101d29e1e0243ab1a30a133f3acd9153c2269dcfe4be495cbf77d94f2f0da34393fec2073dfa71a5da8407fd96e903bd23d1404d78c4b07bd5e693cc2d59f215d5f6616dc26efe3a1a7cec59aa663b726372fa1dbb6390c3bf4178b34c3c424d4923d0efc6df787f340a876c8fd830ecfa6904032d19f8c8d622a7277f680000000b015b8ba9037ad20a11d0edcbbdb48237a200d343b9f76e6769e268567eb5e9d2b883ceab334fd4e3ddbcb3caae8d4e44efe24c552da9d07834db8d251a1b6f01ae9bb0df5b6b6e8710b2432731abde66a1e70b401065f8196ae6b4fadfda968e4f07affa41ea373462042a3f19cc9abaa1b69e0a33f61d7a95bb0d685eaeb7e2c835dbc87b1d9b41c4b73b10bc3ab4b9914a013c7d1a3a5b9d8507b6ad0e96fdb42adc8942b72cf6a59593b844daf70ca", + "txsEffectsHash": "0x0056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e021011", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x001e043fb2c5de8d7a5caa2aa833e839b166cb0b2a03b1bcfa96dd224823c8b6" + "txsEffectsHash": "0x0056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e021011" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x9ede22c45cae1d9aba3dc43ca9a4014868dd9416", - "feeRecipient": "0x1db11c308c86c9548e554e8ea4ab6a0e7c0715098a8e50d016c9a7d2cf3af8b0" + "coinbase": "0x632b334737f23eb073adf0bb99d5417f9161245c", + "feeRecipient": "0x2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002001e043fb2c5de8d7a5caa2aa833e839b166cb0b2a03b1bcfa96dd224823c8b600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009ede22c45cae1d9aba3dc43ca9a4014868dd94161db11c308c86c9548e554e8ea4ab6a0e7c0715098a8e50d016c9a7d2cf3af8b0", - "publicInputsHash": "0x0071ce1c49525ee1f26bdd38498fa26e067a3596f7a80333a2546fde982d5fd5" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e02101100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000632b334737f23eb073adf0bb99d5417f9161245c2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524", + "publicInputsHash": "0x00955d36618cabf31e481341b1cd8e781ffa1404d45b741405ea90cdcdc8e78d" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index 23e180583bf..aaa6037cc5d 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x13d7261dd59660d1893de9ca805d5f10670e59d14539b3b5f21888cd047c95b4", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b02407635d98432f42812965e92968d68aafcb34ceafc107bd2c035e90c11c9a061557cd82d076152134014fbbcc418b256a6248bea1499e9f81fa19a78f133209c876f94e2e9cc4cc3b2ea3f6910f7707c29caca7414dfc6f65f94623a1cae72fa06555c695a5922d5f54f073e514af0509e7ab8fa0f9f94570e7ea7403d3bebd25e4cefe998de75a7356a8e76d5791e719e6be1db1aa23beb14fae5049716e1992767754d79ecd5d02f38314b78bf2a2000000b00bfcbdb9d2441d67367a61f13ea52fe937fa48bdc36dc1e5b3a5168a8c87d35e0a9c673b947e6fdec302c2b865c122230d34ae65e58e93a169401f187840f872d866f54ac29f51c943844763598792dd508e600a26fbca3e9d4bb6f0ed968650a9f39454c4274503c108bc91e75745e624d449b332881dae8cd865e15adb7b2db723139e68604b157ddc112a55719e400bcf29e0b47b4823fb1bcd1815907dfba915970945bdd11171b9660f6ce8850d000000b0189f6107cee1019e518a9ad786c8db36307b9a839b123b5a019d9551a3c62f7537fcf7b0717ec89a26937152acd398a8114b13c32908ac54812a5bd25996a3f2170fe03496aaef8f37345ed6a825f930129dea59ad16e1f6f19b5c1196c5a5937d5acc53b37736de48a1d0038f859c7815f5416453327dd7e10329404f1727d7f963338d2b8e4f01726999dff76c0e780919757db76fc2856487bdb6240462df364fb43635c53c374fecbaa69f8e04e20000021c000000b011a69ec1a0ba3528553e6ef8e7bfc31d624c2c7b694a4566041ce8454720e26d9ef91c9e41d09123227ad0d832819c90b9ac84a67e5d6fb1807183934c29a45288538ae578618e3736c6a16a05a15bb3a56e7804d370cde440af8049e3db7ed1bc91a5608d23af5f166c3eb1113d14a02511b86fa4b279205cd5e195ebe7334bb3e87f983f90840eee486454b173eb010065de8e4febdbb776a75eecbfb410ee78f2cc80d8098e3ec8cc191d6dc74740000000b015256fcef347ff4fe4cd1d44b6c83cec2fce5fab7026c4404959e6a61398a72a9dfd0c6077c07c27249e9bd79cb3acd45a540e54ee9652d02f34008fee10e680d616dfc2f20004da97eec7058eb01f4f962fa203b1726b0466d0fc482484b745122b0d3a6fdaa00fec725d665072457e1095ff3e9f224d1109175ab661f68f34a407bff00b25c76b8cf1b38cad83736f2f5df8d4e2e3217d72e63157b8a8698536b56555411f385b9cb95b2ba5cedbe1000000b02564e7e0536742b2fba4e842a0625e8ef3ab3752ce269c26fc9f4fdb314d3759fdf7fd0e13145ce9fe8f54d69c257f226c3ca0695d89741425ecd0ed987b8c11f403f943ca4e2efb47a1573bc6eddf37cf05c7e286ba81abee0eb86b4ccecbf83399d365ff3bb48b68549fc77b704ef92f6db93146358662b1bd2f4feee4dfe706d63f1c79751fdf1768bb9072f337fe08ded528db6c94f8569fd9b13fa9ba7a9d715dce2ba61862dbb01e8e2af62c360000021c000000b011cc16ddcb34b070b3a1d88857242d2e2de5d9b9a91362bfa2241bb8eb0f054642ce6b12cca9369a6005544eecf6f7cd32cbbb9e7906eb7399171a3062ecd3faa8cf394d61fda2b605dc4f75a37181ad421b22ea2998cd20ac3a19736acd488ce3ca3e7d2cce4c14dbaad7c6afe3b7f5112f65aea923150dec877425e79016d835be239d129ce6480ba612d431deea9a10e3dc245f7ebec8adde440db1478c91f35cfa837cb4bbd0a6b3ca4f8f28fa54000000b024d7168c18e28358e93eacd2865e671deabfd5519c68b91b019a1f152a0f84e688aa2234b6009a6cf53003e47d12f5a891327cfca1f5bae04bf2946b85763b14e5713b96970cfbd2da14676cbd9ee6c0d83690ffcc7ef2f86822d872b0984eb27710ea0fdd7f2842051cb7877d6443a4197e8a3789d8103b56da357a4ffa4c34a2514c3a559f8b88b3202f1e2f2e444d21e5e54c0be2eb69ababda5be3271aaf26ad1a878551cbfd4a5bf6c7249398ac000000b00b4dd9452bf97daa4e1c21413b91935cdb8068e79cf55fcc3e0dd2c89994a87b4ecce8e8f368a684b77ddd2ed85052b8e59bbfd7927748bf4047d3ca802bf3253de841b45de8c197859844bc5f408754fab57eca90b0c4b9e96dfc500bdcdfeb0bc7379b251ea9de364aa49625c6c30f1ec196f9692404863e5c2b25e858bea8d30270f0ffdcd133a5ec08b77a8fd1e82c4d8e264dcbddf7902fc97db7734335dc8a23b4cdf93ec942fc5e9c3766b5840000021c000000b010dd1490e0fffb5656ec59ab89bfeb42f8c3604ceec99c0c2a21a307813c6134d1ba44ea4e4e6e6a89451ce8988e27e6377a75903a48dc40b93febf738151536b1310f759cfb8e6ec39e1b71cf215d70ed3a0d51c16bf93c31bbbc6a928a39f601be308c711993c75a1901aa9843fb471158d716a0e5a63b48e93f49a486c250e1ecd82bb6d2b68f2a6def138d25a91f0f73de9373f95119304d333463246ae4295aa2c2216831dab7df0d9a9fcb0ef6000000b0064fe5b1ef9be357d1c30f9fd849f60869502e8e1e35af0df4c0f9bae9d744f17fe66d881d4d8e2df7f890ce0da43b30fd34a65ca89239a1de1bc11dbee22b46882d5aebfc2b204981ddd55dbb118c841d0aa43939e3112bd6bd74630c5c533319a4f7b08d1a5e3baf9ab4b7e939621316df107e451e40c7abdbedcffc5d5d4009046da3f5fbb6500a8a2f331d0f1186221a6da6016423a1499521a8f19f4d9f18b2f3f8b1849000c844db1fc90c5a2c000000b01cbd09ff4192f70314421b60e126f885b9ad1e1cab9e3a3602a477832f261c0cb8ef25a5c058d5aa81ee88c26d741c4e6e4999a42dcf10172846d0242ae9214c99d623bf1398f13e6b0506a431d57ec1eb5da8af3f7edfac7a84171f1d8390c9e60ce61a3dd33d244c477d78c4139fd40c167068fcf2d93d7c93205728409195537875948348e48e320c757ac6b6039c0117afc94e486475b1e355345849822cee5d47d1cb2c448ec031f710737838570000021c000000b00d6061a877ca3338d40a19283f3c0225172bb45384ca587eb370646bcf45ef035ba4d874ee498d889c89a70d934725be2416131be922832286d018938320a88852f16c4784ae68ca3caabb6883088a132a050a5d8eb4d7d3b4cfdd876c0d71800cfbcf620e0e34075875cec9d0378fd526310dab39acc241b5ffd42d0d43aa5e24cadf7e5ab64170cd8280b7f5812e250acaad276cf670312866e260654d7635fa529c861c5b14e4e72921a35969725e000000b005ff1c4eb8bb5c577bcb2f919b9b07d7cb45a54ac2ee9ae9e44e4d10caec15401e8cb77403070bf4b8fe4b30946a97a01ecf807489f8dd6ad219420e36a1a3f90d75e29ae126262edd2b3269ef783381e1bde078f18e248da6bd0d50ca4b6f5f90df7f24590fe30f8aff447af5359bbf0ec4873de16aa8809779c48ea252c8989e365f2f0cd482348d28e5f2754b74dd0bc0fca2fda3c797c0253dbf7b4517a6f28bfa54a728b70eda3961cc4e87dc37000000b014564c71661a1674c8dcfac0014984d66cf91e4b49b4c76e004409c731ab51e09a8eababbf1e4b08be4cc334010e002ace7d48ceb572d95e0ab4e2d211ffe3b4e0f71138b42dc157f2265845f07ea472780d8fcb8e2e027fd8d37ab14d6192500c3a1ed33c8e2c9c156977e697dc1d651c2e122e6015e93c699b5c50708b253ff24bcc57be805d9814222f7816868ae123517260e77157afce72606ad3a5606f4b0284191394474cb2759f125f68aaf80000021c000000b0084bd316e61fd853fcd9192637179e9b83e63368d4732aa79c9a36a4cd9b8f28dda451b17c2018ea250f693ee5e58fa0a6fa42850a33c57e14a323594237da860aedc8a7df5159aa60246f0957223462a78273b6e0613322d84c380f3fdffecbaf55678e41b1f5dd12d894d01ffee3fc1754f5a67d5144b97de3f8e9179260c05d36fe1a7f5afa914e6ac261db5afc3417fb3bf096b02229abde64893f19c734721b6b73917fb713256019a46ab18054000000b017efdcc51672622bf30781c28a167100ad6f32f93bf0e9faa44b3feb9c1f7ffe38cd2749dfe5cd5493d2d2060eec55ec4230f05e5f76b37c07b86cf99b477a0edaed72a0f06861580f75fafa408a9896335ec052b0020982e72976fe0752b0ae07f31e133347ca18276ec5a822f986d32e1935039c868d7940b50cddbdf96621cb9093f5c516b9def0936cb734c220102d9e844bc94c8cd28da3561976c3a5111d04e1b45affa164e302b1a4dea72018000000b018adb9294392b4e909897695551f5093a67261937380f261b18647d8da60b08f3757a8b46f117880eb7cb4d8980b522845f4ed22755fc2ae67b64fdaef6143fa9283f140df9c567cb643f46ad458b07c1d814f4aa0f117c5dd149dfcb306588638c2d90f805f1783a1d9cc47797342772a76efc51ab4185dc811bbd55b87e526627e1e3571b7102260570a1fb32960ae1bbcd2a9006587927c322f0db784c4ff93037cd5c9b8e2fb9def9a1bf2ab76820000021c000000b0121e375d79dcf8e47f452fbabff05956a1f2bb33fdc56e50caff4278b3479bc63bfdc5b3a4cd7d7190a3a80593037b648425cd96d72a15a355de66932ff5323fb099c9cd4e1c37c839078d267e1a85f773ef2917505e8e9e94c84c98910edee2f1675bb4abf1a83a78c1fa2003467c9e17b332e0183ba82cb18b900442af27345847a5ef09dd345915c90b7215ff327525f074124c5885d3687e238db78c51705389ec08bc3538dedae4cbecefec08e7000000b005dc3288d5cdf30115091e73b4a7903bb1e3948988658d172396c2d55fb2c66f8868156424eedf6985bb9758a58a01493253fa707e2682e2be427e905267e118cf464fe08b9cfcc31b60ad8bddfbd68cf4403eae54b9b720b88ce16381c7b563347ffdbbf2bf53842d8c9868ad0a99ce1beae60c69391c82e93bad74bff9c51006b7dcfdcdbf4d4e94eaff69446000a51e1440d5043aeaa111f2a4ce1b2b6be01c2e5246d52f4b96f544cc81282edfab000000b02d915ca32fc54c162cec50e458f12d40b97fe73433e6d923cde0017d8075bc7c8a9310630f4dd3378a9b96339264064b4bb61d6d13e06e9b42e5fa4246fd293bd4b06e4ab96fd4069ab7cf001c3f3ac807d808bccead8abd53e43a7b1a948af4ab9436ebbc02b14717a351864d8c9ba52f026c0df9152066f75ec9e301c09458a394d9af888b3cf0a48372b521e5b24030037210e76592639370eb4d98727bfa75683e890ab5f89e07c122598bc95a840000021c000000b02d6bcddc2d72eb1ab1b9f82273b8b0eb0999cdf6461704af3bf78f9ef265678a2b09fa37cc0e266a91833f01d05db4c22625cc78f0024452debc95aabb15cd46d6130705a2874fa53d349eb02edd1b177949b297d2206692d8069b8f7a4dcc00f3e6361247d3f304e52423af435beb212d9b3c99f191d0646c03df89a90d7e6db35c14e2502922ad200234cd23bd4328047c865ec60fc24eb387d4c998cf4b469f30e8d1c755bf3e5befbdfd49f50334000000b002cf2801d3b5cb78f60289d03a5634610ee88c7d6ac3ce8b21622d37dceaf3518f3a04d4a3555457a9c7848c65ceee647b94cce3bcfe268d3353112b47774b1ce6176631e94d028d16b942237be0af07ea920f280ce2d0423befdb78eda48d2ed104faf92f5c95365f6f2ed04231d6471c6d607f9afd8ea6ada4169c78e60a544ab9c56d9b9fb75062924ea98a159ba9222b3a422cc83370acd8ee740a7765f3859e1d31386244f4e1a469f05bcccac3000000b02a17eaf79e53efd377896816806eab246ad1ddd8252d4ea3841b94373e3ea86792610395f9bc4b3a582b96c513d0d8ca07acfe483f1185ed8d6ee61586ab2fa5dda7fa6584e61bcc41f19ef754c4179101400c5bd6f15eb4effa2a2682981c1e79302c56fd1e8a1b3ab63f32a4bcedbf1b1c5f6e01de5a9efb147264c691f6c141b31b7d1a6399b1e6d55f6763cbd6f62f958aa766fe9a8575d2317bc8dc282cb5b4fa68ba7b14ba83af5d8a99cbfda000000fa400000168000000b0108780cae4c914143d3e99581d25b9d1326a553b6e50d7e64356d74919d4f00a1b3439f8980e991eecd513019a957b8f7c65d3a96c1eaf0e33a0b747527ef808bcbd2ecc2ea639a171e20ca98961c5c62ed3341371b1f03af612dfa391192e98c53ee8e86029efaefc9d09423aa8b54017e0df76927f8ef9a25f741f3ae8ae3e200be492742b94de5622b24def36b9b02501beb30c6afc30bdd9b9cbb6c505d0069da4f16853a6129cad8df9d63141c1000000b02d7b134eb468aeb18af35ee432f25ce995c349b9f1754d5c77cb17558366ed7ff68886d3428e2e3b834895dae7dd6f9030e1b9175205fc9a866b16de7e4620231e6551c1d12f1a21934dd7081dfe97244934cfd2426ac90b3b2a53a315054d8f51886007e1fcbe7e8cd65c0a94742e0e0604cafb011e48d65b0b38f8999fd481e18b09e0a549bfcd8c3629471b55c8a91390a2327ed73b74f585dff8217835ae9d8a49ae8f8c9001e6333dd5b1123bb200000168000000b02e07dbb600ad7347778a5a600564b60af59f090b5615d64661bbe73e19a329022ee0ad02ea2555257c3ab2095fdb159aa3bffd5627355edaea84040bf78633540f9c9574fd64c229d6865800f4df68edb9182c3d05c67376498738a2479cc99b93cf853ad7fad9e1674394812c98cac40d062a7ba098049b4add131eaf2d9fe7c0c7bd63759216014233632813702f9c1aea3dcdd96449533f4f40efeea35183c0cd8430eaab4fd59c4f7c395b1c26a2000000b015bae5bb93926bc81586bc46af5b6e63bc6dea1e5d8608ffed80cd55a2237aadfde5225c2dcba7a78ff571d9f967978c6e156499763788fa092466612b4f579a695e6a22bd146438f87bb329795b6765c2639828e197d928a701b418d7eb730b3326bd63af865237672adf0197adab9528f3851d600814cc04c0a82ff74ced504518baddc6ce7cbe5b891c052c0bdb1201027f8954cb7c942eee675f45cfaf84a18f1306005b8a3f53bd449c123cb0e700000168000000b017c9dd4b77f08863fcd9ea0470ebf1ba3a9d2739e23ee7432b3422bc3a4f46e9892f2c516490895ce28ff1b7efd454061f95ade62765a79c890d2f5eb4adf48da198b62d78d8c0e6277fdc2524095dea10594f3cac81dfdc97bc688139a6ee779b208fdce0d8d5112399c305ee7e7add2ae1e71ba68a733180b68941649ec4cd68d1da4de55e730762cba9029e2be80d1b359cc6e1688b9b9b53beeb0c3c5d535590366ee636ee4521663dbd5f047ced000000b011c3c5aa5f098456b4d68e7fc1b3bc168786d6b1ffd82bc79d6b440cf8dd2524b02c7cd90e74156a2dd320f04edd26df4f77a5018bdfba0bc60d3d0ae12ece5a26bf2d71b9f032ac82961320f4027077a504708d8b5c6a1f19904575df03e3921845921ce8bbb8b378479c953723d4bd1ce84caed034fd3cdb74199991bbbd683ab2e6c440dacf7be6183c6a3de5ce0217bcd7b2c1ad5e8da967f42d64d6a7b31f05712fd1f1bee4ec4889ac192385c000000168000000b00b06bfbc8b7f8fc184660365a97bc4e7ddf99c9b7d0b4a2b814fcc452670f9bb23d0091cf0a5c07d87a93b0812aa59bc46049495e49494989488f6c7a9d4703b5a89b1b91ae835b3fbc117cac76dd85431680fba394b9782e4dc3a6fa25edc8099d9605ba1282121406ade248028d8aa0b9d724e1967d330be32d873f4858efde74c97a2681b775c02dbb4a9e8bb669a0a74810edaacd205b0e29fae33f546b9529f1f79ab6f3fa9890d30573224ba55000000b00e56826ce4e10068dbe2520ef88ebcfef9f987599008cf1fa80cafac40ff4f1749b291b115c51676076dbbe0f4e2d898b568b3840bb708ab002d1c725dc89281402db9eca109735a8e7d73a31709ba6611816c3ac00cbefa5b16b6b44a71f65b1d7c4cc0f6a42a2ecb3db25e1f442e142c68a542165feb07d9d8c9f1f38a9f75ed5e0bbf5bd17bdbfe9b5db93294263c0b2debd2238f7336968ed13f86ad583581a411de8a4295a412409d584f49df1400000168000000b01a28e3222672321b2c5008abcd9816d3556ed1a3dfd923ec5503b0dcc632317c996724e8480431175686a096e2a9188acac72ef53779f45f38b6493e57386d58cec5b0f2373a7645124e5a9b1d0694095edef9032a4a942ad2ea02d622d6b37181abc08806a3deefe122654b56acacdc2c6530bf95806a9fac5567437a9683469e26a21336dab2ca1acd8b9ff39d789620b6449df0a385dd57e8a1f99f07a222d14a3d023bf141d89d573e92565cb87f000000b01bf3c86d67689f6d5e3f60b14d58bf390dd010b0aff2b5521c9f12754dd4f2838eb51427edb16e6cbea5f5d05455bf98f1181b84dd96aa9f118e14f95cd92a7ec2e3ee8058bbb2811333fbf913c19ad37c35c9339728d12979cd7b8680e29887988d81df17e55a9c6fed2a4fd3fec21124ed7ed42514d0cef4593c09e1b6d167569f0ff3c3feb688cd8df74420f4c8d52ee2b83a11731b3de6dbbc5a37a703fc7346a808380bb3c58b561bbd3749fcec00000168000000b02fc2ef6702978f1585440d800bfaafc12d4e44dadde0e836f22feb57da30275b2807bf0a8eb826ebf8bfd0e14887f801343dfeaaed2e1a5ce47a2343bf577a68299e96ea5f0a65777080db0116e53d39557d1d8048a25bfa0f7cbccaab06d5d0cf911dda92fb8bc52d7aa619f4f515d4157c54cfa82e9e9e1d6facfe757c8814a3b52df4a210cfdf65e54f58f5a4ace80ed3e2127936914f21e2e8cf41ba86ad2aca30d8ef01ad34e6b4e14c6f41c56c000000b008fcbd4c9523de5523bd59810a89093fc7153f8df72353779e8d695fbc4f7f56c383fb4838cd73b20fb931677ee53d5684a0301e2ed435330a8b410353426e1f3ce130636588638607c20bd2f67f8ba590bc1194cd66d0909e4f535bfd9b62e20002e96c9496db143622a4ef75449c1117313b0829b0efd292e4434e403f08314f1893410a83a1d99dc3e82563a7461d199b48121a29bc3d70d2f0c46df7f5236f4e25ab55804db2d3e96e56feebaeef00000168000000b0287464ea51c3084ffbc64b1fb437bf67c35062caa5b51c412c7a3bec44ce37385a94d096a33a598abc61c529c33da132b0e67c5d17f8e62b850f11cb395f4bf609764576ccc6725a0533dc48ae687e1b4f498cd63f9110b4013dc4818f8bba58be20fe8ab24cd4aae134310e5fe2ac0302ac07287e535ec5bdfb0206e6c865910b9f49f085fb02c19649a382deaec9461ab7858cace1e9d014bde9b17b52c89e2755224118696dee83e61e5002e995f2000000b01779f2669b38e8c0d9bffd0b1430f0514c42bf80e1badd033d7e5f832d1d96b4776ac37770141b23775e18e8039695a412284d138aadccaae6f934e1ee2dfbaccc0ebe7ae14aeb97d5fb8f8e4aca288712f21fa28a28e7eef83c60fb30555c1b19960ee36e76d69450cadcf8e1297fd1222a92e408e837a41ec33af47001c804bfba2ea7ff1265bc291ea240ac4f726f053d7d162f0f1717e5c5cc0dcecdc56e170c27fc42d3107a488dc0f6c83d715800000168000000b020df59edc6b59811084e3ce6d7354971e82a45c6fedbe6e79f680c715470c85304be54ff1eeffc62213930421592b2ec9dcfc1d91a7a2eaa03ee6f3671b2fbab243a2e4bb43e7dce86c1f3e2e2027f9f02eb51726f46aa1c8b14f0981cf08aef2a6004b1df8ce85b8e38d03e63415a560908e942703ba493a4eb66f1adccd939caa20fd2aa992e50b95ead77b502d7bd031a7ec739b150bbd900dd1e29074d6c916d65bacdc947dcba29ea80468a69d9000000b0205478f83dac55d701a787f963e64f7aa51dd547615c9d2353ca17d4554fa2a38e73bff68dc31fb6545540ecedb4278c3fbd541366bf22184f8bcedb611be5fbc05b60d77542a33372837d639bfc90535dfa96f25d37a2d1db13c77a9b321c305bd99dbb7669a73d8cd1a5e5245af50d2511c1c332e72e7b2784a73a594d9ad4c37fe0df734fa51ffdb4255f0a77a96f06c2952de69862756b7542573b2d4a8e276f5d632099553f3c4c44f3a8467da100000168000000b015e63cf89c7cf5a3a5535bd553487bce43ce213c06c953ca959b33386e2a9f3d4c29ebfe92dd6a0e674e840a04a421fb157407d378ad421ea6472df79708df41d8fe7da0463042b79086cb7acc4f769d1d5533d8dc880e83574ef60e7f272b8ff41838a1c77ec3b6ef1d610ec1b3617a2fb4af195f73c11d41977cbf2474d09cd03645c31e016ddc45b7d6086b0484a81a614e1b76974d01caf63fc66165bf3feb64907aa50b54439fcb35d8f6c93783000000b023a47b4d1494625d6035530a819f1106e21de12ed5094bc44d70eb7359a8dec1d610849ec348426fe8c8c5d697cd7b81468d69e3829983e9774356465c7aec21a79e6d45b4b4e5434fa47d5036f3ce6e09ce6bbc9b6d99de50639762a41f86f32d1e6f385518f832f6ba3158ebed9fed11d819cddd6723d34e460388c22a230be919708d0e8b46edd25d12cae4101cec2c1150a9b302a8c2f5e6773a1dc2676ec7d81af44cce5f0ead28ddfd64b376ed00000168000000b018d85b67cec8ad77ef5aebe73dace23c4e42e91c433a26629f77088d5566191edad32f0dcf0108faaa5b43e49cbbb0a5e58dc5e3340db2578bc349123f09ea1141e850722922d14f355ca706f904165e31d3a09bdc851e0c6a63ea5fc7d1f7d7c61d5fc8c177fd026c8da05c212187db052d80c12f87db76770dc8e42fee08c7cff0511f861781d3c0ec816d15d09694156f1946e34835ba95fc4e42f269f19b21353d5eb27e93389bd459089722626d000000b02133ea6eb17089329d84658dda3e5e53792d89972003d059edf2f291e57df2e79674c1c195fc7ee3799daf0a37320477c1690a53124e87f1fd3a2f352b3a7c7268dd57ec2c296f06992a640876965323bb12e8914bb820dd9325bf5b763d71cc6d2f74c7fa4d694f1bd46bd6fa21cbba1d7f0e16f5bc61713dfaaa3e9fe417eb023d12b5721b0499e525eb0aa47f9ca422c12454e68fa74bed8d7bede94e29079e883f09d8fa0f2114bfb36705cfb74400000168000000b029c44f61d6448d43b06d00e1b202f918cb17496ba7b77f96c3da4c1f31ef5e196bcbc8b250f18482860b34ee187e7c316e3d2bd117edac055f7846ee93ec13d26402060be73c286449171a8115f8297aa8c8f8bc2d0cbbf263ab7a031a824ce5cbb5a5e28788d576f5216c26065ef54901be83cbaa2bba49d163001f9aad52f47d1a7d078ca07fbfb12b8c3f836e99291e6ba770536718c47f358cfc9c68d504a1e8ebae4600d46506313a67f4926a3a000000b0072769c4bf32fdf027026b7d2913d66b84dd24111683dfcb1028b778fedfe0cba592b03808e66fd546f825181cdfc48df9efab7260475c5e19826d9fc232f442cb0301a77b4d58031e4a017a33a54e506dc58f540c0fa4f014dd11b2699bb2c318b2a271acb1d589d3522d49f9aacfa3068471a09e194d258040cd41a781a4eac54360cb82f88aff03c3afe1a093b8ea06b6c9b9778f8f5af5531fe11ee02f20fbfac6d10e1e3e08104596057558e9f200380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b00c0163ace6c820b5419f0d68837f0c235e3d10119376cda0252b739c03a9d92a7c7d8ff878c3b407604077ba839e2b87184f9c5696a5ea1efd8214dafdb13a708fdf891f0e0aaf372b54f13034ab38bb8c97cd2088ef3fd465c860ebfded20a51828e62994749348ee20b10f71a496092db63ab4ed02eb1f10a15d1ba4107032355b27033ffb2095b035ff1ffd7f48d1182453f7cf8e6e3bef27c00808dc606a32df4de5055ca307845d1f7ab4fb213c000000b002e830464a24915aee9afd887352ccc6c4a1511522652fdcb62fd716f74efafa058d8739c40b521210134ab9146d8556b43422dca5e92f2ece59a2ea28fe26f74b6df0e49237b71685ab4952edfb47c953c015f039474a34e8a00b9faae4700d9dba4e3be2e91736e031c1b837a076500958ca857bea650788975f4170b5efd63a4686f2dd2ad8a07da38634d20ac7d32eb44f8600642d158f1e3d8b59dd26e30198b48dbad0c69bc4c8b7ba0f43c8b1000000b00cc6797b8a0c661c2f5201682841ded0cffb88551fc784161d558baacae3b6cc461c3f718e863030c4f936e31b5183c1517637360f0df29a120f0bfd14ccc326780932df34445d07c0d053fd4c14e912e2d44e83ddb5a931d1b53721b453553a0646aa996be23565a6b64d87ecad149b09b8014392afb5553cb67528bc3b42fd63ed2476454bfff4b48ab7874ee8360e2186a85131dd1edab9a79e7099ff9b07e1a0bd28b7f2d4e296e204b95ef6ff700000021c000000b02b4027fca07dd252a6b0c1555105f0276db0abc6c0e5f178bc9243507e3b3073f4439b298af9b9854b06af7388bcb196e354ccc70117c1dc1d5294478448d9fd11f71d5b706fe55e4a41dbb22b78f38395064ca8bbe84628f41844b5077222a9a5e9914aaa74b68961435368e00bbc3200a21810f6b6bda1a787066eb284a7367a7ac158c2f0e2a873da400b7b53c5d7216944706de5f27aed0d4453becfca44f4a4f5773470366028c3caaba4459622000000b0173ddbd24035d8013325f2813e13da78dadf5e2e4500d468582e7e7547af7ab560432254708a82dec2299ed67f9ab29483fa439aabb57b41b0c4d9b6b7f3fbca2d04335024848640d9c47b5ada5212b3af08e216f65c3184b7ca469b66978e742b3dc5d182b298d029357274e73dc60a07f7ee909753698689e19614cbc8b785cd0282289f90e92ad1bcd0f69620b3620ca3973a039ead4fc96134d54dd01d0ae5be671ad13f32feb26cb20383cb8f9e000000b0047f07658ffa7ccca81dce4c6e9e28d17d3929b65c88e997b457d209e1620a5b65cf5c40ee5d9b07653752f17e5dffe1621cb1a746b88c330b41f28707be2f0b9dce6e73a0ec1c587354aacf4bf967b4fe4905a3ac4d3eb78ab7bddaa1abb844dec30132147f3eda1f2a38e27922bfec1bbc3293311e415dd18ddacf200c1299e4c4996d6a4f42dd0526cb63dd17c503124ccfc06d76c240e297267b84d8dbfa6b39dcbd7a3b89319b87bc8ceb4a5af40000021c000000b0226ae8093f9f958a97709b384b06154744db47b70cc47346e910fde67d8c565e66c9ea84e58f8f9b0b855e7ae6332ea321d85b3dd5fa8ef75b54954d2c975ef5e093e40d80cefa50b4db9a90343ab8ee015802fc0e4bfe5255e0a3837aad44a9d90c76a24c060daf8490025e030dbca8259680c303d7f7a9257f4d5d09eea639050081815079b948769421631f0b5d581571dfa5d0d2c20cabb65356d130e1dd1e406401c02003aeb4932e9341a98e8b000000b00f5ceb408301df82115232f6b151c07fab66e44fc2707b206b9b4002272d1f312e7bc745c39a76dea3e33a374f036a905a10dd6527f7f2f000c838aec815ac98335ed3a86d616af13768b63480b039112ef779afa95ebe44947d94fe8f0d0092f7e5207b3a59490557ea51c3f5ffebd51362e663bf9150a0dd0f3a59769a119263c8f606c33c840d96be8efc13a4a2a61c695a78412af31a4c840a6301afb8a336d9d174c0cd3c1dff5af855897b60c1000000b01a19b2654e2bc73ce95ef2136537191905feb588489a56a74abdf59571fb8ca92df181fe0e8435957eb82b9a78df15f4f54382d5511f914e57a7e4672876297f2a96c43a331d2af468060f2a745de193a094e05e0bb46b34633ff9de268ed2a886a8bcb458e1d93fb36bec80f3489c571215d65c9244ec8cb8cae7fc3d563628b291bc20cc218d545616080ad3dc27320d6ebf97d2c59cea88d5e7473fb2f72ce62e00f82dfdfd1fa9e822712d56c1230000021c000000b00839570ae6cdc597241ee9bbcd55e0836d03c390fdf0fad3edfb5a5be798155fb4307f7f83b810fdfd03b77106aede3f5f28c96e48d19261e4ca4d6ef6c2a2536d4b60d8b390522c0d2added812b785a5229a05a374231a2dbc67d09a62fef973f146315fff26e151a81ce7a94b49651117ce20a8d8e9200a9eee5479b52b4e386cd9e09a5706d043924f2aedad5b6a10f006f53814ea4be7303c760a0938216a74d242cff085ce66ee6541ffcb29e04000000b002a8810adf9335b62833d20c39b034339bf97efc66037d244362bf8e74755e8c8c03e5c249696bc110bcaa1b100922f3b9a8a35e0a7950d95bcefdbe6fd93b38cbe20f9a861d439e9e2513f1b37632b28c851af10dda5f9cdd7eba1faf5367999baa0fbc506498a5cc52ccb916de15822a1bd5af017808449eeca21501f08c6cd118ac07808379b51c986c3cee8cb8722ee2f85d4f6bbe1130f2426864b36c59bcb4e1908dee7f010a391f198e4dc34e000000b004bba465ab8dd924c3db13e8ffddeb88ba9d6419f446b975d86d30de6d1ee20815e99fdc37483fe632511c7e904188acd049820587e198a68558a7433e3a0e192dc90459ced46c167310713898020e93145824b5f60000ff4c638bda042d79dc882004e65a71ac85bd4d99d0531265840d5cae9aaf800321af7e7f433a58b1c3fffd4c385ac5d67226014586d768328a2f0926a3a1f70ca809721437e8c009d4b6d9c264d892eeb1d63aaba818182bb20000021c000000b0305b47c477091f4bc3c08c03774508133133b80e037895b4c8f9f78b1fc1f48af77aeddb594a6441735024e7a7606c06d3555e3e9ea57492d2c729d1aab69c6802740b6ce8eecbd631d8cc5e6bf7fead790973d1201f94498e694c3c03bd42cfb9b3a2764c27782ffd63e71e435a46cf15ac35d64dbcd2c738c09c8fe74e0e94249cac4ca08e292f728ed6394b4454bc0aa266b61540fb730d1ad40f51860b6b482105546580a7d2b9b9ce5b191024ed000000b027afcda05c38fc1aaddee99553cb8e4713c7136218eefc7329cacf5887468e8aa2d83075ddf21e1b2668361610cd8f63b12170e076792443b90a797fb3f1f17508c550ff442124973d23351679bd826fe7d730b3b33afd3bebd2eeaed4c6ae3e46dcf3c3d6df0f357d96e4139b2b029d215b34cb8540ddf1789776114d7b6ad750011f8c4bbbc2033a38572beaa115b72d02a63e1d961824b2ef103cbbc5641428ff05d5f1411dcbc8f38bbd34aefb0d000000b0273bc57f4aefa6a17ddd8b9091936ef38d16b48b459eeded19c69f564dfc9c5e89dc55b71072083361e80fbdc185c10287ca606b310cfbf665764ba9f43f9cdd64d50213fe5d12269c9c4d9f6da8b3bbc019f8bb860bd9de54e2bee8a43fcf9206cf08bd84aa26b14f74f9d19a1f2727258170633570f2e4dde3714256997342d558394886605313be9280892e3785161e76657d95455807d573da840d15d2f1700f61c1acccc13ec5de0c07f4c706ea0000021c000000b02dfa4a21dd2dda4cd6ab24408390a975a5341876cdff88b72c3d0f410d8c8a4ea33b95b6905abc0f7010e94ff842762667d3629dba637edbfc5abd517ef0fd69288be89a0051d7b8bb53b8b7199aea9a9ed5f702447b18ccd0f9a7c570c6c2725e79678e994a1875890c50ca03f57d7603f840291b8bce4a8bb622abfbf1031c0e07049691df588b101e11d06286fe6227f46b1c8689aff3d186eac35debad499ba05f29d6560d979bd5644890fcaf32000000b02ebb4ab24d35636dedb98611fd2baeac5d6a5918fa5a837ece7350fb43a584c00982db7aea4cc34ed6bd917c134d35be050cc200826a1dabcdb7bedf7c87570757e6fb02683f9d4b2f05ce513c6e4e6657fbc9816dbf02aa9743b2310133fd7de2838469f6c103ffd1ab3a147e8eb46d26f5866ce5c0c2dfda7a810f1316049a92b0fd8b4b1a46b4b917bc2985ae94b42dec3660c4804293746e2a7f6c06a5458f1f4deb7441abeccc130b5079fd708a000000b027f7b5d76a62113d1d967edf1b0def9cb10c9ac30841187af17616f830a4667e2ae9a11b890a5efd7d29d0d5169e023b481fd38f0d2fd666e718c1598e39e29b9154e75d28aa3769cb7c4bc19571e6e59758fbdb32d4eb097359f7cf8974574a642b9ca9e7b4c091d2cdcd9a8e8584a90326929b661bb260077ff7ff96fdf729beadb488fb5ae6294602e9da93b657812101209e0b5f1b169c7542b7a8bd8b852c5bc86c4d43ea23fc2f9192f36bc3700000021c000000b0282013f3d9e29812b467467bcf50ab74311f8dcba42a66898c489014ba4b60f83d176fb1c88dd0ab6ca7c756f059a82d3d0c3e0d46ab57537c8a1ce5578acf48008de7f4d1374a2a9ab6c7d20cdc51291f225bfe1a4bfd377339c167a004a727bbd5237414462699ed85782b4add90e5017cf3f9a84cb3458f83568e9ad89fd543c6ed153a84e038496831b5c7a3013a08c539bd3c221da0a55e24afed79bc2b5b0af049a4b52914438a54d2cbadcb0f000000b00b801caec1558a7472aa4299727ae3f394c44b814dabaac4292f0605b4b5941001311be3b23f92ba3eb660f5ead89dd14058c853b7346d60d62a5436307873ca5f1054a55a73020ba9c1b0c8991ea43822f1c140f0a9ad87e78f4fd34bd0a9c6a2dab614af2a1968ffcf57a72d6f6e4a127ea23abd3c168c65a7c814f8bfe1a2ed3893a5e5fdf82d0381f838dc6d972c0a5b62d808b56eb90ed746da789f54de6833968818e0f79249cf4bcc9703c01b000000b01ebca2feac7ddea430abc3d7a4bcc836113e86540a4ab4ed8ef0ab2611f30c337b820d0e9d63ccc9d66d4cd3543bc3ccb6203123ad70e2e5f929ecdec8985dcc0ecae348b95c4e77bc944fc1b49559a222e8a8059b7e0a225ab1398de32b3e7eb576bcd711e275c0051b2a54687510641e515be120590d14d6bb400dc526e27099575fbd3ac8aa9ddaa2e0cd741a1f402029d7b14b5434eb818327fe23e65c034a91b9798f6654048969c021354c4db80000021c000000b002326f53cbad3d5e6f2e5a157f735e67aa6a75eef8e423eb9b2df18417605006dd875e8ca5ea451ea68217a182eb5b3d716bff7f16f35d1d253015e1470d90e73ce6e39555707f2478f7eb168c0c6a9648264e4edced7d776eeddb6abc600fc11e2c9708cfc783a27d1e54dd33dddd8829e7e6868f747f59053d87365256a7761cae602609a8b695473dfcb9e75c6d9f0e05e7387e09cb71585a27f5ff186ec6dc1b4e27178d4920dc0cf6bffafb97a3000000b02ddde8aff9691d48a25eaaaafe258b89cb2a169e002ab5259513d8bc80587eea66bf30017c8373b474ecb1af419c5d54e278f90c4c0dcf4e0ce71d263cc84cd0f543d595bde82aed72922c2fe135802bf5991ba8515335fe5f8e0f24277fd66c54bf2ff1a28ffa0c6c3e35aa30b0ae4804a04c1be3950a730a929c56509bdf5daf974e3cd2882d6cdcaae2ad37a1a7a0122108244026571dcbed28d71b8032de9780693162180fb6dd74a9293a317459000000b0272cfc810b7cb709f818df188322b786fd4703d897511d8024728a853957062dae71a29f25ec66d37fc471b385e166732b8bd7e2adde11278ce3c6757492f99a11c3978310459ae947118207e43f23ab3218542a1d9a1ba122736789aa08b1472445c2f3507fc42e9f35c7948d20520e29a207c9649157c6915fd74a19342854026091edfa8ad8e3a584d62ce8e081892b6b5b4fb6cb02ff821a61becf2e883681c8be0e51220235e601f516702a62aa00000fa400000168000000b029cc08d125a992822f5f6af1a7095aef6c1b85986a6e78352c657d04ad3a09c76637abd87feed48e67d4de205b6aa8dbe70fb409430372d0f1baf0ff8c7e5a4055d65d78e7b1076d7304e2595350bc97c6099f548973c4bd0a53ac9c41213785ff95efe438ba17aa0d80a0ab15d684972ac73b65749a5ab86b8799d25690d4bf79e47f5de81b6ad27a5a65b036524eeb19e0228297f207b88228ad8b75059440305a416599d03b2e67329d306794c34a000000b02e262de06a68839d00787aa1bedd718f2bb1a15fae1b9c1d339c40e34685f25d74d3b6b0bdfad7b980c25100779cdf5edbca71a96204c209003cb906c9a8d12cfffe04310f840020a8437a01ce78c901fdd754b7cc76483226c778a55abab1bc61216a00f88fb823544a6410b8ac9c9d0910855dbdbec81c9a1007746ffebba43e74ee6ca4d9b09b1c0b5e24e0f1fb90222715cf274fafbdab56839cdb538f356c8ffc2663e562773f6562443632487a00000168000000b008a3b42fac167bc707bc353e8b660a4a7d0e48e37b6392371c96548dc2011e07cd9eeda1209c741cb16da83127ca7d35ac70fcedc950afee0b4aa991b0904aca5a7a07806e0afd358b0c8bb94e1239b63228693b429004aa96ee547a02f9a64bce0d7502a2a8ee906bf8b26443918bb12848ef078dc4ea7343726012aa53f4d10faefd474af732560f9b0aafedbc96e206053ef39bb6ab5e628e7c660032113ad259c9ed6fbb52c64ded6e63790b9697000000b0006070e5171b394e4e301f5ea2ef4626b37dc18c75505916c19eba0f6b0238ded34a870edc3ad6aed91cbed48c9773122ba5f20745f325cbea3b9f054d8ed575c344662412eca810a474762312ddc69790e6d3f2741eeacc305696bc5b29ec93ab91e6aecd6540270e571947f09faea3095dcb67367a6217af644d5ffd9bfa04aa92e8ed679252a0dcbdf7b14a1d883a1e00a4b7860a87b9890381bda1eb4240265304b28629cba0709c3ea84c4be63500000168000000b006e0af21f3e056014ad8f4794c94f20d5e2013c900c9f8465e8043ecf8ec7da9330dcfbf2051755f18219ebbeec58981d973bd99dae675393a4f247a5b1cf45fbdd5be2583a0c0a0efcf90fd39161f6ef68156736628277d0dec910e1dd47425997831c78aae309513d7d4118300e9701f1972e787cf73835ef7efab4660284fe319d7e70527c3f669309d195b97e35d2d0aea47e7621c6415711785efecc187beb3cc2b55849b7014eb343df09cf5ef000000b016aefcfb4ba34805d0b74e650efcdcffac45d5beb78714ef6698a1956e0c6dc82c03f2f011ba145aa3f68cb0bfc7b8878b81d7b08fa51e5684a44e66468f565e672cd771b2bcec2b7d0be1475d82cc3088066a074713933dd6820d47e6c3e3ba6e68276467066eb8738b5b25817dd282085c79b57cc1bb7ba82c728697f82eadfe223e44e88e769175b931a723b9a14026457391f8a947c9598c5b97639325eb5334712c71b5f7681f59cf7d5e71680000000168000000b007d79c8a63273c2503fd7adf93c552885ff9fb3d75641039d9213d7237db6d4f0f1ff48b02876527a3bb25e2d7d5bbf9f3ba798b24b4c6985bbf5f437f262268fafe4cd7e843eb8d3c9b5101b5afc56db814c477c80ee2b21dc3c815aa1298389edef419fdf6830d2ed3f310543cb73323c5eb474a29d51622a4e46518c839c68d0ddcb3acd3db6a644fe84dd2ff6eec0d95daa85b8b34a29684490f7baa0defa439d6a75ea98b44e7e3f2690e20bf9c000000b027a21b3be2f26f56daf3258c981e45c044c897de28e4770c73076905a938d7340faa918c9c0d02feb8d5959a7e85ec84365db45fe6324298ddb04698b6fcbeb0c358b363099e5e215bb913d172ebd766fc339d69067bf7e324003e8099a7608125b297a5290cb36bae49ffda86b7dbdd15773b491acfd06ee89bdda0bb207f6e18190c71c450246915cd30ad38f2efbb08e9760cb4668f93975eed5f1bac265735b8f9502f28e94bd8b530d2ae49544300000168000000b02b4389c4252b98d2b2e793d850026d0e555ef7f043b00cad249fce3cc56521f6a7438db1bebbb8aa8d8a67eee256882e3dddc15958cdfae658ea5a23ef2a336e3bc4af67e70c5475145c224896e256d7e5f7f43bec37a3f7097de9e8ad48216b54ce58f4630bf5849231a65b7645817523666bb0a449189428d50f66a205f7ce7f42291d6a24bd30048d98a8534d10ff10c1c498ddba43323d49737fe5051674f8ee85bc97d1a432f037d8bd3dcc1636000000b00768c4bc5bd833df4f79aeb7acb57c3c96fde42b6ed88bbf6b48b68a98d2aadd38e2c8f24cb653ab4230715529d1129f766b7f5bf4b4d619cd6808730c8e8ce18363d4494aee05edd80a9879f2024d6f8187b47b17559a304326e28e3c0b5157286761530c9055ceffdef5d463f4da9417efa9f033e97e448b80cda97eda81be4ce8beb3be4f35f22ed9277b845e2d04244691a82c4bef544bafe6e3bc9fe8d259196818e925bd490561350456799d4f00000168000000b007dc7ff98229ce22ab2673eed239a7e1f8ef036a6c29e24a64772f06d4c25a65e49b4e68880e3e71e20ad1d899393a5e04a85bca635492a65368d7b780c65abf10378887668d9baddff28c7a29de5781712b3bf138506781a8049dc6a65f65cd102887e79e99778d615243a78870733925ba10c4aa7db71a2f50f7ee50beb71b61c1d94b5f0e0925eb7509ccc12a80f60b1f2c6cd87da8e746652ce4f096126f70e12bb7bf8f47c9acbc769d07246d90000000b00c4327c8481cfdaa435ad65d5adada24d863432d395c352f6dd5776cdacaf19255c4935a6277a4c3b60e67409dcf1092aa643d2aa9a8fc0f58188401ddfac0ab28dc6a142f3f50fcbc9cf114298c66691280115890f08319c5e043664feb9471bbec37c8edc7b5b414f0befae87efd9b30412732648e93814125ad5986f21242226e3be95f30e53cc09f12b4a56934cb17f9cf93b7377a897c0d2a9abc0d9af1bc968c6d1a082b50bd901e16250e395300000168000000b00a6f5fd1bc6cf41dbb48301f85f7aa4735899451d356447bb861b00ed2751f0136935de52217d23b1aeaa91f310525c030ae10f9043b184d6a0d5bce4dbffe391a325a69094d225bb9f4c48ce115ab3a20761432724b71f797aa2abd689a2506c71b14fd2e97298797ab1267d0daecf624c5d7c24cae377a9fe5b1a8c1aa29ffa38a31b6ae98edcec0df148982d902f40ae2f2e6cff9e4a431563782e2206e626396712ac6b543646b29fd3be50b8b17000000b006ec5c91342357a49f973774a61ab514bdfeb66972fc2f702a825cdd7a2369b21f8c94d84292a0c272e118d61e8e09d1858f7f89d6be6b424f1379d3f736acdd4ae5572afe15abf6eff0606b2abc54ed0f6f170260f47f48a5284e3f72dffbe7a308d6ffc8ca820eb58ed488a6ab03ec0c072e042ed4a1064553ea2956449e4646212714ac836399a445cd0e0bce15c0134669f7ed3d667c3166e845de652ebaebe8f99c65d4555effb102ef0d5f175000000168000000b0145e3001839a08fbe62f4002fb2a17860afff6b18c01497e7752e5fa3b991c7f3bca2cbe9fbd552536910bdbc301c4e885ef615660698b245d8cc738fc12874c63b11c8698b557bbe62759d386560289f60cb6400ea32b33aaffd7251ec2056dc49686526a75191520df5dae58dc33bb05cb4fc4f2012c90133c7880c6737773fdf096e6e6e79a2db1eba0e920687b0c1156e26a9c31fdcb2705e6614e522a83c779930b554aebbb9e29455aedb017c7000000b012306248d60e6026aa247fd833a07e49533d3e1b42b3e8101bee7dc59a497db5a87398d35dd1b61b9ba740957e37b5031bd6c3db2c1653d29a30683a011a63cefb317e5a8899a5dcae4a439fd0b62c09a4b3ab2e1b751e23cc34ae295a12450c0153cd2294addb8084d9ac0fb1bff779173d91d09a50c96487a7b091720ddb6c4caabbaabd02b8536f0a4e292968e8a9041ab61081bd2e06ea1c6820b9a262790aafdd22f46d92cfa52d27b28777e38600000168000000b0034be26da65e82af5bfa0535efd16d703f75ac653f86fa96baacdff5923cbdb4c6f6eebfbccfbbe408d585c5ea4f4bf04c02a003852aa858573513f81410f59837684dbc51e2daf908cb38c17c4a03a7476fe6711412b004af9b7c375480f2e4d0b1f142ed5af848e671d81544714d1e0f924b152071f0655c9889e56e303f16250eda603542a39f8d1f59e02117067d1f71511291414d207b7c40bac5ca2f2356f7defd4c50df482b63e2771a092426000000b024d076d6b35becef6aeaac4796b6d828843e59a310ad056a2566a1d26d27545d62c5a0c53a1cc2e037785b750a55268353abb67bc8d57526b7c91d408c9ed259d5129f07a5cb95364fb9e49c96001125fb4511965f7365bb065205465c15038497ef9fa2b98fa3cd8ab4d0f3143e372c14553cc11b1d75370cd5cfa1412cb75a0808032532c0378d85d07da33b632a2d2e7af9f5916d18630a8bc7aa2f925054d9e82800ab76834e57640ba930cb601000000168000000b023e1598a7721a961babb637e6524e59c33dea50387d785c78d3a575f72282866862c53afbc8f81e28b259f3bfc702a4f655cd1deec2114f42f7ed62bae580f4f4ff947ea7e3df1d45e288507acc76263577b175ca599e42a0940e87f38e9ec2322a85fd228375de88d1240815ecd003f11f01ebf31d356d2087be76737dd91852213ef00e5e2de4dc33e8bd912dd1848156181cdd75180ea8ff80bd8657bfbc829f2eee0278f6ef2931586eb6622f97d000000b000a75d6c4caca13042d7d0ffe135e4b1d6694e40c343235b21f813ade0219fb1e18fc68da3bbfcceb1fa3e4538754b804d2d86dfcf8c4566186055bde80af3793c09fe903c6760f81634f5987572cc784cc4345293496550ab0a3b64ee198ef350dcacb5112ca8dce46dd9d10d510dbe2af8827958ca9126e4c66d331bf9a6694f44795135104ce3ecb869f9d9ae1ea328905390096410dd5523f9db4ded91ade15421264b091f5de5d161ff3947d35500000168000000b01dc49d9e0cc96ebd3b7138c1f03fddfc9e79427a43e01d30a54054e8ed9d50e425dc24b6ba71b47b6a0fc1e2b827273654dac3d95e2737140e0cc1e34ea9beb033470f48a2e6f5cea6ce0545f90015583ed5fce276d318bf4847a4dc7dfa937e5910d0754b3fc67c0d15c499c848d486098c20c8a7b68081e17bda40d7c100675f553acce59576c5914c5906a34519a215a9b9e8ab78bc3ba9b6a61120d02a312c3f5c1800c29531c296cf91ac3e37d5000000b01de09df9918b9f2d53801b6b661a0e4cf09d4dc5605aff95448034ea0c43181261b7e2c8747ab7ee1b39cea292d57932a1d588fdeca9d1cb5776c84ce8044319c81621bf754330ecfd22a695d433cbecdbf1530913624f2759ec668ff0b3c15d9619517c3e3dcc896c4c9e0506b61b821a5809bde006f8d07f72ca9f652723b52e0e66bae547c47ec95a6fc4d6b202441287e536ebcac2d85a0f9ce5e3b68964d78600d5d6ed81422e202ed8df499084003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b006768029cd28a50360cf8ccfb521f8df2980522b5409cc07f57bae4c0e7f07c302a82a4981a98c94be93fe056a53d5d1b719447890c7a2e9786f16f70a31b8538fa9f6970d6e83893df80db3beb681103594ef187e233f2c6659194a07ae4149bfa94aed447e576b09b02c8a0df188b1070cc4a1c7e8b7852b49034c52479c1ed243aae0bda94aa08bba7e03535892070a25d7b9481f8f07047b90cb47c6cddf183b6246d6083e2c4dd086d98f71c0ea000000b00bc536816bddd91ccf851bc5a3485a1b2e6649809ccf0f67e7bb599892c537bcd106d10f021040a5e2d2721f2d7eaac3ab8da6838e8cd9170b7a63e2f49f94b0371d6a48fb4a83a11d4b457574d20a5db86465330df0638a813e3352b67610bcd083a387735771bd44e180d7f88ffca2127e6fe313d9372ab7e8007ddb18e7a5c0b3ffe689dd97ba4c1354036f9fe7f91afdd57059798a982a0269ab132be95fd6946a361ac9f42bfaea9ca7bdc49222000000b028f82e3e673869ada81e80c781195b9b824fb203eacddbdb72a33b4720293257d6eeaae30d183598484afd0359c4990daa5311c7a688083b76775c8f1af7bf83b8d3947c2eb986280bddf8a2566013b58e8d9fd126dd8b8f9afed83201582b521038c136aa310c0d83549bc9c92378d820b4c02ab3d9a7049de3ca8d7a3c2c6d0ee09ca69f49992e2ca7846195414f3f00142e5c2251e0cd61ab065d184a425c6a7826240543aaca90e41f26116fdcb20000021c000000b0148649437822ef41d5c1d1141143b616a16bee2b984a1c5b7ebcb79ed08b6888fb4c7e6c4480715d5efe6d9fa6564263ffb6670150230c2eae30a77e0d3f20689f65107b3cc4ef25eca3d09f61e7b07e1c79fbaba39c793d7a06494457a5213b40374b7b474404418430cb9b06e2e4eb02045cd1a3b0c1b7726821ec9fd440d9029297fe40121caa929726bd408a6d960dc3f2bd085d79294d73b0df21ed844665d081a638f34a600c04194232ade860000000b0252dd989a044b10603610406932a6556f2b7e5d248e6a6bfe3d40b75d5d2955977c4531e5e00f843b8b1654167096420e4dab5cb3fcf7eb7472b73705802462038c1d28d285952ff95664393b36cf28067429ed6f8252041e0f99f20851b3a52434da96449835ff65453e045d1f305bc1869824c6ef26416666295dd9bfd6d725230a6dbd8217c4f5e091e55358aa3221a2b31114bea9c96bc17b2cc8c2636f3e7f316b2d9c73137ed2289329e02ff01000000b027ee0aeb5c02f81c5fc908b8407c5a117042e391a332b299abe65ddbb174fa6d525ce1dbc42bc34fe0735e3df3dc31b6dcf767fdf4f72caab6fc4380ac58185a0a2563b8dc7566ec02950d1b45d6383aabef90e9fedabb88385104ed1089e9b498540a9eeb767c16528ed74f266e599428ae50bfb856cbd15f9c5bf59c038e5fce0171537e8d76622e984be41af036280070a13507dff7d2d01c43e11e7b24de1126ecd66a9fe3669e51d153b7636f520000021c000000b02785d7d8ea54e2551312340d0cdcfaa79451b70f0d50940068049058017885756b3783578c62913420364037346a7e21101c5e73d47f4934e6777034ade7c8b99b0d6cd2430b8e729b300728191261bf847c458d41b73616f60c75c028127584fba181cce64797b0723774c9837761bf28736179809c73b1db47831bb976f611e7bde1f90306f64914eaf41257df861b20ee642537c720059997bab2e163ca445eb4bfaf46986c3f6b8d9d0ef733665a000000b00bddd4808dc88c60c27241a7049ebeedce2c0a3673fb61936ea6e1e2638c27f892820a49af91d7a8d51adfaaeb659a8d249cac1c4baff0a86decae44df49f2a447a89c8dcd96dea1abe6ed6bd21947f1a6218892eb87b1738cfea9354f13471f0001ba0612e6ec4a756e54b690bdf74c17ad49aa2f06d35a546531433bbf8dbc99f88ba3efefb40cbd2b25b3cbe3dfbd1d5188e64a5447a4001f8a2c3b3f6aae2efc082d294a1644326370099c201dd3000000b02526e383d609576b23a543bfa03401cbce4fdef48ad4600ec81932ed67b2eea7a928601f76ec22d9786964f389a1cd7fe34339175b3108d8a530f82f160a3324e71782597ae842bc8d101164f3c19545d76d6f5389a3cd37a3887be2139c6cb1cda6a7f45ee5d9f16673e82d41a934632932100d24dc1fcef0c10cc0a84f79e15abdab22074350b0913a0bbb289e84951f1308a34ee77629c0ebf2f301d788af0972d045ed3af37317ae9d0f7db6f09b0000021c000000b002488b885fd79f0ffb588a2882e7ff5c78ce11595a429e9c11ee1785c7c0e68d606d6984f3edb61c77c411319f81c5c10720d2a502ab4b10d5e3fc6c2e978af508cdb7a23ac5e03d3e9017484d5e6076cfeef00d61d69d7f1a00959c0ecb8df673cb0badde6c70b402065ecbb95adc0b03f80c391a57d4823c860b77b778c8645678f5df275e59056249e02f8913cb110fe764d8899f1ecd439a335d1b0fa26b2aaabb001cddf9471cbdebc6381ee00e000000b00e56eb7c3fdfdb656b279346152bf0997ec1f2618752ce25c0261d32785d6118af312217efd7aacafacc0abab5ca5fb5fd2e91223c1d44e198d6f9f921fe7dc4ec7c7beb64322a06132576e49a468c3eda011ca5f5ce2ea4d1a6809db9b11694f68d12071d4eb83dc8d843ce7f86c7aa2a14e423ca0ae451922a024bb239c050c99a9bf13cc0e5561ee0f359cea922b920dc30198fef34e847952850f6caa5ab1a218a1edbbcc0eff93a97a01b63d24e000000b0014d80949734369641f807402bcb2340abd10e5b0b157db1a1dd3173e94674b3f36154d76f760405405600cae6a3cc31ff1c8827336c7b1cfae4a3915c82dc857068aef86478ad627f5abe07f9ea11453f2ca805c5065384347bbe4067bd4028afe098065de8872f064efc88a6d5f2122558780f05e2300a37feec46eb6de234c53b33e178846039f9d91a01caa644b50735b3f1ce7f7ea0a9fec8ddfec6227ab97148cceda9c5515935d59272c312cb0000021c000000b01103475dac14bc9d3a7dfc5e2a04cf35703b1f609a792dd9723bb24644bcefa63fb1cdd56bbfa7ec717caca4b78c315708ecfa0ab548f652d13527338361ddd727b61d5aa8b3b13fff8251dd2b71d375cbba0afc92ce474d0d1664fa0da5212a1d1883e3165b97e1f564786e6a7693e11a97ead8c64ba2aea9a3f609de3181289608bb440edeb7635e5c0f2e5990bbbb1bac663ba1856fd2ca6f1cf07125e137fc310cbafcbd40cb82dcc8217a7ac9c2000000b013cb41bd0f6ff802d3cc83e3234640ef1d0016006cf0a15f05c62dc0f7ef33844ec287215d566400e09307ba827b40c452b07fdd0e195409b7daa2e32876e26ddbdf7030f274c85537f1a347f4ac8d7d4ef10b194bff3f9e9240cc996480749b4249ffee57eee1c6893953663ac2ce8c2dd9f502aaf953ae540adc5884520f2ace42ef608837aa4aa29a4009d861849b2a25f5cbc6a9f3b78b4bed1d0b116abbeb72a1ca0fea0d97c8a8aa07c8f1b872000000b006015ba442b8fa15aa0b5cb0a5beb539fc4858fee983c587bcb6d5499d52d77a149222d8e8e711ec04b1fcc3aced5fd7f0b096fd7055fd6b8c589cd000060a2d5398aa31857d61f62e0ce22da89e31eeee1d3d57cbe496559ebee6391b1cf301a0ea09dc1e46116df2f779b3bf5b80a2236d8415844da5a435248878b4a6bd545dee8217a6e8d038a14d41bb51ce8982290b12c23c31c856046d94d92fc96bead52270172ed40b131da45aa9e39c7e150000021c000000b0104d01dee7bd9cfe5109afc524bd87eb95d348484035d1e69eb7ec4a8964377ea407ac7c14ead237a1cf118300208a348320e319f4f2cd48aaeb9f8d896ccb0c02efcac6818d02e10781ca37f308983902fd38e6a84405601b03734d96c28bd7cb8ea430ffe36777a69f5fec14bdf1a82fe675d8206be460689eacc25812ea9c3756d7a43dd89b1b5c7c1b26b8fa39dd089c3dabfafd85aa08adec0e30d08888400f1cd7f41ceab010a98d5a02599242000000b01c9169d41291b77d9ce19b0a054252ab7b726e04fb1fa0146b66dbebaba9285b26298ad390015dbebbd50264804d2546b780a5f3b744c41094170c098a8f14452ad149686bb20ef3747ef0d0ff40bcd4d0c804766567bce6098605b2884520dc2ad7d1ba403acd215b4a3c598b5dbb810307eac876137461600886fcbde5fc8db360b96635544493d3c79f5bb44793861e16c65ac787c35c693bf099dfcafbad74d2a731e9f8368db921ad307813f0a3000000b02081d302b43ba7aef8d05a8678a6a1bef572d3e44cfbd640634d03cbbe896c6a48ff64898b2850d2299bf825f9ceb42dd65342607ef86a0602581cff36d8f9c2df7792a004744a147f4bc17dd6f69dcc4ccdcf6c3830162a71c136960c235a96332e7296b4672bca291ad7efe55ab81405bbbb2fe6151f6718d17bb5ec43a3eaf6291f0dc6e3271a785760ed511452b81b33f6de6e2a385b36f6e7a0724b402b781b688cb1d0f622aa54b68b119b57440000021c000000b00128255153a773decdbb15b57fe772fbadcdee1561dbf3e00a2a3b72db48a7a197ba156c9ec1780caadf081c2effb4641a78569dd5fcc0ce028ff3ffa805698f01006ea126d45c6aafeb331e63e98e1f80e21d04548d6fdc8315b81e716c14095b685b9956eb0edf3f6b88108f733eba26c512e57c6f4c5bc360d761a7154a890f06bea3525f00c4edecc158c5ec58b61642bb774fe11b07dda17b2cce8af4a461e7aecdae5d70503635a197b09d9692000000b00810d70ba15ec16aecb6ed9ee190c6a98a77e6cdacbcebdc0a480d8a0a98df1106b30b1d520afb283f7e3837218a27d51dbd139980a128b2bcb1e04a24bb8aa22971cefe5fa0a5527e409743b7cbee60ff196253610ec6c35390c028dbac265edaff6a7d4d3d024c59be940438ebcf74218cba59f8d93858b6dde962e2ea757bfb4581545736ca0cd21b777b302da110261114d4b2e35d17076ffca1ac3c76ddf60b8995e7eff212206e4a9867d95e60000000b0287065b83e3860e5b117e11c28351c6eb3f3e276f0a8fdaeefb06bf86fe1dbd982ec4c6565ea6fc66e5ee4a17fadcb5195d40840ca3979f52d496027d1421a396aea9e28d77fca403a42620fd50a0b05a754743ab14d0c3dd4d11edf49193e3681fd7739bb3234a108b9330ae92b7ee62a7316e2b446fa09b83c3d224cd6bcb450152c411d8b15c03538b6f5f8e444872e80a518f74762094cb7ba08d7f2c57e32eab20fedb23fdb92d5b20f483631cc0000021c000000b02751524b6986134323e8aae7875db506d4c103de95869ae6b413fdae6d59277805d86cc8b443d620bcb15c4a2539b3088e117d679a6ead6d1c047c16f6b706d07c58f96794ffa1aad2ee49d63b4f4f1e3c19ca0d7942220628375a761c34c4be4122b1beabdcfb4162813447b4abc7ff096372cb1d6d130ea442dfcb4fe44c01748f71a45c7b12bae87a96714161adc20055b691048fe3ff89193068bef83ff2c855b1a591eff0cb56acf3591d571d98000000b0102475f57c8183ab09e64112d29d17bd1fab79efc5a13175365d42a53b893cb315a7bc1fb54bdde71e9fd799bc160577dd1e2cb64f8f5062e8ff6f7c48f081f3e1445deae55a285a54471dfc889407cae7c13cfd2797a3d6cc7579f0e664fa5385d02b4966514564391bc17497c0166c2aaabcd83dd15efc4381a7ba1a9b06c179c5b4b1cac518b421e848d1d07849d5033ed8c466269979223dfe180ac1e77612c9fb6e844a2c8da65c6450e5050dff000000b0154cb52a287703dd50e2f0b71078a531d61f0b053df2fed25eae6da79ef187623eb02db474e383e573d4e27eb745375d38e47b57ec2cc09828b89ea7dbeacfed617e55df88b35ce5eaa062df2b1fb77b0abf7ae693d1d3029a96f397152edf3c0875d0ca5d08392be285791a995713182b4b8ee63d062144c3299942a98bc37945e528883d313d3a922b352f030d782d0ffb629cc648e0a8f7d3fc331fd89e4cdac71d5ece04d7b321c23111fb6167c400000fa400000168000000b0031e51040e467f4a1ae805f92eb4c9ce62c3f1f71fbca2427618d1521e909d0a6cab810e571646cfddd139f6cf59c2513433a19140dc1494c5c5750425a41c485fa7de41f036af9b6163f4d091395ce5111312fd576bd8a95a72603b67a0c4892aa9a063a2bcafb44a02edff52e361f103b787ca86f192857e0a47c9b60b6c53ff8a2673955cf8da160835923e477ec1111a6cbfa3fef6c8005c1df1bfd81a200551fd5c1e001aff6955b246885f9035000000b000d37f011516bd155e414e5ea3d04c1e100c6fcd186ebc04b2dc4dfa93e383673497530a0fa2324d2d8fea6fa1bcaa72e1facbc60ac4e33eaed540cf8de657635fa3a8055499d3e8e6c067331e4b96c9b69b27ede9a6d0d2faded42ba34ad44807dd80296b75bf10cd1952bea2dc44450895f5eb812d1692af24a9950ec2d4f4d2a94fb07b09c157799884dc4b0c582b29104d25638116290fa83b88d9d8ebb2704a861f41ea106047262b211403021700000168000000b02ef3b6363d7785d298d4b15604d1c2349c97a817d1ec4fe3e4baafbdfb5c34424bf1745d193807f7bc0b18a59c71efce7abbda0370a62db44b9ad973153932302a1a0d977fce2ad416722364d2443576d14e8d97e4c5e023f31d2cb88088dca8b90c8bfc619bcdd8d6a09b13e5d3ce2923f442e4ad210c0bd8f9e037e6347ac066b00c17010e39588cac509aebcc2448269bc399e5918ba5c4a40d8b8ef1620b1bf3259c4503833c5f26861fe79782ab000000b011b64c695112d84b8780ff647a6cb4f207e18b294ea9229d46dec33dfc3267d72d893301be63e85b2ef0fb4402931a6620750651b2e14763c1826830e15eabb89065f407d0082908e7f856df328f0194421b322945296863f511512153cbb1ccf12d0acf3ad503e4c5a007c32e35a3b71825d7070278aa7b0593da51a157c79911b3d5a15772bb27e01868d2b7645c6b05a7d2a6590e3a9baf20c4e33d1d489af15f589749f7823576697ad95d1e55a300000168000000b02c296cb94be9a3a6f22371026d20cbb69556c8e488dbd37ee4dfc8f5b3af7af4eec4389c8bfea29ea3417898d9a4e0578c5b0764bee3f8fdb12b621dfed96002d716be45895b660ef003bdd7a4d52ec88e0205032f3369b72c3d1cb514bc31fb4b457a920222b83f3dc892cfa7605f730ebb6ae7f653cd364521124170fb77156982090dcea17a54180bca30f4e24174195c93b07c210706d1b896028d49dd367e4569fe0ba86f44432c7e814ffcd0c7000000b000461ad05306aeb444ad6e1fdada2057a67d2204ee19ee5a2270e8e66c26ed95a9ae80245f31da836117c20f04dec8faf1bed2063205fe44de621a4d2936ab6071f4257d59f46348e4f02169ab202942b90923fb8c6447ff4ee66d29e2a2d0a22f5333eddf287ea8dd80a20167d25fb82697153732013ac2ccd907c99038546f38cb6fab1a29beea6c909492f4bfbd482f7d9d7d9607a62a30ff2980d39b18dcb3e1cb6472f5357e54fc290ee245e60600000168000000b01de6c6cee479a4c5bc6229f411a291c94940a941d27e7e6b9cd442568037058add80918bcff711ed6728e37c90ac55ae87085abdd40bbc3085f23d852d8015d6d2d7a72117cc62acc5153e0d67427567ffefb19abfe17f99fc6e82c4964798883761b43103cf0f9b4803a7f3e903210b2f9f20f705d6a44b0fccf858f1cac066735bcb3ad3252b29fc70bf22db14f9f10581b774791c5d78325bc5fd40ddee3dd518306191706d2f7523de259f4d5c34000000b00b8ce68f93a532aad8809c99d3967299b84d391f365ef4028cd52d594de946f8aca5313082e9d8848e59d247683da8f0df1f53dab53fdbc512d6ae9fdf0c14c34fde79087518ba3453bc6fb5e96fca87a2f8dbb6ea31d805fce3662fa34a15ded99c0ede2f544ac730f2021ab7db4ae508ec844545d16ed99b1dd5837d3ac9f988aef852accafc1c544b56e768f7e5fa130d6bdd8d406be2c37e7e36d98c0b998fabef45b837041764ec32a059cf488d00000168000000b0048564af9b9683bcf79c6d9c1855df2c6bc1850f8dc974310425db324db55a15ac9199387c02a08325e4521d92b2b0165196b00ef00a6a5b90c2455c081e2bfcf5ad4b5282629a405943c44a546e77571e0a5894b44d8267890c9a9c23d6291df2efbf0afd62b317d2c7d99e3da010d30f94f870e0774b74e2bd522ee81789c611bb9bfe9dd039904449e9631066789f1d2d7fe021d8faebf6d479e43569c854815a8daa61c9d22473bdb76a4cfe27e6000000b0261ce530c644903d323c8795ab0bca1ba312df7f0d3541235c220cbf30a29b51067727243f824a65b39112f4f1de8deffdde10c1c747b7e50281fb01f9e9dc7c739cdd4be8241f85e4dd3ff49b0e43552a5b78e740f529700b0cb39d9a6d203b2611794bd65c3b70855eaa32ae7cedd904a50053de6f5d15248e47d653e5d585d9cbb6895865c5e1810b25c48ba6bd7d06f85df401e323b1569185c76c0d6806b0d0f707a710a8928f0f8d082596157500000168000000b0093672f0cd0ae7a0ab38e9c60c6fac81a7a19e316415391b4f1e6adb563e577e48810e1aba5703256ab5149209293cc30012cee0a0d5253f883c223a262f1c2a9467319267bc476467ba04c97a4e863986c69a87bd8a8e1df5462f821a6a0e528713765a76b0dac4321e9eacc5d29d1f02319f5796b4110bf6a9d13d20307976e58fcab3184fd735af270bf1196bcc5f1665366383be120f6920c39d040c2b29b85d7d4989b5723bc6a2eaa1a5104f13000000b0144042e194f69cadf6b69dc8520c58edef89490b7cb92fde63e641aace529043ec4d57abe9a179f21d1fedc0f807c22f0a3ee979fc6319832015b594f19259c37d9f969a4cee3129b4b3a41e2b07c4456fdf2d1ed11b984f76fdda1f1b829bf1f06e1289d88f73e9e5463d935c4e7d160b3e32e661e628138cb03c8acb09977bf5471d6b967088d88bf612276ae2eed60f4910d04866537863a422d51409512794d5b49fb8e48d17c5e3d04188fd7aaf00000168000000b01de2c867ed5b8402ef91b3dfa29eeecb7b7a18fb146c950d3999a00c5550e12a310ee7d2afe72d629965c4eb233ebb2a75e1afad431799f920e2ad94e56f8bd175802bd6d97eaa7b41a447f00c7495bef02ba6168c055135258fbb77fe02fba817da648084b4d76848d11e077763fc1a1ba63ddd52fcabbe3cb7fd8eefb638e371e02c1b380ba7a3e416589f79519b3603352890cc251fde1d1e83b914d2d6bc68e15534b3b505f69e126f14c5444056000000b01dfc760fb2ca5d4e09580a1b8b9654c9856554ae4bd41df035cfa952a0054c21a2c3062eaff28d68e764eb44a0a3c1476975d9f20ccbd8bc17644fd5e585164a6005b2f238c51f8bc668a100a4663dec1243703aa15e4dc747d0fcb0737846f88bc5d020ae6bf0636812feee7e49beeb0dcc9192cb081b5fc268a842d37cb489aedf6d1f20423568f5b94f084f3a607a163981cc33e8513f61c5b1c78b65611b9047a9646c4dd12e79a709a9428db01b00000168000000b020d955d8ec78a29a73f7cb029ce63e2cf639ca0138de833055bd2f719e620969219efd20c90a39ef13338674ea461aca8dc6d9c9ba106645d84498ff9892379422616b807e6a97709b1fc8e57e7ac128be464296fa5a75228ce603575349a4aea5a389261362bb8941c5407ccb12a8c325357865f7bb9f6f14d62b8ae7fe130051ae3d20be185e308ea3550a20f86af80841567a67338501828267eaeaee93bbc4e112e684a4b1bdb2eb56ca78695b90000000b0049b8080c60e519e16c560eda5b49deec10fdbe4763c4dd51304dc6cc3f08e65159346fd753ce35e1386553d0f4e58e6ff1572ed1bf41d24380799ad13c8b673bb30010ccec4dd95af93762753a567cf145d6aa539eaa2045870789f455bfa5b5d48a21ffb412a67d67730aeb0c4eae11edb25c2b3146a4578fe066576a0e7a5fe9761144bbe4b98d87cc5094ab25e931c2f50e46dc5b96095c93e5647b70034d9cc980a60174ba147eade7e57fbd48500000168000000b02ad88e27219ea83385ebc8d7b22e12a56447fd8235f6e3d2e52cc5fc0695584bcb9903d92702aece9d3c581a06824bea6e3d2250226c071af5b1d04588196954046ad585b63ddf3cd5d32af42409e4d49c9a9e4ee85f108ffb213d951fdcf78aa825d1234d112bbf52d10c4eea12bd431b1d1362799786be967e589fba49951ceb39dd3e5760c1aba5f8458f3c7962a80ab09a584b5d29af6632a9b6b2a8f85e4971996b31870e136751e0c6b1919463000000b02f0eaa976e9f8c1a5ef60c9846232280a167f3fc424d85587de9dd5d266e4558493d7d357b8be022d12bf8a56d7312377481bc43182795ab1f82dcd7179baaca82a59b8eac8f7c79f38275f80f0a5b7e7485e63e54302628f12bee1b29d2380de0a6422442964fd3c99e46da6df0108a14b9a9c89266d34636af74412946a5b95f7ad54d796b90c84963b16ed9be4f3810af5d840706745ec647f38def4ef48c834db0bfe0a9afe0f35b4f8c3a87a46b00000168000000b026e0ca1bad90e017448c6f0e3ea2b9e64f6efbf840ee98f289ae0a4af8f6339a84b34eadd8bb407a4fb93c1a02e55902fe3304397fafdf94b950f35752222f5895cab678069be51ea3611fdde9c423028082e0b18edd719f7bf9fab7debef8c9e0800dfee2c4eed127c44a26f3131f2b0228fee1d3b47be325ceb5685dd6c8a06b13b320dcc87da59a59fb0f41506bc00a0c2f987f047a97e6ebc28fabb3abe568d9bd2ecd16c2a71931ab9ced8c9791000000b023fdac07533eec9cc355d41ec2fc21bd97298b955bbdac636f77ddd02b06e42819db25b2f8a85638676397fdee1bc370f1122986a262002db4ff1b78fcc6f07641137aa5213a6fb8437a7bc72172353ef3e50baf84885cfb4bb936a8b245305ed4e68c3295c4f7eb2917107ca661ec9928f027451c9eff1e20666522e963272c4f282f06fc24ece3f1edbda471194a4802d661d25fbe545c8e0e6308bd28256c7d3d333535639803c84347288920a9f400000168000000b001fc05e0024a65a6044e37c3e9806d23958f6d2cde17940dae129d6c279ba70686fcdcc5b17b5e338a1cb39ca5d2342f4de7ec6abc68d0aeafd53a8dc022fa671ba2a6bc1dd07a34d6d0ba037c66030ac608f15ccf2e1e09b602994f407abcfbf167539c952cdee3dedeb33dc791bcfe2684a2ac603108364063286e54e4c00c9fb5426b0b7fe4a7ca3b30555218b8f22f6994ed23bb93925e8036e2e4d60626246011f1dbe620dff6b1fb14ef583cef000000b01078effac36e0d27de210803d05e546be35fdbfbfb837ede87ac4378b5ebc54b0f3d6edf21009d811f39bfa954c1aabe0f56a9fda5cc07fb6d5df35d9e6d437fc013822e7de1c9d99ecf3ff25e926da0c6db680ef2f4d908d798d907c6b9031ab638f6907c2db2af8cfae9c340bde76b19c2326b1caa1d80f1bf1c94d20cba4eb4c34c5a186dcd63cdd864b2a723bf6919e368ea805867db024332660eff999d6e0595be6d89d706b52a6f65af91040b00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b01be9ee74711cbc8664fe2fa9646d8793ac0f09512cdfdb4e134b02ca3d36f772b88903d1790543edf47c924f2e882c4192c9b0ea3a3e380bc0ccb23d008cd997f417736f4c9c42b1faf076d011801a54c3123f1bfab79753703ca271571f1ccf8b5641aff77512b2078c949fb29ed91126e76ba568f7a6af5012665b5fb4a5fa5bbc8b5024a5686a3bfae47752c1eeed12092ba9ceb697fc5b4e1b03dddc753cdbcf1b0455589d510bc8f3516f259a24000000b010e9c632bc127830dbf7eb07b4910ff4b42514724bd1493b2dff3ee4758bea9739cb21b08edd660a843ff971b855359081b7843f93c114a3a0c1f7b6967870702ed3f112fc4d0df79264603b5af87158777262fe33a0b6d3913740f86d2cd8f07acdfffda470388d881396d37ece182c2a8b1758b364804dfe674f823fb8d9c72c6b089d067f02dda109bd2f7c0815f708c5a8d573a06d2d25eee134769e10fa6a35716995e0c3350113832bb2b6ea8a000000b00927659b2928c6708a05b10f8f8632a82b34c30492e50af062c642af89cb195df9775b4d76818f7c347f3ef43ddd0c3b0290f2c6e87822e235c625770d81d920b4629125e24bc9b609e84993cc67e0c3b13ad61e73cc6c3aa9402eb3d4a8c31b34c1fcfe77acfd0dc9ab6008ee9d811b1f622929c6c941ef78e18f4c7a76cf3f429d0b2e100f1bb6800ed0c05d6950ca2b65a96696e480a03c816c971d4abfd077861dbbcfe4883d17767ab62ad2cdab0000021c000000b016d94b2b10e6a6441ae1fdd147ada37a7c00a7d4e81bb9b94adf5b5b851db1d3beebbfe8d19b84836f147d09445c11b5ef209063ef0ae740ea07c8985fd74970d57ff66cd84a77a83c7a07380ce3544e998f0485cd8b64d6500c9b22954ea913008d5b5ba826b4133cb6a3d14c91177b015eeb9a39a50c4648aecc8607f8f3ca9aee33be67adb7acda005bc794efd51f19c01a6f3372344dbe0ae658dfcaccafd59f691bf01727efea74f0b5772ed10b000000b01f3490f18947b0d23476bf3221d5d32e9421e326652b94b52f2881ec19cf64d94fcb7cd9aac95f84d290aacd722dce577c1a82f4e4b78bfdbb299a0195032f0cb5b3526b33a4e4f7371db6c3fd6f09a132566ca10d13da1f43d58cf7a248ed087f226e6e75da69883e1824fba2d1b5f8090e2d653ef4ed3eb820a81e6b3f13b47180502529c61a9324b80cea0bf7e0cc20695729200fbda732a86ccff0c0aabd36b7e9124b651732ec729cd20c053bbb000000b02723b78f598dd1863dbc106e2f0adc93864ba7cb0f04a181e41f5aec7fe944399ff699962ca81e72004f9a802446155e867dfb4817349aa35a9e9578f8f68987020ea1d1aeb0238f7881ba228a9ee54d3dce5d22734bb797d4707298a5210cea778cccefb066a8f42a7474dc7aaa88b8072e127e5d0e99248b095f23ed6c8c74119745a1d6549dd8940a3e2f3145753429046357e74512dcdcfa0dc28add87a55ec72e79596d8a90018638d59f53a1f80000021c000000b00879c17f276d9e118b9348022b7cfb305580a11666de198f93328141055e77020032622c7033cdf19e5c761f13d15b924f5e87c605630adef973e3564e998c5651dce0ef9b8372ba6d0da9f03d244e701978ed40b725d5cc705e8593574f4be51c4f05454b9a28a9ee0dc0f82dad291b01451f770c999acd74b9727133ef5012e6a4e86e5cf26af3c4c477c09ea2ee7922bbf3c952ec21228d7bfd98b0bc1fafe5884e43424cb23d311bb6dcafcd61ee000000b01baa734e6062e7d1e21295d03b5eaa9076e8dc6551caf50a8b78b637f4a7b6dcaf2ba038943ba42ac26311c35f863cb8087d1c1685deedd050f52bacf127a8ef8d8bb4ed57a874dae95d0a9f40de23082f02c17209289273817fa4ab50eeb7249af0cccbd8c21a74bb9a9f3bcb6c35d40982c26e826c267d296bf9328f80a1ad26f311c8b6a4e4ee8efc44e8249a17fa1793a78ff416cb65336dde8920e654f6bb7209e0b9dbb2b058b23a2af899d63d000000b00e6615111ed0ae1d1168681c930d571523f4d9b8931e9ee43cb1edcc358f4a04dfecad5d0d0fc7827a86ff8f915a2c46e88f8311fc6c3eb200a17f995bb21c42511ce1bc76c1179a9698dca4afbaad16f206c9b5cc002b1442e6167b9948e875a973d4914bb7554222542e53fd1faa58200fc9927bd6ebee7bde7f1687e1ce38126e8c1219f345df10b02a7ac1e7efc319f3c4469a52f3f798e801aaaa489cc3cb60bbd1c3d139e22c4e1aecdddc770e0000021c000000b02bb4d8744ce65ea29894217a92bf72ebe65f295ecbc55975790cfcb1a951ddc201b25bc6c0a261a49f8767883eb29ebf75e8cbc27c440fca5b416d42505f2ada4c38bdd3f21a0ab56b97af43fd3cf6d8f9447299be52c34240dd88608e5dd25db25d16d193278e41351e5b5eabf5ba6e193b06a4d43ea23564acac6af61403ac62de6335d5efdc8358a277042c93ba8016b20016c565340fb0053a94f0659268f089ca6f2c7fad381f7cf2c7a4bd0109000000b01874d6efc4689b0bbcc45814296600a909df900446d667973c2654af7097f8b6b0dd5c0e209422d716a4072e4acdc076983aa092c93d87bb986a120d5c4dbcc91fb374466793283eafdfc9e14cfc0daf761ec998422aa001028e1b9fb77f6eb6ca9f1ca21d61534cf1f96ca10c1248a413892347a284557f7fa6ad22c8aa98796a0f0e0b8d0fb8976ea3cc4fa1624915071b18d00dc6f200c250f9a65970e6614b3abe783aae20a647593cbc7622aa86000000b017555f710bb9716acf116bd7e60e97512672ba4bc3aad5033c42e5932c19750b63dc92c58c6c4129df2208f493e89deaf31fec8c88582b8e284e4c499ae1c1cbf93a3646751e952cf1f8fb35e7b7d2ff68b573a51e76f9c3500975648c65f62894125e9f7f663f4d278b2298a3a35ddb205b834e674a6be1b9d19a5bbc60df24193103f50fa63b1b98680664a9dceaa022c0a6bfa34e1b85a461233fa3498cbdf5d90f1740c295c4674d62fd31fdedbc0000021c000000b01a2545dfbc08985a34551c39cdafc966ff3a9a83b00bcb1e2ef623094240038ec541713aaebc905306a46898bd242b833c24c9884733876f571bfb8a553e4d2a3df0a9d50188e7eb1ef760df225df4efe45f5a96cc1d444dcab0fbf44a02f01c24d53bd85d5244b21e0790bee1fade342a846fd25a29edd1c22614fad59e123dea5fb465df12325594a4effa60f76e7e0823d8c7c952291b2725c9a10cbed135491df31fe7c1afb580ecc69f838d83eb000000b010a5840b07b1fd0eede666331d3fee1da8cde03d2b8f175d454b04f1f512f6b25582c441adbe535fc180ddbcdecc7c5221c439338bc85bf1e80690b4672df52aa8c5b745892e1f7a399cf3fcbdb7b35d3757edbacf4399300d72d158c496bf7f9213cfa6888a10c677c1de61ca0fbfc90b66158f9523df35882d1c48e5d9f65b27cae3384187b3d999cf7be267b2d6ba107ca64d15ed3c66099042b46804fdbbeca6231499dc46a2b6ff0ff57799da87000000b01c4907bacfb5f922ee3021091ab1268e839900011c62dae6c81bc51f518bd8e63cfcbc044679e34b909541d7b2e52bacc56a240450568a942f913dcf5bf3d7228f535c870fddcbb3635cf650295b417479482e9b7a7df497aa736e4e9e4a1d24dbb43e901f2561c450a00adef8c539d316edc5e8dd701be7f238db391c88fe1cea84b5d972beec8dca0e3815a9d3974923272c4768eff108a10122bb79dd73c7516c6a20da1a1cf2f89c9bce4e2e9ed60000021c000000b01de52c8f6a5e772b50e34724a0d0270049a15f731d98a97c2c06379e378cac178407b79cda141e4cc5c9f5163b19a7062b9aa250bfff00ff9f770d56f823dd330640b0f19b444b695ccfa5d34770d7b245514c3a1cd980f6e4a533a3956d0c57d0b0a8d62afd9efd7709fbf26e7ddef62bac75f691b64020daf62fb83220a2e7069d1f6502964c73d76cdc4add81435708b07cdf574f8baaf5535c16eee82e37d4ec160df94018703f188afb7ef185a1000000b0190f710984c36ddb118a7dd4f69f4748700d07891cdd42c55f80ea72bd2a3cbca0a9b46645c9baeff5610850d1fcee3afcfaa443ac9251791c8c8abe07d17a4f15e7c1505cfd13f88522ed0a9caa09f8cb9e93d20edc997d77666595feda6941b6c5eaf8aaf40a83881af8e7c1447db128a92dfebe61cf11996cb84f178922fba90e8162d1c8dccef5867c253f5be26a1d5b298eddf91516983565823750f78e4fcbebff458ff5adacde04991f6c3206000000b0063892781f30a5d134ce7d27a6eff85d61a812fdcf9f93a90c93477f6ff78d01c1fdde9852e46c2e061cee4b1dfd659d406b77ab295e6662ee75f5ff918d616e2ee81d3799d784ec0d0c99f02f502b61f22a90bb9852cbe4b2b2da5c35c630616b67776d02346e2d27ac74813123f1d7230d8ba8b9b538b23904305afa44bf2fcd333663176897a8f7bc2546820d8fea1628c864ef2c87e9eb65b612f5fde15fd7cef2c7c564f59cc27fff6e08d6e75d0000021c000000b00522a1ffea8d4d586b99fbb50b86b2fc0c81fa203c5c9f9c9a579b36c0fd4edd831132683a3a190d4fc7c2b9b0d4d4fd42e14a706add1044ffaad24a308cd6523a9e74957baf4bffc51e0f15d818f85235461b7cc08db0c80f87d33e4c708e1f7cf5036503796d83899cc4d2893b2f8f1dd0949e43c3bd3a249cae750b845e6e470c6544eadc66eaee65533354b6c3862a46e2687f0b6c58214c629b31a9f60a22187aa012f6b502e94dd3b3df3741d0000000b0221f434f2a742c17dce208dd8e16943506cc690aac8e255ee4d883a2a3739cf8d1aecf92318e49834abd838007b22502fcf54f0cc0aec6b2eafa5f3195178c6e8114873bbf7dff6835143665b69f1cb49f40d7d0487fc94a258c39a13d66982c556de72b549171f492880ae9acdbefdc08ca30c5405ba9eb52d43c9d9132ce6385ecda93f6f6f03aef7fe1c0ce5583f50b161f78e18c3537db1b174d01737361723f5f0b6d8aab2880d0d9fa642c8f68000000b02d8a0c4bc3303e3a9eb28ae04dc9c9817e24b10782143460fa0436dbb232830a1b42d0d4d9546ce77bd4bb6e02018e01f56e265a0236a809732898861e2202277d587ae0c972b321755a67fed038393db9906e8a8fc17ecf8bd340c6abfeceda40751c0199dff02fa8fe395b1c5d4ecf05982074cc23680e9fd1b017dc6d88d8b47172b21bab59a5519fc90b49029eb9180cfa367763deaea438a28c22f33fb6babd7df4a37e9293c2159d2eba2c14bb0000021c000000b016f0ea9ad0a62355e9e96d2e8f8925fc898e88395faaf38bd2e8424d3c97bd4fb2bb17cf49c6f4235bb03a06f881f45eeffa91c33dfb0b3786664642d876e851c698c1ec38ce9379e4c5e3c585976a88971aceea1474e3faf373072ba452e123683ec81aca3b40c7496d850860c71e2918889194e8b425a445834908cdd559241270304c3bfd5e52f5feafb7855a741f02ea421277c0e84fac87f364d8b8ae0565a84ca466d0eda9f85e1c5915a3ea1f000000b029694f12b6952b5c4975a51c48f051468980bc37c3489604ebd5decd41b974ff329024b37d7477466e2f1c65127934f4b822885f8a7c4186934b5623adffc1c910aaed5dad96fc401d8608732aeed4f53208e008a98dfc363de8057bf064034cc104fffdc646d1bac4294a2263ffb5220b77d62e056b77e97541cb3470c95de7c3219a1580c85ca7f196151ef583a2c8050cb1f542ee531e98230ad6e5a9a67c26406e68767e962d564407536c4adce4000000b016cfbb94e797e3754043276549b88e3c364e4910771265b151935144a12e8d19eecf9fd7c255b72c30ae1143a8f65348ff99724af312f6f60f349bc95b70e683e4c21f6b35933d52a2a22fba32e472a6a3ece8e59d689df203cf63d5a0214586fecee41d615e61c670737c2256899afb0ebc95252a9cec16797d15622bf31053fd49160bbf618df9bccbb9ab5c4fec3610381e40ae1b8e4cad64406a8e5436bd9dfe665702fa30d86c39176fc18e407800000fa400000168000000b0227f82609a148c0cb9c3650652b0934cb246a4bd453361211dbd42989e9d6ac3f45f754dcc44a8e5a626a7eeaa49565198f9721f478988c5f9010a1de1f271c1d89ff283dbcbeca959e952cc66afea40e4b7e58333d33e718d6d2f267c1a6c0ce7dbb10e56377689ed20db7e95fbe89f24b0b89b60d63b29fedf21197307131425d25becf7cd18f11673bb7f179ec8ce0fce04732b1235e1daa483e6baca8dcc898aa9b29de7efb91eb962716cbdc8c2000000b015ace5d2c53b34b875cfdd2b9283e1fe1ee40d1d3c8ca64556698214ab43cd5be3bb45adedd496406112c1fdada36e0985ff023b5c6dda3a2dd6e6d3de53395ae02948e8e16c422e8004f1f0420cffa484badd7d027a0cd14b5eb31fc153abaa2378183f9505a23d029811696907a1b11216bcdfc706256a403f8ee3894f1ec1ea9f1e5018621b86555407da12a4f28e06475670ba2c2acbdfb8cb52a88a917780bb060e1a211625e9d8b2bf3d518b5200000168000000b019651c1fa7b7c30fa573ef9ba58d91d8fc9926539c37bca5958ec6758b4c346c1f3653df4cbcb47a8b4acc183e6f2d4fdfca761c876723d46f706d20a728f46166549b0244f8dd1ad69798ee23b055bca15f95d35a62c4577bc6649fbba6e30a6b71676a748c04ab5dd58f2fdf034be6275044fe7230a487b8d9c19ba7ecde2614c25bc4b50f0db2638400467c9790211a07c82d336305543f419070a9d3fe87b05ff9756e1d1bb72c3ab5c690d1e760000000b01258d27e86519b01496a076fb8cb0645fe36d408da480786dd0c44d0299b24c62acc7e57c90060316920fc3e4474d437fe7b7adb7a59d46444aa6002ef16c850bd1db53f32116bca9ff2417f85ce9d5c163194b0d94b09c0c0922f46a19c6cb2e24edd4b7b9914e0edcb6bce0023c2d427e778c7cdfb1eb96d091ba01da6a33c942be5828879ad11f44983152ae277241d6d369a534738c2190c9eb54bec2a0e34d24de3651addbc9429f5f4d015c29700000168000000b01dd6c5b16dfd53fce2b480b6c06afb675f6c298118354aab2eb35ab320774f55a5a87d6b4f344c2b71a03615b30f28ef7befcf2102d07a63579a2d1ea9aedb54657896ec68e5b4f0a1293ebdf83ac9a41d88f9e8289e5f28bd1ea3bb82d21d39662b9932d0b3ad3458919e21bcccfcda178a4ce1e120a1f2a591cd2e365ff5026456293aa8e91291373d4776ec1883ef09a29082151f301be4fdc8d133fbb022085772fb461565b50f4db29c7d677317000000b01ddf1ffaeee0bafcaf46c5fb4919df7a09c96e2fa03bf29aa4a3c03315aec34bad847b28f8f5da2603aa5470c4c46f8b1d441d6fffcf6644b66ab9725ad0c6b00302bd4a239455657b68702007dc50fef9b6b0e6851eca1ab09af077b05a3c3fce16d2a06455c95a6879a12e4ce8ba001f3139acb3d31f27545e428a646496ba68489385cd72a707231197552848f89809858f1756f41f1752a757bdc6bf55cd9947c93fc5edd704369eb8728b67aa6700000168000000b0023929e317e443b128946a596d0b374d481fc2132fad9ce4d36b92962f6f0fa5b49d596414802a73da4c44e4f00408f81cee5baf4288f4aba4074f7e7033e0aa58485b8bfe207c91e5aa32deae6dd9f6bbf8252d0086b2d7163d943c9d3b4f63e23291762e7bc0c11731f5d8a99aa36111484eda7daf4bea5b2babf2d30b85488ebfdb303041a93a3c51bfca887543731562e1e8ac237ea459666b20aef239e2bdf8fcf241094ebdbb8f749d3f9532c9000000b0239e835d9175b3431fcd2cfa7bc590f1af6234e39afcb6fd6aeacff67f2704fe501d7b6e24ae6fc13fdbfe93dbc421b38c8e76fb8da387668eceb002961008640a896f7b7aceb9420a4813c122e5c714bfefe0d9a0ac899ca8bd74d59d4a2cadf4807b3be3984a3052c4210cdbeb94a60c7ca65d04c29786a8bf45e030d243aa41affa5cbadc29a374ffc6e76658797310058726fd924c54a5348d805a939542099487d9e28561c53c260a4c3861793900000168000000b0052d50bd76d903b508eedc5c3e9f4a8bacdf37e467abb25ea693ea76456b3c8501f2fc365ec484d5a4959ad361380eda28389e00723b48225fcfabf2574eeceb08d8801ceb39e61ced5bb7cf049829b42612445bec63faeb14f1553b2f3e5834022f69facfb7dbd49ddccf5542d92711236c908891fe8aefdc2d6a82cc075941f1d7bd9d5910a5c34f43f3b62d1cc7410a4727b9b12c0c0fba40676d0c6ae731740b6f3142480e541ac284cd66b849ec000000b01e42cab3af45d9b56ea7c1450d92aa1591f406b43cd2c5cdfbb9c89de7c5d8cc001c8ef7a8ceb7975597c0de719196bfd43bd6ef1ee84a5867985a9e27032ba305d5a44bf2434c6d76790ca42bdcc1562d3d8e07dd98a3a4a09a578fdb028b044c58e87d39d0b9f12a941052f989a3f5142107672e7cfe337c0c40dce497d7f9a5e2792ee09404bc4b822ceca876a5f222daa21fa8dada50fefe4fd6bf59ac9ff4943892236814ace0a1fc59bcefafc900000168000000b008ce9f550d5fd79a1e25b3e13d59a81abd5471f46f0060ef992758388c6bea31ad83205ec03b14fb5c4d154104c8c5f2ee4126c0214c91e290a355f8845bba4c4e85d0fd8a5889f6d9d02d44722f4db7e3a53c9f62f24bcc2ff6d85d69b6f1f850e355b93febc8f072d51ea418103b0b018c8f64b1975e638fa34d614d071508af4edbc90fccb16dddbcc0b2a965db4b0e772df56ccf60a066464a49ea59ae9c57d9885eec2c92e5890ea382e8fd107b000000b004ebe27bd3b08267567506f9fe653f1b3f99574121e3faca2c6137f55680aa696801a7107a33758ee40e2868cae0f79fbb852a430b0e9957a702faeec0a37300b4fd5595348e5dc660b4b04bfa81d60c90a1c1d163fc526be9f88252217c03b1b465ed8b6a8d14674a78a1a1ddace2fd15aede962daaa3f11de9ceecc8887743602ffd592000eb7e6d777e312b521e6d2c60fdf1c6625422248fb63ea34f04a80711c255e79ccab59608b91844db7c2400000168000000b01b63984f2593871ddde5fa63a3653da8ed1ab03ab67c9f8e3774f6ed46bd7c8de7e2ec26c9a77c948a10aa142bd6d1f15168f18a172399b12559b8854182800a9fe1a03e586a0302268151b74149544219caf39ff82d65310259a2e2ae7bf1ba0d41cdb4a2f39794ed4496d5e0b210061d0f32afd5f0bca95ba7df2b814f9140917e729fbf1fa260421a853635c74c592680372386d29ee955adbe8b10a1da2dff963576f56c5c30e63782ab976da2b6000000b00a5a73e2110815153ad6006b6d9978b4f1f620b327a3a334c97804d999911146e0c73d3bce6bb87d2c30aebb7837b78d49ea685833bf62ad03eaba9d8b902e77ce62a5f272d03134fcf25ff723046b79a96e60e53bd466f0ee319910e57b1d839e2b0801de2736638f5dbbfc3ec65355298e7cda6f7cda85f850089ceb479980865f457ac1e8de1890ac5fc60b8ec4032b648cc0d60ffaa5dceb1dd921b4954a9188fef7772eab280063b8022b40352400000168000000b01ee6a528352471047c49d5da60928306f8ed54d7440946339bbe83f5b7e346a54590413f661475736a518b8b4029eb7dfbfee253f57b4b844aac45fdf118316726d1703628a2637a714a937de8caf442ddee045464531a43c5d8c818c5c09f7bf2e2124430ee889b15b587179fc3cd122dd538c6335c439dddb4b941ba117fa44183dc56ab0ce10dc6cc7efe2851243d08373354b27a5b647edb318d94e3f00147092274425247658ce21a974cd64fd5000000b01fbfddea2101b814a3b7cdaf38b9725926728c5a206ab5b1410f8c4b88e2168164b421dfa1c3179a5517a933b47e42fd4dd9b60a6983acebb84761bdacb65a9d5e35def835caebcbbaba29c301785106dfb16b10785b35692fc3ec77dccace0b0d7fdeecfb72fb3ac810a1f38ba971f31bfc6fe31fe43b57ffd9c47e747d2fc155d9792c9c1753841683696ef9e0f1ee10ef1c49232b7134a7218cb4efccf6ee779bae77f86e11fd653f6b82bd65e37600000168000000b023de561c41c6be0497a1836b9074016af2842649024670a203e8a8afcabba0f5cf9c32668fd6008f011be75b95459ab253b5b8a55cd8e7ffcf4cc37fdc71809997a26140cd90f816969b2892445702b3041ad7d3658c0f885f06ee774b601296176c63ed159ff10dd2d1f8dd4e76352b13ad5b8ea382e930cc78371f505fbb332231ae2d30b750d4482b39504950b23014e9b9ee2fa1abb8fa6034115dbe6ab8bb1655e14a0525a619173d39182c659f000000b014febe858a0a6909d1b496516b08a09c0db70848df7b8bf53efc9287af3876e7c88e5a933c576f68cf51528c66ea156029d349e6fa1945a3b7d7a38282c2ca47cad3e8ce719736382cdb8f753cb0bd4ebfac555a1937dbd5cf02f0a42eb5fd65d10e46b52486bf4340e26a002aa7eb8b06b275aa45a389ac2e133c290e0e1ac6e6280ae5090d0d0d532d21cbafb69fbf0bc6de0d2952df114b105a73d16fde3ddf301e7154dac378d56a55c3ef0f6aae00000168000000b001fc2b23c01235eaf8cddc433634cde6778ab69d60a9f1de3e209db61bb18b99548d34e713ff9d1fcaef006f333a4abe4c67a2f181418c0dd32713d79d69a2c6425f0cd4294d28484d6b5cc710118f9592b162d5180166129c06578ca398e628e4046de53cfb19f4a0a98312f391d7390e8de589059ebf85e2483e2f9d878bc4c1a0eadb5a3e43e023e00ff975f4926707834d4b5e555503d1edd5d20d99620fa93e8e549c17d048f126d23d025ecad8000000b00e40a46861964afc6ac69d065acf0fae494991f36bb7ca1c8c31ef9d794e7909dfa20f06b472ea1f6b71b06d7df833b12a604a3d1bb1860bdb27804eccd3c27ce1b07ef59800e392aefd25ea2812fc27f90c13e124c2eb95a47a641dac53c4defcae6f5adb02aaa74ade4e66dc0fe3522bf479c6f48d8dfe32eb1db032f7a0ca736601c584b44799c38a593c54f3b5b52cddc8c94cf25618e49c02d22b5d2f003345a3b9313267350b19719ae8e3217800000168000000b02363f910f550973739436ee40527cab175a9e9ade7a88ef4c906d819741098ff4942467a90966f01e1c13b926fd01968affec2f16571aad7012da9f59a73a3cfd65c7636e51b3386e75977ba4c94d68ebb862f66f32132731738fa1466c3e695dd4faf9188c901eff292ad63b577e9e00b978e265a8ebaa682f55e7f19000e51e2a83b05c3abcec9adfd1b17da8873da028fc9433647caec05586d96bb394ac0f8f68f4320bd002ddb9b7be9c7a9d749000000b01ecbb28b3780c1f688b40042d46fb615a854715b2f887930b53ecaeb18f38177ed126d7939b0238ff1fc060357bd581a402249a826d87e75cfae94b8dd7a12566eb2878bbab3dddd09bff5b0ea4b051a4714d96edadc76b4b2760a508b7ce4aa6f635df0ead61ed3ff946b060502f02b0de48fde66cb196c3e33f32573b751291a74cc947d879f2ca17381480a9603730b968c50f7e8b98dbd6539390d248e16f6714f2ae60b731706f322ef288d2a1e", - "txsEffectsHash": "0x008aa79a60dae1c619fb444fdd7ca7abf423f96d7bcd650a3282c5267d3a8faa", + "archive": "0x21d1706fefcddd2901d7d00177fef49d80dbe804ce7a9f1fa354c64eca3532ef", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b00e1b92aeb4f6ff636d067cf963b506eb8daaaed4e3d4b547f3a59082a697964c5cd08bed62a98b809bbd6c4596e99364c34ee318c4282bde3ef2f12505443891621e8d79d16a3d31d8574bf15dfb27045b044c692aa5caae7c39f61ebe24fd353de711f388c13118ee426d2af2dae60011d899159433bef9f74095806a87f51e7ad427a89736bb4b28a4a75118d742a00a1f2a2963e35e51b454006974f9bdb3d4e45334527db5ef6d0f55d68129219f000000b018ee93db05aaeca0bc438f79accb60da3e1a79d735d8881f02ff358b3aac5cd2a42a8be3b6984058f351d88224101fd8b49d254b26e14746cb9142b8997b492b6287a0760d4d3439d034bf93639170bf4733c67cf40721e1963efd81e760a5fd33f5c79c633c7e73c21d0abb71b05e580b644ca05849ba962086f00957c3992a5411ab2b6e79d70e440134743b41d4810a675863fc64852388bef37e0de0ce676e9fae02f1c61deaab1e2ba0c56c83dd000000b022cd65d66e9efc3981584e75ae456bbe1f4f5ec8e65f0ebd24c807f79ce8297b13680e0e056dc0401a606f5155833cc726554656ff605f7c87653bbd165c7533ac86d7473b24e00f797609a872b22f8af5e95e6b10cd40ac63eb7bb750570cc79fdb75a7adf0d9af85aac1b97e0fd1b723d1be869767da16cb99cf81c6193b46aaa62cc8dcc9de66eb927500a3f17a3c27696d52f9c2f2a5a56228c528e2d16f2c6220483fe071250a41fc44eaa59bad0000021c000000b01a76d2eaef4cc75efde6f12acfa09122e500ecaa2f7ea798a7faac5bec90ae778931f6846add220f107528346ee6d069d169f389cb078cf31e298c622905a2ac0ef27097f773b415d18c67befccc19b2d2645a0d529077de773fb0511f405e42bba8f91f0d1bb288897972ed1a43d4b3071bebe327c68569cb16e155bed44a2aae7fd165e7f73e1519eeac5d482abf7525ef1409d2aedd2fe026fe044955bca93ba55108670d8a2809de9a058e485675000000b026c254c3555cbb962ef8b4b233d91d6df325963ddc4694474ba624f6dbeb1ea3ff213e0f8ca7dbbef2b7264998e30f8fc869b53468c3426f618b53c84a03f1254fe897da778980a7e205764d1961e5cbf645d3ad07226cde4baa102e7dab819f1ef43c7362571d1659e07825d83ec43f007b7ec45e11ae7718b8912b4222eca1db39da1718ddf5d9bd82a114fc883a151ca3ed46b7f558a36167435f70174703477e36461b32c3c4dd14e416dba903b2000000b01a09a06eb8594185b636f122cefa44599cd695fca44a8c785cb5f4bf35da8d6254e16a208f55e8fd73ba1325f304edf92545800f0596503654a7c2ae07ab8cf09c144b278a8e983d42532f897c7dd01515e9229656df3059dcf1c9c66dbc4385e9ce831fa3e2398dbe9f2a000e37da5425e87d234fc430c146e89306d600563d1d24a589807fba8d396fbd3e5459460d0d62fff778168f27e7c2ebfe8bdd21213ebd17fc05ea98242f368189d3825ecd0000021c000000b0197994dc73e77f90be3fe6b7c11e3c5685148ae9d22248ece8039c34e418ab3aca58c786751573e2f7a6931428762f19988a2a67f19ab9a681c6a9ac1c107d8b58367998b5181e69f39e593d22621d35b152038d733ad2f8a1516a9a4ab1cc44440194380d79f29b6f2dc9cfc2684c3922339a7a38efd0d99b2d240dabc547af57d99d95fa7eaa6236d0091b2c369e8714a4751c94b608635619e4ed186934248b56c23dac5c23b45540902e715a17dc000000b0163a195706cdba88cf31b047c8bbc7f9d6dab339df5c7c38a2fd9be63f0f5127a147854a838c1879bf2c06ec50486cc2b95feb6dd5c320a1b4b7399869072a8e3a4dcc0d5b7b4dd561e3745e305466159fadd485e33e227f7cd888f2ba834d98b031ca0eb3a2e2cc95c64314e1c887dd0b514f7ac3a42b413c3f2780507f9e0efb0d375266cd87053ab3a7f53c04925804750fdb4aaadb3432df2256de2e0e34a755a661be66a849759f39caf8dd4431000000b0068115bd5c3c619100a4fe48b9c81824a869e131307e4fa4a86060fccaae342d22caa0df8fa1e39293ad539a1ae8bc0794d4e70e8eef042850379ad045ac48930d403c9baac629e25f394292b99ac6778922d9e2f5ec0afeedf9842b7f198c30ce8fb63eca47d1929d394593ccb0e6811e4b712a9d33082aae0d023660d255e4464247ceeffdcab53406a5691c148712255da5fbe9995ac208b6e3144737be75bea5a1aa1bcf3a6be2f7707a7e9ed2740000021c000000b0214303cbe328a01b94b52aa0874dcb7df502d0e3f68f4e458eb24ef323c3440a4b68def5b9f35647f1354dd8aba1dca47fc9320a95b369c10455d22a87fdba35436b6dc013092e1dd91592e9d69fb8dbe79a7fa60371fbe519c37c9f340fd57da6a0c718a4847ed278ae9458c92c47c71303eeca0c3b4fc9c431428634b14c2efccaad802c5da52a0fbc6cb5890fa9d00ff5bd6ddc4c78b1c250d139f5d42763d69cbf476ec3b3101cb24b98e51d8a86000000b0276c5eac3ea7134ad9f3e84ab4abefb0ae862f5c6ca094cba177b97b541c3c2160212b5490f747bd9032c77ffab89a177d173981f5f254910289777b9c9abe19048526483e0a38a21cc34923aa2d138e5d9deba564df9e8f1241180771a2593b3c2ed5bc1ef94740320df370be7414481cfcd310d2086c3e5144d24bc52256988c3c213749ac1de717984940b2175cf426cd05d53464b8cf364efc9e12fa0c80b5c8afe140f6ab3e65c754110c4ff187000000b0168e23f374486d9550ebd5beba2e549ececc8eddd64ae304e3e459783e19244e7aad6d0692c92d38c8554b57c80ff2a176c6d62a91371b9420bf913bea0596ddf8850589df123ac61232340a5989196430fa14551770e1b5cbfc8dd3c0e204b69fe50cdb829445615a52fb532957b313222f369fd353f145db37c104685e94fb0ebcd4761b1e13c0134b3c66f48987ff1203564a2d68fea17c45ab39c36695309fed32eed51d159a8e2e25084b6d86d40000021c000000b008f43d0b4669ab3f424b951fe6675b618dcdeffd57e4d24d08e9142aeba8e0559989d2cb35b6d9b1e3434a3c28381982753ecd3edf522238402b2b5bee9e59b0bab2c3a4f185a2071c4e4e2bfe4171b90da03bd00ae1ab13f3d043f4a82ba86a458533fce4820f17597431bc0a1f06aa2ff8c24f51505f6d3554bff055a3d5e904cbab179460be57438df9f38ea196c4014a0492ea0d632d7c8cb0da47801dd98c4291fad143d7b92efda7f79cca615c000000b02b8f6ba943adb735e25829c7c912da203797d85d1049b81184c757b90e9663dfabcd3362bc49b91e2bcc27b010b8eed83262b0fad73ebba425722a7fe1a5a446a99090884affeaf9f22d9c4f0ec6a0a5255b80d28640fa32447b7fcaa9f7e4c0f3bf3656d984b11d6c580d3273261329285ba585b185c4901d5aa189a5a486d844a78b8cc6739d59d58b6e435ce7e4772b8de0a5292fff086fbc75e9234993d18ea74fb55383639cbee9201ea0575117000000b025bf483f7ef17379795be2ac775f071e0f7aba14541dc01fb688f0e3d437783d7cea1c4facd24302f9114ccb101fa8694a80d1cadadc472cf7201b2365169be9e67927386b510f85fa40c005ce0848f1156f6d25934eb46b10138b38b19e511068be65b49bbe93d20a780072738ec2750fb80acafad408d215f0c8dc7ceff769319edd61880d9f2e6b8ca96e6a738c1b1a38666f228813635f44e8e580fa191eaf1eb001149a7d25accd984cf4ba1e430000021c000000b02c841ba8cfe20283966b4a96f6f079bcd507a2be722b094ef9239dc47ece6e76fa554572ed46306a9abe76e0a065301d3bc3c491ad4849e487198b328014ec5902c91e8ce51a20a661308f4b6e83b65a4ee61b7047d0c73fe92b3c3c01e218cb06c32d62c41227a52eeaa54d4a295c2316407c88517ec4ed5bd92be6a77fcb3d46192107fe06e6ee784b3b4e59c2d3a604a3404b91e7c581fa8bb7921e2215d8348715123f1a66dc72a0ad96230939ec000000b0002b5d2bd70db6aa345245c1186c8492d219c0fd7440f8732676bb233fae3be4274424837db490fe4ab110b295a57090f54bb08b8dada51fd7712e7d816a6c220fa5185a2be4557848be25c1211fdfaf3116b635711bc85f307cc645ed7ca3c753d625aaa5bde74df5e2d6550475d34505bcbdce580b25328d749545529dc62b9fdddb5c233ce4b6d44d3cb0761dce78144d790ab8b2daea26a762288f5bc70c40d67782ebc96d91eeecd6f9cf6ef663000000b02e4f5866f023ad0a26890849ca5a596dcb9da0c2135602f17789f08423ce5eb20bce8c2581323d2ee6164a065f2bea40be3eeb2b34349904446fcda877d0481a4bb5671647a46edbff06ab057b04bcfd458bbaf02593f777d6d26fc4ca62c8c40d653ddef2b412dfbbd70010caa787201d56b9f052c4914641a00cfa1e3c509212ecba7e96f0dd6dc1ac4f12d5dab7f22a12fcf2f17b40e9403174abc652ecd936a92ce226fef6df7059b5deaa7f55a60000021c000000b020075c286a7175bf8cc691af46e7bee81aad4d089c907960e26ea13ff718f751ccd9cf7cb5c36ae3b6522c71b2446aabd1085c5245cd71184530778d1f8cb12cf91c97789dc3bdd975b43c946f60a3f202ef16026ff3a5086dce040db0b22534d190adc86040c95b56a296f06cf8c05c0fed0e35e2e39cf41b7d6eb0abe55a87905358a99e64b4233b05ffd9426382ed12478f351d3f267ad223060152d4579b9b716d3dc63974a13d3bf93eb0a4118a000000b01f3a898d993f72136276fda067a04900e835343c80c64cb458da48c187e2909cf42115be04e8a768545fdb91f7ce053f846d22756830f52c93ae27ecc1cbfeeac825ddaca844e62540186cfa29e762e657a63a05d6393ab3b0bcecc115a4a6489f1fbc03abaddaa78e8373f65c18a52e29c2a2519ff2ceb014341968879f8956ada4e291c8d8bc3c1f325aa742386fb2128c14ddb347ba0645bc1d8c2e9eb5bdb599909f959dde43fd93d70517221924000000b01dfa9b334d159449190e153a6ab03194bfe6f2cc281c9c7d41d21bc99494f805d585602cb73dc343d5525c708ba61656925d51f820f6975cac58beac81f98637335aea70445f7140a408696b6f2b28cfcbc33c0f8936b2fc966519ad37598274187f16d0220e688effe0bd7e0c0075a50022f0a6155995f334bc3bb1b326db60d3990cc1edc18642420716b6bceee22d094d60dfc2a265e8dcd81bf3c60deb9e32a0c735b1a895e74a46689e0b271fe70000021c000000b020f865e4efd08b0f979cdc2ee2b8e1af9bfd79b07ced81ac6cfba5d49d97feb1863f1a2eeb3bb04aa31a7d5cb0358cfb8e3352831c2f565a32f5aeccc0e66c2b4b7ca08a0b5ef4a8f35cd6a91174375089656048dfefee1de7ff1464ae6cde136ef617033a9ee7921b9088ecbdb349a42ae76c922c6e0f56dc4402061880fe70fd7954fa1e495bd1118447f62e192c630495aabdbfbdfc981afead608bfc96e6936fcadea3fe1a0ad6a5d8d57d55f56b000000b02731600559966c1b6fc07c595bd0c2025ecf94b9f7d8bd14fafda8b713cedb0a33c46f5c395cea4127abed3d322af814c19d77b9f18b2e22359ce8ee64befd392d5ff2e61a48cc9fe810f52fa9d96ae6fcb81ebba7fc3e7634cc9fc59135c8198f451c23d10939bfb0fe53c34ec79b470ac5082e433ef66104a873a129e0ceb95ab1e6da0c491776b81a23b173a963421d1cfa9b6db47dbfb3df051cf875e66e19bfada7d33af03c1c69786686477094000000b025fd3297c0ffb6ddc613828afaa29e09b58cc9c8c305afdbf79e97ea2a31e2a070d785f058533f2c84bf6435acdeefb31d134b4b69644de8b852d74d33a8bc5a021c15b5722075d63cd8a45dc9ae2136afee62c723cf56f689e94fb62900db4a9efc22bf43dacd5c5e19c1f2d787ab0f0acc97866657b1a25ce575469113633f42fbdf98a6ed3b0473bc201b7901da552f5dc128a674a2f5bd83c93659e7b2a0de6e76c388eab46e592eb5bb76a8c4a600000fa400000168000000b006bcee580f4040597de276d77dce32064e23552e9525aecfce12d3d2fe14104438de19c1a5f9d17c564cbf903387f904b5209d36ae2a138d13a6cbd023c9aba35df0520f64988f2b12fd16f198e6e5a26f829ccb6fe1bf346b31b012296579e6e18426cac7e576357b72208ca48e52a61d78c8adacd06467cc3b233f4b5f34392513d9bc6063074ed81f6b2f7471430a14575d27a89a5d80430866c290f91d935f0c0af96534c1c03d06230412818520000000b00313430b17fa00bcdb2805f7541d8586bd3d3c5385ed2c4b93e77c47a486470fe30de63bb73b3034c3ca824795e1a5f266897ad7084884ab66e001f85ee2dc38fb8c10630632bdf4bc331bf14fe5828124a4a5a7941149aae883a3f16bef0ffbe5ff48adbdca09d6409f9bd6c18613332a6eccbf3380042c42a47ddf7bb3c63c1ff23e00e9f24029d448c683f6d6724c22b816ca4746d4deebc58cef1d22359a03adefd4ea540ae0aed190212cb217c500000168000000b01386884e2489cd245877c8e2928ed3a584dd9081e500cc629d566b537920ceef6aa11c74badcbdd61857e4709120b61a4aa1a8270423e451aa0295d9915588ed1406ae02a1a5891a12cbf473b1935ce66ab9cdc0e2f87e28d398c1fcd4e0995b2f4141fcaabfeacaaaf206e501448161088ed875cc0ec776283502e85160ebf7a38f5d374d7f58508fa8db9ef8c5566c2f1e05b66856da83d9ef0668bea6cb9825e01de77b16d8f06cd10a1871227a08000000b02969e0f011a3e81a1bd519d86084ebac3170d64fe3f1af62d9c60e794443b585cfd6e5c03967eed673a7449f8639d6cd996b7adf944553b980bc7e114c5d4d34e96eb495c8bae3d1c910f7b05ea1563cdd889dad3911e5053ae784e1d9760d7f2b3f8934a756def296205119fa5209cc08552919af8a4d6f2b8840022d0d978fabbd4ccf23dc9af74a17d6ead62a764715ad79890ef9100c10522d255f9d0e679373656ad1166056653a4d6e9f9fc8a300000168000000b0285ee030b4dbd4afa454db170b49862d8a73d23a4ed8174fa34e53b73903c90cf63e314ec296990ca61e2a5a3a624335a6f8c2d9af04a73a9de5ad30baabe05138c904b01192fb0ccc05231bd7756192ba9d8f642862aa21a98ac20226253289be31efb62ed3a0af2b8c6d565c06327e0b496acab32ea01777e537abe5d2eefb30d1fa7ecf94e5e5cf98840b38e31ed721a9dd584689303d97ba59e007493e7e5dfce78e92879e9b808a78ad288cdd76000000b01a9252e836673d550ff6fc64e23f9a092faf27e21eea3dc0582e56b05d2d9ab5eeecfeaec3f0f95a49b801b07130627c52d63116f8475d163b379d70818c000d7cfb8c6b362d27163d65886372a88f2345d305c27f1a1e9cfaf3aff6a2304a67b4562d83fef1f784837a0bd154c214b501994a6624b0eac7da7571642f7245d7afcc7edb441d0b84108179d4250372a027d28b78f1fad65f59ade05f6dd2fa20fb3eb9b4ec8e528c3117dc735865deae00000168000000b007dd66c72ff18cde2300cc2f333abcd45e91f6796cdaad9440fc1cfbdd64daaa720efc767ec7a5d416deb70b20a1e5e81c0d732e9679653230190cfe20d2e3cc6c4bab0c5245d7a48f59dd6004212d017c5170cff12789d4033aaeed4dc49a52d4e65ad2423f18fcab59ed76593deab8117f7f8c13400d266461700a0957432c552051a8768472c1e9f4dbea9b28b3d3149e30db2c43eaca0f0726e7ab2ef8d0b9e6aea1bc0cfb05f7bf4ec19e0a320a000000b02be64f5ad7cbd16d0a841634eed44b88855d6788f7a56a17aa0825751008cc0587a6a87b8a4bd52c3d244877a9dec10268df67da983789deeb67c71a71a9ed1894ee82205e27ab6c5eca1d2719749fde4e3d53d0bdeee9eec979cac6bfed81cf2724f75ac02f34218a78c70c782444872aa79882079b428b5c2d35446365d5f6de0c3c748a2ef196e7db8b714ef4ef472b41437fe6c60e4423b218bf6c229a372530fc5dba445531cdbd08ffc0d64ed500000168000000b01acf79bcc0fcfa2b4e0a4fdf9356ec4067e0bb35bb9e1f701b9678f0288b1efe981423e20d961a0e611103a81359b2ae9e240e253c4f6533239311fa9cab7ac0e54a560448a54f89ac40897b3a5fd67552e706f1e7b5eabc990d5405990a4b639e2582cbb512485ecdcb6b53858200670c494f8b95ff92e8326febeec6e92a32633350d8c35385b20c0f6a8737e603661b787dd7c01fc00e80e7c8e798cda8b6cc5023a927e1cc871f07e0fd298db27f000000b01c5ed0d0da47b9939560715258710888cdeb0ebf88df3d7e929a104a84e73c6efabea8747494b0ea2080809b1025f780a1f4fa4dfedf9288561d2ddfaa1eb0a92ecc3c7395d8592b4a61e2c5d0f00e813aa4700424a220ce7bf9ee90f3ef6fd6931f53a765f7b8aa6b6fbba66a5dfdfc10c7ea658742eb8aa24e9f072edd971a92b0673057819a735b5b0028ac20726e18baf1c732038217a9b59aec6b54a7f8d150e26f5de88b446fe8f896c0d166fa00000168000000b019678c4a079e1f8d4ca5596243940a49d97eee603b8cb27d81be0b5c2b36434d0c9cba359f4e33b2b6c9873c2c7d9a72d9417bad9f019f97c4d68e83e8701cb1838cb7d148371b5a0af0ead795756b1fc867794a9a7d94e6a8b57fc31b0feda677a93ee2832699fa1b83df39a66f85ad12457f28ca3c91ba764fd91226980bb78b106a8613382cd4a9fae438decb8a992c501982b594aa28c81f336dad8e94bdf9deef400f3a723b5303be7548165c29000000b00c49bed8fc3ac5fddb47405bfaa9551105252783843f2efc95670165f1beab01c46abd95c112a5f232fda173d521e88ea959ec4bb9560eb980b0ea57eca3b8eefec8b5273fceaf3ebc083d37804d812db01c026b2a785fddf82fa3947ba61b7713f079c25020516928025d758aeb9e9c02452a6eaa91c633806003cea3569e6ec1588bf65b0c670c6973b660f8c39c591a2437e0ceb6689b6c1e2a4d43c663777ed8d4b1772acfdd637aca57e7fb9e1200000168000000b010713bc0e54b8b45d9278fd7497b34c0011dab04765840a08cf9c5ecef3077655acb257931a0458ddd56c3ce97400c385ee3a3f19d703a490cee1758ce5049e719357bbf5ca9582b689d958fc65d305c008c7cd1bb134801cd143478f5236d437ed2dbf70775d372b76420bb061c4ef525a7066e22ce388785b5cc6d0191f4f74f5f39fd08852bad874a0dda5fa5dca82bbfc7ab3c64e00ec4b51be95be96e9569034fba466767f916393917d38ae59a000000b01f7f07136bccd28fd7335c4928388122c24412c0e9ccdd171494b314806e591091b1258e917b7bead3844c32d00f46563f25ab06f9cb37193058884d55a0672c9e27ebdeff46bca26b2bf58b2eb596eacb9eceb158f24d879585729ef604a09f4c2464c7c7c4881e924e917853051e2a1ccc8dd4f9ccf2bf48a192365f181b80d0076a9a89e585941c30536868c0179603adde2ad7e3326ebc8f819985fbf8b4ee17078675f2729276edd1ee86370e7f00000168000000b019bd34d84fd814b4bafcf995a5929b34f5e7c443fa56e9d7b443c50782afa63aa002c982c87028341a7a9bb6fd2fdf7b3ac020789f0aaf2d971b0f6a443067474d52b4cb3140bdb5f259cb35bc642b9a4e8e6ca3ea2e5942b9800d54976cad627cd5879bdd4ff1af3b7130a9d8252229125030bd4225e7d3aab0aa1a99b9786573908473fa8db7e4466d1354a3ced8631d35ed159a3738ec8b1798df4681d530a908fcb317d4a31e3e4f92d099aa117d000000b008d9c0cb8decd40aa78e9908548ab6e3eb3ecdcf8739cd4f8a4885665b5f08c0bd3914eff923600dcd45b4d7d3feae38a0873cea6e6e1cbb6f6fec7949c0d664cade1abd1afce913e1fcca12e34292b2cec8da143b570b7d8eb50dde424edb63523f4310ef70effa096a89ce7cd8041f26d971a5856d8c854ab23ecfd3c695d077baa8912877a55db866ae6f1ad30013187791b96f726f8371aaae688e772865797c6e21ee05d3701c73dfa31d54d3c100000168000000b00da0d70ec22c48d28a2bc9982afd44fbeb644a28ac6fd3ba3c4e14bf65d32825458af6b63dc14db86a9d00e9d1538e32c878c5317c60b0d83bff85d448f0fe5b9eb181510a66b1b77c9506227116268c6518d276c269c8396749a87709127b1aa58a7b63803b0c98a960e1d94991a1e804ac6db7c6f2dde49d1832990b03443e44ef1ad81b0ee36f82202242061988df17cf4efe6393b916123dc8ae5316146e5944943a03ffe73ec8fdb69054d35bb7000000b0168432ba31093eede51052be7619524f355042ae8b8a861a87cc953f221af9871f56bdea642133222ab762723260dd5465af99377e28ed8d769ca7c9033400f7a65202400c1e5e243497b64520c5eadb247d609c4dee69d3aa2742ceb8abd8a93ec327a4e8af0b8257e0f4a332ff9f34303d86c376c4c259d8cca910e079220cc36c1de150dfb03b0c0352e90e35e15006653e0401840815f3d1ebf55b9fa17c48bc35cf61b0a9c35f7c0e53101d9ed000000168000000b01c400eb5b05ce2392d1cec335ff49edf25a9cec5690f7e26478cfc319c4ceaf25e27b49bcbd4cc4b6c1d5f132916880e27b59cdae652d3712be9cf12b2c63799d525545d8df9f607613aecb5bc8506293812734fa0140792e6064ac9c9bada4003cfbfb1970f42657fa7ea43f21521f72debbc738f79b8f6009da59c99d6aa5e8d96fcbb8146ce2fd6d9232a9289c5b423d97bcef3f15e1a92c43932ffcafa7b71f6e8b2d418cf3a523226c9ae73ab29000000b03039b91be76dc18db6ba5b28659dfd018f06f8acb36a8f52f4739306be361d9f6a0ffc370025e7a52f2af7c77507f40089d3dc46e4f33dbd2ffe993e3042dcead25a15ffb87d8d55a8897bb17031f22f18bf4e6b0e1167de07e01fd2eab9fbbfc1d04c05e89c2938aa78c759fdedfe962d1a7b3125e749623b0db3630f22bef524a8209b5b8f0d267c4488c3067d8a221fa0cc9224d8f4d1e8266d20267d1f0a9a63fa4da77440e34b59e4bf9a0655a700000168000000b0022512b8bf6b08d47747b7662a9aaa6c58132407ae7caf275b6bf5953157b77220fd76c4d77a390c11815f72d7d4e3c1555b44f8d8dd0dd20b94fc8fa9d74c2711e25bc73835001ae8ce1f389cf0318902f464a97189419873e859bfa8a6e51b90630a38face5ecaf379c8d6a6747a362c22df41d0442b2db4c476e4491780d94dd413bd9049a65f8e3565bcd24800df097c4449b1f5aec71f7d06ce595406e47988180094a282c632b00debb88dca6c000000b0092812ae18eda16c4029c60ecba2b9a7f0e6b428cdb12c2249cb9044e572843b808021e1fa37283a7db97a02b82ad61ac438b4561de65c26ff4041a5a8ed9e8eaf6172667d503cd008f6832b788f1d6f6a870aa5db99294b92ddabc2418dfc88bc02838a39145f8b444ced270d8ba4960f7405a559738cfeae8bb1d3bbc9d78796fb6d91154d3d8fe79ce754b14c11fd14376a26352deed079818b00dc4fa7c61a6a9c05bf666aa007effd3fecc7fbb900380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b0010f56f3f33b4653df681cdc308df73d5da306d2b2f41e3fb5164d19dd2ac7cd08fb7e160deaa6e191b1e4161ffd526edd32e1ff77e9de498bfea9a7db704f5073a0b689da91b9f2cb11d29fba463ff272600721c4f8623640ed04e8eafd07645a3122f51f97a0ae00face5fab50f77c0aa8e26ec3869c860dc17c09691fa100fbdd940366ebeb32034e0626ea81b7ac0b023aec48bdea5ccc37c97392b8cf3e88ead80498fc36b1d231b18769a54804000000b01c481d58b39e1219928429c6dcffb011c23357a9e3e0ddf4441a6bcba8fd85a7989509b23f7e8392e117bc186001eac759f0057b55a515528e79a3416458e598ea02b1f013b6e10b536b71d455a3d332a8678cb712bbe5f548fb5eedb81be558bf153577e6dc9f444b6740ed1ddd66622eca92e5e3ae9b55258271f58480aa0aff121370c6ed1388a5d129080f81298b021872d536c022556169933b8d10ffcdee441b8d8ce32078476e6eaf4f4997c0000000b028945254a37bef9f20a4821f2b8e5b1341ac0156c39b3a27f6a4590c06f1f2c7f800f6413c1232972c4834d266c22121d41dbe053da8b1523a642e6277a3c17132fbaccfeedfc76a1ff187b5d218006d0b608dbdf3466a4d3f62e9b4ed2ab32102c37bdbf45fe83670fde95fef958b7c1d441a4b058bf9938c201f8a94d36841f7b691761f29ab0c1c5bee78217e3be502413d504e83e65d8e8c629a1d378933a23d1adacb34efd96d483fa439e9ead60000021c000000b02d61a74d6e63674642615306439f126d066301eb2bf77908551a747d24168daec98f550712db5bdbcb11fce3c729a40cc8bbd414c70bdcc457ed49f197caa76b770b237266eeab9c95dff27f06a4ebdd6f0da047058f5a773d804672a5fad14338d1ad833e013dadeb2c24a62e4a859b2414a654f51aef1eaccaa2b080f1e908b9be5b39720cc1867a9c1de4eff8d8ef215a92869e6268add31b342322b5fe382d0bde22974297a7756ca4ad30ddb6fb000000b00bbd121b4cbdc2fa39c275996d1c38bc46f40f3a5ebede6717502bb1e31c97f75eebc11a6a7701f67a26b185cbaf5615ef4d60c00f9cd53c316a43dea2eb65dfd2931f3dd14a8bb4e423a15c3fdd3068a728b656774dd4d83dc9fee7da17b671b105f6145a64a87a4a582833d5c8943c2501e547511be02f8e4813465a2a2096648402b449870de59550b4f0b10a05ce20b8f157a72c3db5b072b53a04f0edc5b5b7232688e9a22bde593358c9198363000000b020e156f7765bf1b5e2b635f43f3c75860b73516a1dee8c2e092eea6cc9ce3dc84c83a787d0e0d75ae66312e68d73994f462b9d06677d1e38397e0ea9759e168909df2d9ce095ecf8be88ae5f3f4f97e4f20fde7d42eef76d14766d072a191b40d42923f1d318f1578dc7fa5f308146b40dd6f6ebcf70617bcce7c55cc02daab6d60183845d82bed2abeb294945e98e092380aae6d61f7761a79a14a87b655557f10d132d09609d056325db1593038ca30000021c000000b016e041519fc09b69c67e1888df6dc098d533de9553705dbd744b85fc9f394ad82dfd10ad58995a3afb43890b27d3115226d291243ec7fb6586ab81e89f0a0b116f955df93a71acbe11e3cb669d4e163169527308e0573c7f1ddb427e41e1aa23ecbc6fa75ad2408aa2650926eb92d8e024c2ef323bf457cf0ab2f45a56eee9e37403bece577e05da32bbfb8ce0b38a8030261916f22ec66f3f301d8ca350552f7ea03dc7710b5f493564765e76a00314000000b02002b9dc81ebb18431f14973062e6d4b8e67f3bcfa29a540f447c578a0cd9944b8b7fbf65e118e5aebd92275eaf1ebe9346257040f5597b6af6b59cb7525618bb108a87e2956232e47dfc487dc738e7277f4bcd9b8224123e8d93fab3f8cf2e26b91cefdc7f6e6ddc3ecfc6400f4e50616038decfc76c4df9ddc7b183152cbf14e14cc547b46a177c81f9e1cd3e722de17ae01d3d3b6567d4eef8884f151b22e6f5d688a63bde272b8f1830c821b44af000000b02911f032db35d86a2e74c41f0753d0231c508e476428b2b315a95174f746e155f0bee2560932e9cbd4b2ab0420830b31e194c3d438ed2ce83b234357c96cfdd411e7fe8c6d0d956e75ab8f809be31713ea19cb4e79fc2ec6cd29073114029bda226c9a8d016269d9a860dfb9a908509a2eab97ac92ffe1a808ea83e4405fb7ed247556a906c0ea96f6d6679f2a8e2e582300a6d60808242a36e5328ebafb742273ae4b6afbddcb399f83a1c9b256ac3c0000021c000000b0080a6b9aaebc4ca81f00b23e6e3b12281dcdca6c7cd2b084422ec2bdab5e4562f671b2bfe0b0be48de7f0ea19cf9c41ecfd18605b4401cbbdda5c1fb35ba9241c55f10db0bb32a2d5b751ac321bdc9ee1e61235b7ffded3fd6e0c356655b29531b907338555a169d828f344d4201f8031573f24ecc80608de466c7f8cd3573d149cf3e468a9dba9a410bc2a998dc5cb7190516a918850c4998cad33da28d050ffd660eb9c3f7edaf0f0d2b7d0e1c5044000000b00c98e2987dd40a8aabfeb0bb2a47de12886a6a6bdd385b38e9bee32f1cfd856e7292ba57faa8a52a8e010217752f5fc8c8b6c685624484113d34bcab1749bd0fdbc22fe9df5c8cf98a033b35568542f3d254755ef0f947ee3d18b5f9931efba4e0a7521727dd971d3a074c52ab86dbd914c2d77e230ab3e356c78e2cb53c663d1a0f47133e07ff122af90b76703184590785903c281935b9668162a57197d9c219bfa0879ca32a82707f74106b255590000000b0096404b01f51c729e13f9b95965d98e653dec863e5be1bd4a8a782fbec2e218fda4a93ed93e0f98fdaa8158bad66d6e524cdaa908f1d736700bc0532f29bba86d878f6babdc65564c4a3c4836f9630ade47109a87b68b874edf8d5019742de654847ec0f7f1737dd0ce0f4308b58c27c0d5aabbe470a8308b53b4d04553c72b492cfbd92c5cf38ccf4a505887cd9b84e030f5fcbb105d4dd9fefa29f7100d82f944ee624827848ab2da60561e1ea65220000021c000000b02e472be79cdda0d1376b936ad542776422024211f572f33cc8dbe09c6aa608f890022e2063bc3090b17b1f8e830e0808bd9e48732257c5642dcc5d31ef39c154186fdb26246912f322b25f5e74dcca59bcd442f9be8f491d730bd58e7e099cc0dbba6109fe5eb6cc58488e979bb5709515b9f19b56c7adc7aed10d537f4aec7f1c5ac817e4b682a79cd8f341a7db043f1dd3a691ac10ff8ee15f05dff769d084925e49894bb1f39a5c124854aa8080c5000000b02c352797d080dce903943c97eff4faf2f569d4d9321b6ca7abf7c069628fb9c4791dafae863f177933ce8e0487f19d3a872e928cdd0645c826be84c86dd2b7df1d3c264b35d943495929b98867b20dfa86b913626e2f9af47b087e05aa8f29c330028f0f32a91652d432a434ff9c06f62d1da5875a2590a3758e18be257c202b28918464dadeb371fd97d045bb5526f406a6abd63660b043d23f6c6ce034df82dbd03b6039f7ca80178285f5f5ff8013000000b02b5817de543b4d31d0f089e662708d4986ebc05442e3e7e371db7b659f5c8b0b81c9fc4aa74d90b8901f87bb30b507cf761116f1460df421c0df2949dbea53ef991dd7a93fc158ca5eea706615736b1a5fe2cf91ac8c02841ec0afa0b2229b7c0e19e9def8a4aeee956dc0b0604119500a3aec9b9b97315378993bebbb50b1bcd1646a8fb1d06e150adddd982e9b4332230532356ed13906eff0611ddb4f81167a1a0502eb78960eb8c19998a59ac79d0000021c000000b028864e6374cd4db4a79e87a0919a9455ad0883980053afd2506c27ee7c10fc1df7c983d4669740f0188bf7d94676c8bdf9b22dffde5a4aee1cbe7f5c687689f5d8a9041d35a6fa0d86fd0288fcf9275d2947d16ef464ca0ca702a504aedd1bd1e5f09a39c1fc43d0dd5b7039d4ec4dc011a76c6b8d49c981fa2ad386eb84e477b378a581c4cb0f64b499e02b1a1d506a2b4aafb55a2431bb66b23bdd6deeceed68e11f5162933fc6d7f81e4a2dea835e000000b009dd1bfa522f4e8d639194098e5c01902c947968a930ac02618127ed813aa59f2b4f8212d5a993b7893847ff4ebd1823b83f7fa10bc789ab76a82702d0ee677b1de4860360f7aecd5b881fa6f29e6202d72ee7a7a667cb0e82d3bc0d39f7559563627c9fa18f2f9a8cce68b664ae39cc1e2948bb277da3bcfa275a41b669e2a18b8ac07d04455a17fb0759e21561e731252b5da7d0fbe7f40765c433ed08ee4d46a8d21e0f7245c0c8af4223a0dbd154000000b025544a5ac31d28adc8ca56e1a3c45994754e1d5bcb9576ae8c579f1a051e41374d45817264c61d1a32758577807e2e661b767c466d5b48ec73ef711fbfb32da12ed0583a8f48188c3c68b0a8e5ae00d1d751e9c24520392f61bf1ae9b2c67ccaf0f885959d23580b76140073c9690b862468b2d15afc48ff66f7eb8b2b5700cbe964215afcfe09743b652a19ed0420ee2bf7dbffa232d16db26ee6d1e4a5b0a0758a4ac490e1e6570bc487578525abfc0000021c000000b0127740f7224a0c8b412186d4d493b8a1d05d7c7520ca92fcdc044b0fb7dfacdf54aa781a3d0a69f177e5d3d34a9d46835c2f724be739ca01524f5dcd9200729c8789cd8852060c609c156dd9a1373beef99c0b36e8a02e9ed1365fcf504be113761ac383bffbff8d3c5c2a8ed091220216beda3d0219d16fdbec0660c92eb97c16b705a5ea7958ce5c49d23f70a5bc5d19b475a425efe8e96188505b9a1c83e98915c1ce0e8ae4a9933058023ae3eea5000000b0169822ca0c4606833952b08a957331e11fd20343e762b03d88f13e4aced2fa74d6ba7678c0707e4b19b167273d4c0cd142bd932dc9e8d9357aa4d02aa620e28346df49d2655b4094f7c54fd48da436cc5bd73ff6ca708e5330d52bf4da801dad73e51d104c27bf057fe66d7e30c472b3269c3188e25571717ca399b5efde1092045de110ddf61b3227144115faf4e8c312495227b7c1b10c20ac66e7b04a75eca8ba0657f11ed7490b1e98f0ff3902ec000000b0208cf391af80571a5f885b38e660098fdf329dcfb558ad86dee8e9e39faf677b1875bdf05b1faa165baea48563981608db83d2bd938adc2f38d8455f9e6e7293362e55c28707dce1456ff8c7a4d72da4ec02f09ef5ceafcf902041234953780ca7b26f2c93914d63caed1ff284fb95d11038e3db46b3cea2a48fd700038e33119bd67a9a49e17698c591adb3ae199de70c358ff1773cec940c2ef106e6533d282d6b10fce9ddb1e25b8e54ce817ca7550000021c000000b01409b3413b1e60d7b5e51fa92d6936a33f2654f9112f3a36384f2c20ad6c5eceb98fe4d32ca58e1192a276e03f0f67e4e5181fa99c114790e15a0f2b1b58e82b4f55250556b587e0d7972a05ccadefbbb27e8bd4e2fbbef0640cd2811217651c18bfab3eab220d11398de7c7988c958919bfeaf73f630c7bf06dcb4872494cd330f037609cfb2870e33fd3690c1152a423b47c327502e0648e45a9400370aec1365b4fe30ef301147dae0ce12150ee79000000b01d26fbbdaa25fd83700d3f37ef4545b10004eea1b4c0de66f6082bbc81553294ecf6362725760a59a2684482bd206ef49dc1b350fde9a7c1191c2e502c5989f90b3531a140ecd37d9ecb44f5e80823a417d721b6fe185271c9a68636866ed48aef22e8c719ddd1d2aa0d06357ecc4dce0f3535001b029b856c0c5afef21e9dffbb036626ea2fbd17112a999138f49185066809c0f14331e8fd83ff9cc6d5d962d6ff71ad6261a9fbc62a76e2fb34d320000000b02c1e18d012849d276857ca21e7b8f72ec94b169de1a3f886be3df604f603f9544721c8f715cd39c0e27a698b224ae5444aa8e1fb69494d60d98fae355a7c2e607746f4951dbf2093648c148eaed4d5dc2960614189f6eb392bc87c9872790204502fe8d501823381ca6ad38b66e7d431008b956f3feedc226f7494b86632033493c145b56e601b1c8081071263811d15102c27c136d9da0675d7ef96bb0c0018e3325b926e3c182a39f729fdb8e97d0700000fa400000168000000b00993056e413cc581930b99e309f6de023b037428756d097804539435b0383d5395f48c8d67d73d5a6876124d78ca108dfab15f083ef47336d7c5b11ecdd1e6c005c1f57e4d14583431af797c5db851132106d870f8cd1d4f19f1b3f9a2408f477a4922cbd33244319a1fc31535d669032c07f2e8a79a33f878691bbb57aa5a54661e2c76bbdc8cd24968c5894707054a30143679554661c658b6994e9dcc6515eb14578d4a4cd13d93a058820958177d000000b007f0bf7ae23a28b4f83df38a9164137166848e0b4f2e4f9033f9029cdec26241d167ecc138c1daa3656b0b1917ba293bfdbf2a0fd7c08224da09a538d4b58127e5d99a535cda3c954f914a58a6f32d08a856ec7c4a772c36d3aae1bd30e6373732e1019810a90e46cb9d223bb2c8a42b29666de586f8b1192e8ccaadb9a69859939e16e3b8b1f49b031c83abb91f7ee4152087741b4d794d100d710f73889c922770ac6136a8d44a68abb5ce9fa2df1400000168000000b02ef44d3a2a14f687a3798ff63e03f7638c327e5a7a9911f4deb837cf01e6cabd96a509463c7e5e9755d0519c3d10c8dec386d989c5e7089710ce0484faed0525a232ce3c344f075e951a3f31e71e794cd8341f8b0e226ea53400be591f4cb8d33f734301023dc3195e236985c9042d400c747c8b354b5973198ca6623e717bc27336ef4539b30d82cebc1abb24ec616f11da87cda13459610fba38626f44d068ebd9a76371b202594552b2d39c37c3e7000000b01e82753f67a28c70daee732d0bd8f6084cd98cfcf2bfec52a486affba1646290d7b0c0e1756c131498b987fbb5920b529a680b00955997e551b6ebf7fcf3a2b5f6ac386fbe9406d3c42670e738d8fa2c0492b57328902cc3ffab62b161f8a70dbdce7a3f00b36bffbb968df1e3e281230da3ebcaaca043370236c8c02be23ed6e8c73725ec9815aa816879f11919d8931bd6a6eae6dabd5bc0c83b15bfa2a432f78c2a7efa21bf3487c59149bbdfd07e00000168000000b0166b836dda2128c014934b4f49989ebb8762e8e18fe11933781fd327c6fbe1cd44dfc92d910eff3ae58d60870bb13f84378ade9a9efe3cf3a775b7271efe04c791e46522e04cad67aa4a27538a9c0575f0faf70c5b25f40d1c29056d0777a8507737ff28f1af15b78ad8a0216656547d24aaa2f777e625232a5a2b2ac157a4c159071c4104a8ccb4d029981a0597cc0e08dbc1b5dc34ab9ae12f32d7efb8bb930c8992dffbcefdfd51c596457eb93f89000000b01c3bf6ddb521acf8dd933e25e25e7e917480ebf1d3c25fdba2bd5a5f6d772b2d37ef73e6cb74a258b264ad27eaffec4042d1bd73b2c935f2781df7c7383e5d3a39eb47a33e36c4fbda739e182408050b319a5686a7b7c7d4a85ebe9c9a917502414cdd36d4be758f665b4757415dfc580b2f74ef51ce99437b4d2b0eccbef540f80a66ab9edd4f84baa1acaa9024729216bfc3313f268fea0e6139fac2a14d94a686b3b13a24e5e3806d1ed73e75b2b900000168000000b019ba6d9ce6cee3bf907674558b13fe54e0aad303ab56142391192e84291eddb6eba4703f22f1a5a1870e70bdf52e2cc7310258b428749751bf56e31f621d406d04107633861fc7e767cb451bfd9f0fbd10cba830438c7711e3c2a21a67b306bd803c020bba56a6b96393f7c431fd2fa524793ad9b47e54fa17c60b6291e2f7fd177fe9dbd79277011b49306eb2dbffc31c486d4ab1ba7ee66f7531850147468dbe8c927a3e379082362e47bc4737031a000000b00b958a65e96f17c4f0cef6901b33464efe3aa4251fdf802a3ad6ecb75e63d296ecec10c68ad025a93e76e543169333da7706de5dd0c689ab9a225bec3fffff69e368a929ea4cc49ea4b182081a6ee1d89980da467f4dc210bb601142702cf4d604fcf60f9bb5ad154701c8a0827dce08194c332f94b4ca15b7364466de62568de8b708c74ddb1abf3b0152c20e38f4e12386ccb4f462b3ea5bcf5c441a191611b5866f5d00f014ec14cff131b896d3dd00000168000000b02beb493e30731ae29cb3a3b149703d6580b5f7e4b78a13ec7d186ec1de5a577c41843b8bd85125062ed23bf81886473d6184d870847f8604fd7bb79b36f8f659492767dd82d822ae94aaf40b8e91edd4495c338a61203519b498bd8b319c752bc4b543bee5f7bbbf4ce76f38c41c17b225f068db6546bdfba698ab52763de2f462f605914ce7309dbd31dd5df02d919a09d5bdfa3fb28de3ca9f6d454a3eaa3f617605276b194b66a3cbab49ca31d9a9000000b006941eaa81b91b05588400b17ffd8d3eba759c9bd4a3779157bff83a535a189ff1f0da1e833050caf22653ee962634ea6ae530a60753e7fe8214937318f614d20d5965a62cc7363c998163c1da96036e8e2d0cb941e136e2178cd0fba85e6e653bd9f7e2c7299553bed0fd488126031128b03cace6084d2f33da686ff32d45612c63755e23172405824c02ff77516e1b09a4fae5dcf69be5ce55fea8e7d485c59d9cd808c169ecb210845ad2dcba5c4400000168000000b017f61cffbf2abe12f5e0c76aa59c6771810a3c3f53027c615eeb8f26ff6a3c9370aadda6970eb3b4323f39014ba9bd9d81c9461d92d28b94ad985e21618494d55efe2bf4f34bfb843c44f418a05db90ce2cbc887f010de700fa7ad60d167b09eca518ca798cc3cc18b76535df79d207621e7bb900d77a558f847e20ca6b2bac4513047582f698087bd06beb2470eefc81b97eb5358232b732f4e212baddd5743ce661665f0aa2c6580fc9f7bce06dd25000000b00d6ade0d7b2aba1dc2fb025a3d24613f70e29a6aa5e4ce17a6a73099df5d819ed3244c6ff6f0b5e3e648fbe0ad42a3acbff05d194905a101cc0c0e6866c0ca7ffffe6888079b8f1d97e19c6dd2f75886f183e2ea68b40b5081c4dcc4bf98dd3d89e801b9efbdfe76fe5f4520afd025dc13051c7f1971e6443f3234b70c5d310a8122f96a384e832326fed78b02c5b4110dcd5b9765ad430871802086a56d9242f7d4793e0ed297c48c93d2cdd9630eab00000168000000b00724a46f1c182187fa3b0bc3b144d302996633d819ddf632fca42b384073c5e19dc6d895715faa5952f7f9910709e197d5963c8af0cb9fa06038df15b3bb6f277ee74f488c8d9f7cfe0b43f2b1ffc08fd3b79367348a29aef78db3a28c511ccc5461b8d6e3cc1c2a8b5302a2a2873c190cb30a58fbf61bc8bb5737c6163cfbc73a64c2ede95174693013f4c3482763a51cfa929ec46f606a06d7795f2612f628f27ec731c18c1301b572da041a7fd113000000b023e302bfd96a3e038b6e7fd180946bbf7858c1aec17fb07b9b4cb9f18fc18cd94ded0dacf5cd55427034084e18707adf60e692735c6ef39f7429cf8bfd84f2073b2849fe11c3fdda778731c47ee00b6ad1183db3f6ced5916280e4981509589725f5b97ba837e59371131c6b392b3c41292914dd2cc94cc7112556aca7a86b876642bef370fe54d6d176583865a09c121949ccaf9512c73253990558e31247f65e9059a255dc2ed505bb770c643f524900000168000000b0216e4678e3aba87c4962c17a3af9d9e8dbd097a881f96a9fc0128339617b09532ab51e03b836c5b65a83ea2308637362244a80a09116e329d8f5fdfafa54fd84d589a9c393582f263a423867da11c779ba47c175835717660d67ad6bb9166b1e96eacd8998a077a3c83553417062c6602a717cf56dc23dcee582da2fe64002d6e0cd8928815ae76b9a4a39f976d940f4262a288922213c9c5f747d9e9065099a1872e919029127d5ff457721d408ae84000000b0216341e7ea74904a9b0113ef8371a302e654801ff47def644c5e21ac24ad35f9f28c2618ed49f3287fe1ef5999823692691ec006ac98128cbef83c28bdbd3992aea95511d5bc2237cde1c72271e50d0b04210d5ec5dacf04f19fbe3c7ac27634895fbc2067a4a87b3d580f6d1e1c5bb42b7212c0d8e939b1abcbb510d3f957a346ee34a6e64d0e57628a9ec47f4f930d1daefede4985470d8aeeb91f198764ec4d8c4c1925a3be32bb0983c38d8f3c8900000168000000b0222b4478424685e8b324ae255ac4a2b7d678bcdd8126b3d0c697be8e4d901071df30c6840beda54d0e4b4da5f65182a287e6212a09e181411d4a5b99f7309e9f126f2428748d9bca6ff46e8ce189d5ed6aec6459c8342688b697b4d36260390a7d791b8805c63c0b7d8be6b46018112c12ccb95deba07882edd2c384127054f548d0777c0e405f94f15014e3554dc7c801293d6017e13d6f89f063edf2e1e862972cff5baa410d50540da071cae67210000000b01cb66b11288e071b14408dbc1c0c421b5dbb312532a48d4e1a6e06746e6fabbbc50da00227db832c60f11b2c20b8fc6c02a9fb6ed1c033aec7fd3043a94b53f17e92f497edf8c29b24f28ed76eb56a173d8c568304934465f668b8dd58241b110c8f1bea959d52d60351be371926e3532df9dcbb5d6b12b1b6ac74788ecd55cf8f35a3a7d68cbf89f1dea6d7d30605560f2f6f1da432f117fc947bc4cf5e6736410cec288742d9580c4dcfbe4c422ebf00000168000000b00364f34c8b3608f4b96b3bc33d84e6aebfc23e0fe148ab3f564a663e1d4135896977fac0b44d3bf549a25421cbdd5713c81cfd948c6b9c4551e06595c090782a658e3f60c4f61178e81077871f44d91caa9cfc71b8d528f3b4df29a4590cb36c11362578f671d4b01f32161555038e4c195b970e10e1fbe4b83bba98a2b9db3e9b6692f4a309b2d288395a9f7ffa3af207f94d46bcb5d6e90fc4095d9f2021848640b95c3bf5d3c681e8e5c7514f91ca000000b012882564d47eaaa2f21d5df0c4f543b5c0ee5a5c54182866f7d48f4b7e9a85beb4ee981f36e26b3eb6cad58925c95076c3e177ca09f166a7f93405163ae53578aa611b75cef89d3f54c1bde06aa041da4bb085a2f830e737546486ea1eb988ef216a80b59d385b8406a568b3adb0c0dc166b2fbc7e43483de47efdb641193604e28434f5a9b9231bce4245a1663d80360845720b9b2b3bca2c9ced059b1cdec2313dcd6c0217b4c0edd09ac70594106300000168000000b01960b810de349607c3c41f7f7d3d4ab8b64e75dfafa398efa48e8dce92282de1c4db242f15a2520fa00fd25b6f427c3da36bf14f101efd4cdc3c817f000481f908bcb8fae4fb15744a114bdf97701ba72a3fc95b4aae58b9545ca459e9e8cdab93e009b47a2a126c18a808eb9e4d9cd51cac51d7543765fa9bc8abf594f70cad461ff4d661f5fdde70e852ba6ef7e6f708358fcebc7a4719dc1a5e0c9ebc3f32f2eaf63431a4ac54c611278bed5c2b5b000000b009ccfa3e368ef2c3390831479c2e0558c1ced4ee1603c0a16fa274b706712d0e01a1e5f9d8065df0e32db25d920582666ddb59f840c3d4ce012977e62f58dba29549af0a3679c92e871c60613dacdd39e78a248b6199d014143f2e6fc84795c37d7bcc38b90aed8f3f7d88b945e23a6e2b14514d02e1b09ddd1bb71d7a8563bb3c6ce155c92ef750b838a3c99d80eb5f0a93daeddf2f14578fed88785f5ae2ab2dfc93f6921d078f7baa78842b9fe2cf003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b0241845b555fc0b13833d757e6f14788240023116cfb27ae76bfd5c78e9bd8c723a02c76c035bf77cbd3948e3688b535999ee50f95e7734facb1c2c9e815bb5a08184c78961c5387ddf042548a960c54f3ed9d39615c7e74c4f71d3b6a9edc68419af95e5c77383fab7d0fe6866712de923311786749c5fada572538b14fe37c91b73f69e3afb61df76a2b1d05c340f1b2ecbb461f8f43e558230de290d296c82b2d3f49d00f67800f48ed8b0d0f9ced3000000b01491edec9a7a784fdacfd0266462c336bb8ba29c42b49579df5444b286760948c760923f94af2ec66777c8b4b77667f39a0ec9e7fc3ec3c0a5ff0c9bd7d40c7ce2b267ae214a99a453b0b6a0fddbd5cf00aa26e8e665cd82386aafeb285b9916ea96b3d8e774a0d0a245dce8ad8c8cf1171942b0dcfeb0ce3af2c3675280c3812cf4b40901de953999bcb3824a7a5b312c2049a9e015f24e025a3f32e7b7717335bacbd02fd7d00a22a56191ec6c887d000000b02c0ce92b3f4f5365055675e438b46742d902df737b50f92cadb1dc727ef185da409a5fb7f1a3dd96aa67860b628ff9d2f90aeb72dafc90b35468837fcb739a99f1e64fe2983f31dedd07df76a237c4700767f25ee784aaf8bf54b36d60068a37cf9dadacb47409afafc07746b9efded4230da7d1de4b0f2b54eea0640b71e69bacfa0f720b4169d46d7fc8a2ecefcb2227adafa074ae1996f381603b9c7801c8d903e6c331e510a20107b41a8f51b0690000021c000000b000987f3e014886412334b8bca274a590b93c7e270b69cfe88b47b738ba7e5e6a8eb0e4efca926881e00abedd26b945bbfbe6159d2b3476e84d9ca5ecacb225e9ec0eb9e6122f39eaf15656261c919ec5934f2d34df36b04d4127ce37a7067c473ad9bbfb0ab6e8d79f232ca653eb40b5019a8d1ff4344ff3bd97d35db9380650be3c6c14ddeaf79a5b417df286cc6fb61cdea16b717fd3e071f22aab8b60dcff529720753ec5128d4875ef9215dca818000000b002ce7e549c4add11ad91cdfe26aea3894417b9dbb6c7b35af38cb22ee018711bfbb17b2f4267a52eddb219e112620332d5ef0ca8b6817c96f46d5a5ffe8ab00a993fafc0b866e7f595cb39445ff91445a282b0051b2ec64a45d457670ee36be9f5b93b31d9fd52b8b2bb51a3e6eace820b8fcde5c080ebda117031144750b7699291089a6e0a9a768e07d5c07c2f518400df9953b863a66b37220a76c15ea9ad7fec1b541065832dbb81fa0ebbb9a57a000000b0097f6cd358674a91538a5b9674234547f120da125e106fdaa1b3b39016a4846a044c4991ecb9a006afc503b1d3eba6bd2cc002d34f6b566365d069d5ce0a0f9f95278aed7f12d03c718ca9fbf208372dfae26ca72a7462549a6d65daa625b68979343a8a4249f537e71cbc910b4a069721d0e822fc8feedd60cdcf1010f3b12bb7bcf7db3e72512d9bc9fc729231b78f1083d55f889a272d8b415cffff5612fee8154a55f2202087267c07d0d38a8f130000021c000000b012822690b61a8e6d40b284069a78ecaffb5f702d19bc629fe33166caa16af34cf3a8f299771c86d5d106db7f7583b0452e3e07a381679bb57a15618569be784c8f07ea47e084e6c6534338743469be888d9a3fdf1c343acac71e83d4325ca86babe05f73dac02d1556366964f5da415d1a08bdc38360687ecf797d03ffaa0a5442e915767263e31ba23a23cf31049eb216493b7daa4cc6b0621cb799c245f2eeb00a48c10685f3e1afbbd6374d397261000000b0167524aa3fbe2a156a8147f7bf619c8d73aa8b96fed3f57abd45e0ea5d6fc3ce01cfd65ccadd101da9dfb3ad6d2e81c59e69e06cc60963f99caaf2b13cb8c0d33d65b08fa57f83f4c5e8d059dd8cc33422adcc5caaddad63eb27e13fe8f66f3fe6f5d9b5dddf408907f66cb7d4a7474117e2203db33a581c88c62fac3b7595b45df67a6a44d87686e6bd94e5587cb1be28977c629259527c09b8d39bbdcc4b7d82518116146bb4094a3bf889aba9ac44000000b028f0d2b4e420d1a88259c1659fae20ed6991b1e156ff0702bd98959a68adfe0ee2bc9df4726550fc792882f39ace8160a17b8b26c1201353634d8a8158136680af19f51762593cb046e716b1a9cfb9dbbe1c0ca664c9fc56b44aa42113784cc5be2da1f101310a8e3ed08095654b8bd5237ce33e377f0963b5639a32875fdeb8407aa028fa90cc7e5e17b514bc7190010287bf5d98849b9f95ed76c0a193b1f167b8369616cd0bc433ddd8887fc271990000021c000000b00c6b76efc3eaddf16b81c13b44f4daa52534463284b4c1eb1e73f89d60f44f75cbfd0da4bd722c94b0e27f90fd922f41abec246ca44323e70eadeed0ba72e4e047e01aaa14837c95d8f5ffbbb6fa2925bb0897937295d4ffd790aa53386c7294980f5993785c5835e41c16a95ac1c8ea05ecd9b9c0a96d96c346d4b687bb8c17f9acbe74e37d8304652889d248d87d7025b3558325d48670fa02a40bbb935bd412224dc4a0e58a63df5afffe12a7c6e4000000b009505c49ad3903e58b5529adce7ac95edadca6900f8fa6c785e950b4946cd0caaf513cb91bf4f2af9557bcfbc09156e908fbb852d85fb95060a2890bb48fc140e903aee2df3b12e49d3375191503ca47e8325ae1833af14c3ab35155cfcef5d45c794ad5d20e23c3a6d074f9850f03f92bd63b718cdb66f126b1a3d9495779b7f815f34c53c0f41a5a717d48e50d6b8105a006440bbfa4cb36649bf2e095f92d20ec57729c706af5ce61d0c0783259a5000000b0113ced5c31767caf1ac88dfc558d9d69181812f469e5a1c8e7fdca1512d4475ace713d67f922caf428501cb58d8b2e9af42b5ab45a72a870c1f966b7f578f67f50a487f34a4860a5a811c19a927676964bea8677489df7d417d5584eeab6dc1cbc71205bc838279d496a6bf6676a2f670c9cb59b636df6b2a767eece57ecefe581973cdd2ee1705e02fb86a1965441da179e4bab3d5cba642b61f37e0c2c4cf2c96a6b56f2c21005c4f251a8d501d1c50000021c000000b02b9cc5f95ac2d99324681cf339ecb0344bb93403b703c3103045221e828278d747fe737d0d04cd2a5330610cd660133362eb301dfbc8135a09f95088b783ca17218a47d0a11e823f65ebe0ccd345fd24809d1d1d85e8faf91111e82e409aa5413c3f0cd55b1dd81b73b39eea58ff045809240948b2ca0499aa8e390ae910058cb71eb106fc280bd40e024d39faed63a126a622d38ec7357194573445c09af9b39856df585439892674a25dcc4b69b2be000000b02087ad59e58f9222a97b5e144ef8e0ef2181e0d956368dd477c6882d789dec2d78afa81688c9f7d431ff9cc9aac532bcbc17ec078e567fb734a8b0ae484702cacd08a1f6a3aefc91c9edaa2e635860ca6c59e3b97ebda408b3decc97a96866db4e335d37743c572cf309afe953e292ae10fe4ea9d2fee3c0f890c9d540822ee41223b2c2e9606c26e7d7ae4c615e126c140e2e50593116f3152f80a229f3837c39d3f601f000870932c7b9ed6e2f306e000000b0065e45ff65e2f3eb7bbee24314951cea7b83a399dde9825f8ee1eb4f665d3702c90dbca611ebf0f2f2f88099283bab16e30e8f9ca2b3bd338477b6bc9f58b1e8c3af2a46742ab9458f744d0201191cec3369a054cf816c74bf54df5a68f3d52291da79b40b25e7515950565d0e2d44930996e208848586ac7408cf71aac4d8d394ea90fefe4a2b25c0ea82934ab23530226afabd5f84cd4bb294c0cc32073942fb07f09a406b681654f92b66e1325cd50000021c000000b0133109232fe525b9ca0e6f2f56162c4595770da0715c1dab1982fade7bd69b503a7a2eb472a0fadaab6b7335312b520c47b857842e4b85f4492ec1ffe0cc5e4514a135d4d5364ed25157b250f9fc71c5e44dc1c1fad96c0147bdf5379fa7d78e1bf60d6862d5cf2c265946086a2e2b67113dccbd57d03d39b31a6b3f724546eb059d2608c0b963ccd4dd48c48b2391f81e0ad1da1ae27bdbc0fd9b682e96b97cf4f62fa2c626322d02c3c79e2a52fecf000000b02ce41887481e5a7dfb76edaadb4d40ca4c0a6d24fbf952bee48e6dd0404ea52fee175c687be792aed8163f558c877af3d9e81912b870da098893dda8068e5db85d94331e31349e4646739f2be43124e43e19dd5043536d6c4e89ad81f8105f2e78bea5d0f0882d40d32c6d87d4d7fc062f5a84e0f121e86e8338681b5aba98c65f745319925772ac6a9e6805972b4d1104176f2692a10a1bb62e6e4d97e0b1bd058e614a4d3b87a463becfe0f616d135000000b004326c86c88e0ce6e0b7374b6b726d2bea4bfc148e5db623ec09eed90edf471a5fe66f78d8ac7ae9e628fd0eee5eb8f4b6d880d07d03d980e3916d186f8381d32c5ad928898395cc66b42c28a025e3d09ae2adc8f62aa644d2b0c3d9a5c870d4b08cfd5c6676a92a31e1a4398cbe409306fab078467b3b819387805a2b472da57faf0835f2335f22f2975ad2c69f21d717371b641ac2f222f320c1023478673bf494fc70cfbedbc51e11293a0d7a51400000021c000000b01d20cac7cbdd24d79a38b4b49a06d35ed0334df5523fd474ff64a1f93a839f2731a099ca95a91b579b50c42ffe288c4067d9245b9d1ce79205ccdc482fd50c93d825bfbd063a268231376dbc79fd32eb78cccc1da00f67ec15db6cd9bd054762b88503e63974c81c559ea7efcc341999025869bd30702326ed0d5964eb92ac7dd550df2721b312f6affeb46bfa6f5c092d9168564356018ade9cf9f4f1c2077102a4de4c304b0f84fa2b54c37f5f83c6000000b0151388d5e57dcbc2c3d4fc56b267c5ae2402b4d9634a5252f8ccf5524f98e3c6e9ee4a85ee35261012d2385bcd420bfc93f3dc7322ce6c7a98c1978338bc9a2e4663bfbf2c63c0a02ebefe898123cb8b48ad1b061f28504e93e955157ae961cffde12a17231941809c6724f170c218321efe4a88bc45b2aae115c1f130ecac19c902637885e5062c4f21e3a3b244570f1e2267beb4adeb7cc90ca84320b4e746e999ee797d13681e0aa272b267a4d9c1000000b0160c822bee2943c87d33c0eb3fa5816cce0f12891ab40bd8fe63ed07510be17eec5a2005003fec0b741ce9792268d7c8646f906ec448cf9fde0c67352988dc017b608d7849fbec963b178fe6e4cc5dcbf544fa7810c284a23928c3ab1c43da2f0ec2b396bdc33e3a7f821f1a103bc1bb2a62cfb0b69967cd7bfa01f9fcab2460f939d893ebd39ea73155d2500aacaee611cf3ebac479bb7c0e98d47a06e905020caea32d0b970b580825f4bfb8e7e3560000021c000000b0216e61a9db37aaea6b1d43869fb145bea5992376f51ba59bf70e38105bafdaf5f5f2debb4424e482e9b6931c4a11b3bba403551063e355fe1be635d297c21071b3bf2b77b5158fdfdeb79cf99e93bbcea437fc6df2af5983c80930c30604cf15bca2c8fc4aa3591c8ae0b932fdfe91f71fffc8368ce30008b9c10bc29d292aab147afd5f4dcb65a1de74aa87f11155471c2bebae1eb0fca99e23e6c23ba142306cea0df30c25894af44bcc943ae23f17000000b00bafb9bd27decdd6b8647f2c299c5a7343d2739d2fb0bfe5b0b90b84955a0ab9d23434c32f8f0b58ba6c7bbec3d4abbac777cc4877117298d56ab1e8cc8b45f4c1718424322fd1e88dc14a33bf332767e14c40a0534d966a0ba0eaf5fb38c2ac7d6d740800fbf91dd0a242326170073420d6bd85835704340ee644dd665030767947b94d9f6d7cfb00a71ffccd5030ed275abdd1fb467acb74b1150c186f717ff5c4afcbbdaed9011280b6438fd443b6000000b02208c4c30828e865e44f9ea6dab505c76b24f61e9700b9765474e2ee0c53af03a7305f81d6e724fa1db9ae19a463d0c09e44825e779a9b889e333861e9c25ef34c3b9604c20ecdf1290fb287dbc1925a24c69149d05b3c8a736518261e3d338f5f80a7ed7863c26b3df2688a0ad760db2fd6619e637bb343f398d1c8110033c7e41da0587dc38c8d476039b4efc3a9f128da05f16298a92cee4219778a58897b7d0b97827556bd898b947bd35811b71900000fa400000168000000b00d8a999289273bc3c3914a47600a34810bc0d9220cca82094812fdd9533881925abadd17e8de1ccbe43d762121d85cfaa5bff81ca8ce3c25dcf67469799060019041f7efb94c4ae2a2dfbc04d82c82ca969026c4b79f69435252baa3591e7fca4f471c5d306ebef82e5269dc062704e80abed79dc3685afe0f3919cdf0389800557d37738cd1e30d10e94a8e855481c10cd3e7b066388fdb0d3f18241ecb35d8e79a7826fd7926d36af3259d8ea4d4f5000000b027d3017c5c57d4e16b44d5d0b765f6c952a17af6192793d7cf33bba21ca76ef59fd76808422f53d458b71c0a2a5e1a27d4bc65ca98fecbf4770f919827d4ceba9b3784fa17c5b5f6bed63380fb87da386ae4d26b4234b97227159f20e3025480186dcf7e4c2f3a2f68e7cb101a3275cf1159ea491f3ba02353f8b910b88fc90ca792f4fd961739e2d33ae35ede2d40de109c4ed1aa33c6ded9075a6f8c58b736b3c9aacd10e5f2691ef91bca06fddc3a00000168000000b00df25022c3a060ead6be1911e2197ddd3c9356482aace67ffb3f76558175727915e429141e28f5fc3fb2b5f022dcb1c713294dc7be9255ec21fd50d25534e6210bcec4c84c8069091ded35eeb70ad285a9b3147bca2477ad1df78dcb1814028010ec6c70332cfbbb17b0b7e0041e4950096a136efda587968771ea393c45883e1f435979b9e04e924987f26ac3301fe22384bd6ccabdf8a594801552ef8b99058819c17894b6f7141f78bf2d53ee39f7000000b00d73314ba238fa8c8d98fb96f0ca9755dc05599d91f39780f059066c3f0e221dbddb8394fdb72cb16f1cae7f5adabfa281b17e8ec8165bf914d833b3287ec901a9b41f15e7878f9e13715cf98895b525918092668bda1bed28a184060fde611963ba660f5ed167ce6e3c15781e175589241899f7c239f869b19b0126a35d6a8422791c6fd5f03a699c84da8a53f4e5800f3e2821cd8736e603df9bc6e741debd01e86f86f8aaaeb04f8d4cf24019a39700000168000000b02959fa6f0f8ae27418f5bfa16781e2d63d8714b8b2f282ecff0f64d1edc77f86b5cde927148cd059e4a085c5e321af796c794a0cd8aadc8af12fd14aee65e90e07a8b62212392ee29035590f2817d481cb30f03c4363a258c2c71fcd6386d86fd62e970d2bf49252cbaf04095c86ae0f039d7b079e62bf923819a1543ff3abe94b2d3755601a094fd6aaa976cbd24fec2e604569c23c78b379678f661db7c29076b100490867a7434e257bda6ab6affb000000b02ca3d29d88dadc3a1e711cbc116802d0d967f7613b8c32d0b2435b3d0f5e077fac848f6c2f6b106b4300631ed180bdebcd5eb0a7aa8aea295c4a18adbf26afc7c4da4c8f626fc06aa46ee94aa459c30b83200a896bf75ffc7ff058bb30b4df3295efeeb8c625ee4f4bc69551b51cf84219da82fd89f7c123bc83e4d93a3e4999d5fee4c46961176988128acdfab9bf250164a9d93fec653b0ee8df175e7db65de7fa70cc0c01655d6e93500b709421f800000168000000b02067aa3ec55e19be4afc9dc68afd3b966afd3fd0cf7059be05bfd37e179b32dda86ca57f70f0e329eb874da07ab772c6eb5380efa39dc22df19a3bc973391f5083d11f4619baf54fee0a66c7bf6a2b6d4890045edfba11c3964fd595b18a2dc502fea1eb6374afd7a3c922a21ad9edf12ee8721e8fc05fbbabd8f66919b242b7ae80f1bd20239068311804d45c49ee401059a969ed50c76c2ae3e5a02bd9ab57b5a8035dc9d9ba255fe6d86aadbda5be000000b02bd51e5ef268c5042e98fce584db3e8e601a9e4194f07d3ea2d11c035ac50a667f1180220bc84f3a9becda759531c138905bdc4ecade1567470ca9d3293f7dc09992d70b5e6121df04ea18002b64c67e615bc50507c4a2c68f0626ea22fd2440190a8a0b1ab8c196b26df8069ef19a63031702749d67eae08998109a0fcdf59fe0716daf6789b3d61e331b18887887571e12d979575f8ef864b874d237103c5cd0d7515769ef4dc037a7a9ba3ae887f700000168000000b0191588d846d396218afd27d3c75e8ce377fa3d44a36995c5337f042a1e8eb0529332c45d645a4c58c04b5f41613ad4a720ebbe7f6049217c1c2dd14ee1e4bf72e62a0b58ab13641fd7d77b32053e8498573aee5dc24702c535bf8f4948b430cb89d8430d822f3fe5f128c234f5f4efbf1f5547b7b53c5cf3d47d2b8c68e32c2cdb5213586f6bd57dd70131ab70de15fc1d6d7199d7b9af9939a434f6fb6507bb7b702147b76227c73bdab5fc8f639500000000b02ca1ff3a7c747e86c57c6a7a61410dac070461bab4759ca6955c940fbad6c6bf0a1661ec04c44dcc4a5357229de68934bdee546352352bd73cdfc3ad144eec493089caa3c03cffe8512dc8ec855d172e21a3543b06cef048b9d97c952a6c1523f5fe81783ad2d3a37d1cff8c9284bc792dd206ffbf687612674b170c5a5c983bd8c787db6e6b573b5e5b2097c1607e6e06863d2cbbeff947a0ff05c51e2a2c08bdc1372a63fd07eb9e497d2e79add86000000168000000b025cfd25796b63acbedd3035c18d2730121bba7221cbc84afefe7ab1f323e105f1a1c5f6b51120b7493a6576614139ffc587337872d577c7573974d55f75e0794215fbfd62a1b92b931730dd1d6883d2dac5c4a284ee8bdb56f5812b708159d48504bd255528f9d739b1bf19ce3f01a762766071802b20934fbe843951e0baadeed91924d347bc029d88bec044dd83f2e0ec98dba4d34897afb7ad76ff3100b00e56b03ae4ae08185b2c018e4507d926f000000b029e718099f1d4c6b997c7b6535717bdadcaba4827cc83db513f72ce3a11e6e2223c275a9c9c7824df243a98a44f161c9d8a11b47f57e710dcb435a2000de08b12a3117e6b3701723fddc69ac1d83c37840535bb454e2b40f5d6409cf6abc969624534ae34bc98db275257c220ca12a931f6b1c5136bd3393c0f38de3463bc28b97845453303c94fdb42dca4c0309f4d10e0b507a900c04baa785e8e8cb7f44b8b3bfd3f172e015ed0d3256afcf6c8e8500000168000000b017127bc5c00d762bbc861aeda9d63e443479426af613af0b8f6663201eb221dd203ef99491d011659c8fa79ee1515a23ce3b357ecc46175ef41aea1d5de7fdb61dcbae8795eb64ca1b5ac7542d3419d80433a4031a1df5e22c74c3defe15525a40d033b0283035150ec971e06ef5a91c294f41fe372b9cf333ab0654c5e03926049ac51f987ab7a4aa1f6e6a35b059d22f646d6a15c4c5755bad5b45e5bf85bd148bb514369c4c79fb7482e28fde89b7000000b013f86f4032375c28b638e20f8a9e0ec037e9b756a90e9a4f6ed078716d4dbad2ae506207e5a77e5fc736602af32512614bdd0b379fd82e8774199eea5a9e0e4311440c2c1c26f73ed4abc020e3d30e4b81a4769d0109cbe55da52ec2915d9dc1392a0aea7ada6b100e545b91eb627026012d18c6ac79d272aa7f7962d50ce09324a8a34f6fe728fd5865f3dd5dea75dd27b54bc35de5aee548ee74b513a1150f88882ea2c19cce5d45b4a9059138328400000168000000b0003b2be1d6e6f78848d9ed2c6d2de9f67be09eb1a53bc5481fa97364881bff787836538e1de69993820472221e07864a5a70764a64bb8ef1d9933547d548ba3c50482e5028e63ceb2138ea5cda6f1db59ce01678ea806e57af8f7863808f354717b2a87f9ff3ed72ab4fc1ce94c445192e18f2b9ac1d6a0134118d452cd74db7f7e6c8798f3ed8a280614aff5eee29eb0ebeddf363605971956b1919375aa0d86511bb78697fe3ae2816936f572a9d54000000b01d879559f6b2d9dee6a42e4a8c4d51b4aab427aaff00f565fec9653daac92d1da22db9c87bad67fedf7f047ee9853e553ec26a56ea77d1af58ccb2ce1940ba1d8c647fe091a415cf751ebd093ce2ab434fdbd33f9b48d2fe3b890a8c20e719d03dccf6597eae645d6a4bf0a04cb81c5209f0b9a9a768f713f551707bac98f7c31a67e82a6654520b3472f60f148643ea0264092f0ab01adcbf32c369eb3ea217827665615b0894122a86759c40a6fbf600000168000000b01255811a133976bd1dc5c48dca323f86ba0548a31a58b7c9899612a0fdf6b6b3415de5ea715d4c895b1cfc3bc543f1f4a977235e565a994b11ed59cb04c99058a6e132a6a77055053df3575daa9318741129503fea3f120ab9e0380a50be2ed55db18411e0e923b981aecb5fbf1d6efc018060def4f6bb2ecfe1ab7c22f87d42e412a7b41543129a8878ff8990b63d5727f578800e2630eed6d4bbe699770659312688421c682203497aada549c943b8000000b01ee615a9e2d3ed09342e2e1bc46a9ccbae64f7b5f4891097ef9d776734d4b4c2118c2f1a6eb78cf3b913c3063ef2e6b530970631333c70b5660677196ac8eaf303b82d95a816f21e9b737f67a6de69072eaa2613eaf90dbedfd62a7beab66454d68815f82f0b8607c7341c7c60d3f2f30974cd85d3846ff05dd69ff8e5cd5ef90edd43fbb432710dd1accb882ccb11f219c9041e8b12cdb767cc0da3f2a376541bd0aef276ad8ad38906bf648830b14c00000168000000b01025064125d09ba9bcf8545d811c936c3abe5ef8a452f12304bf27d7834d876f740b6e23326c3773292c2ba4b6ec8eb8a83b4c038d311126d753499943047a04a522b89bd8fb394b1dae561cc3f846f3a1f7ba76301301929095d0e512f0f9dad211313086fb0c30308927aea9d74e7b19a7f1f161c429588514a64b0ff26cc36840f3d74112cb346306a03444b421531d949c7f2b712c938dff4ca6a10970d7e81a0d136140f9a317552e33e5f2351a000000b015fef05a91ba6e079ccc22a55e38f92f5ebbb6ff4f50ff07991013a89418cb1503a0afe427394a49c6ea69470af355f34564f45a4cb453b6acf654a100d739b025e1795b8576597716887c5b6b8c13ad55a760184f2701506d32c2634545d751e2b1ae279606f0a425a2b985c3bbf4ba0664baf6242490cd5e8b20f2fb6e808a0b1918ec5a15288cffa0c3c114c55171238d154de8d6aef7175c8c5a2708218b64118857c05561004bfa46d32e5586d400000168000000b016b97c4e7d242d2a25960efc0a6628bf6aa320fc0e870da76517d925115a61fed1afb152d78e0e1910448c48bcba2ee601286c0a1a67861c5453cfb2b8aa550398b005f5624709dee083b992860c8c08000054242885f7b28151519b5d64da00199c68ceab331f3e0330cc7cf966fd492c6915457e0fd584ccdacbfa6b506645578b4887f3670f43caa4693563d42c332b47814849209809e832159eaf1c22fb95682f0ef416f6986e43550064e50be1000000b010988cb4617109a4414d795f6e00b91c7deb01d9e1787aa6021f430c7868b7ecbccfb248a474371b50c508daa3f55744ea8b7a8fd58e68c581ded93392019dbac648eb8dbc0890a2487b27336a6f29c945b325131daa9cd7512d720e20ad1025295287b6f22f8572867929aa5d68f8a61247123948915c38234d3afbcfd1d62e5940a55ab10306a540fe858103f8b74d1fb4c44e42f8b761f29493a6f7f8d26f1e0a8b9136641d23c0a04b02dedddf8400380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b0019d87060d00d2cb53c7c7de12abe9e56d46fd2997f09edd82b66b1b2e0eb3c9c8edd3d41bd5d1ae04b5107e3d2aa7bfc7b3fd0a057d2745de4f70a8c3d8a7110e903c41653f84191792fdc9f4d76fb0d896c189416841c05756852501a4bcf13f0b33cf1ee219c9bb3dcbc512e542321aab874bcd3fbb693de572aa43c955e1ca6795dc529bb5a86c3f4484c0da83b205b7198869b07f422933edada3acf0c2678546acb414dad8890adb6ce3f54de5000000b008b2bcda62daf86e4c86ba41a92b0dfafda711f8243ce29d54e83332194839df6d7f813086657e0e69f76b2f6a730190b9839110bacfb75fe3237c5c54bc225312f6b2141ffefffa40cb54672d5930b02fb000a4795683c8be559b80813e4cbbb891a87d48b47104a3dc149750785a6d1b9d0ae5cc838bb9f59c24bd5c82b7435d1845db72bcb2bf5540ba98f5e37f2126ea0839e710d7110d251b1a92b3d7b03aed45127aebbf78a39d71e43d96002d000000b026ddd2f6d7ed7736d7b7b8fb46b515a219eb585c5700de9be10980578cc779a33367f9ff80f0783b466f90572f7a55b3ec697ab26a94e017e2bde544138c82da948ff431fb20ce46b49eaeb20daa617d2af3c6459af67a862baffac2f22de9a9d4eb1900f9599c9511364521d1d122ad2a3a9d495a8ae48ea17bd8f1d0cc1befa995da1bc1bfd8d33e20c78f284158121f2cb7ef1dd3b3aae24959548af66673badd1a59a20c17875c26a112d1971d090000021c000000b02a73de79f17e70e1e968d023315bad044c8f520aea0cc12541e658465d9cd15187e7fd5b06ef3ddb48854230471832cd9de41e353ed4503d61d22d34817db0e61dd7bf45b604ba9556e3d6fea225efc064610d41525e3b6c319f4f64b4de6d466752759f78b2ff3846646b6910742d19097833932a05491d93678f3f5cae59351357b5ed9fd7ffe2ea3130fcf0b857cb2e724e0712131fc04e323d874411f5beaef08641bc511090283e285c74f2c3bb000000b00b0cbdd316ed82263065f8759e240cfc70facb3089cff7ba858e32e657406fd1c1386d3b5cddd71a528332f3c0d7552410afd049318c63721cd4818deabde06adeff7be3ffe539c4dc82fa0652ab9aaff4ca9fe732ab97851160261679b05e5f322fb680a53e440c7b9ac6fb4633fb1c2880855c5830b0b8a32c9d55ed2212b45cf63b67dca4d8887bbc52c5c308f63800549702dcc3f6308ffc712b5fec11c4c59bfe345de84ba5246d815877c7dc3b000000b01a975da369103f6cc29b296aa7d1d14441fec6895a460218f5461dc6d564fe5822351b7fe7bded98cea345198a2c7fc04f5e8f022f842bd0b4a411d88be682a770820f0555468117242148c371ea195bc1ec2d66980989f4daefc8d6eb415020515831af8dc935d49c3d002ca3530a7301d2f54e643fbd5d252acc06bab9a7203b18c357c0773165d00962fd2a8a74221430b10e9eb13e29d85ac4e3fb6fc93aed60d5c45374df2d769a7c6edbdcb5940000021c000000b013c03321e53136e4112cc2035558f60aeea8598d9de65d25036725b0a66848bebda4960bb42b440fe8be6fa17a76f513c2740186e91e08d19b1d36831360219a0aa0ac5e8d7eecebab06bf30042c616d0ce27db36b68fa2570dbbab86e207b7dc860d425e38cfa17b4d3c44582dde7e424915a0f346a005c889d93570eca8c3e80043a3bcd1802933b3efd0a9bcd4f1e175c3b139c74d8fe467871477193b38d65216159c874dc5145878222e6f8d0ae000000b024c6930ab21745e218abd1d1bd035b87bade5ed881bc2cd4dfd62b9926fbc3d5e288224fdc61bd76762fd353c74db587554308c28a591d3da328f382521cd0277a10d8cba2540cb713b9ddb93ea6f642f451e675169335a720a134acf7df01a7577003c73b536a67e18260df0540dcc41022b2c3891f2c9138c3364a287e0f0872e4e82717428467ed6b4d414b651e090ed3c2d6a21aff030f7ac9f41963b2da8b5846f6fd7ee218e5047543d256dc8b000000b009fd369a0f794ae4b3ed33b8df93ecf01c9805eea1a9a54ce4f717276788048e2c0b7cab7595a6482221a56c35fefded0e9326f7010e62bb9bc24d6be08eb728e241ece56423e145eb05c41512b8b707e420b63fe4c14779e7abef462d3ca1f9445ed3a5df57ac2fa1668405f113198b26b32d8ff5049b42fa53c91808a94062d0f0c6b65667099effeb8005d96f9e3a145a83c42e88cbeac58b77219ca3c12fc76754f06e1bfe2c0c028cfa6ad16d240000021c000000b01cb13d8bae7a3f15253bca3eef739e06d547942b3f652ba2771c4a3662335678dab91ad8884a529656e43158f6b13b0d40d13f38d22e658e786b9141ee5b972424e8c850441e6ca3857c5ab5ee76912ae5f6e3025eb3b06e9965339a61584837994803bae699b2e152a1b716c7027c8c09200138fd9ddcc20cfdef76ad321f1e7d6cbb604137d2f7c6563e6e54ef81f40c2075825d698d1ebe3e38e62d2a7ca7717c5741ed5aa20fcebe6d036894c4cf000000b00e1e67bad8b886e55c428c1918cd4d6645d30020dd8bda03e58d332e8172129226af7e50d2d6fd31aeb46621a919359ddc46f7956afd62e5190e071e65f5e29d0478fd010791ce800f4d6907ea4c218205d31ffc7eac846261e5cddd0c324744778c2f68ccafba155665a72e0e275c4b02dcb39c061f66b8bacca0c261603defe8db5fbb40d125dd126444758d97a0911725f074ec485eb3ddbae1318063805811fbd7fe780770fe4319365d06d081f8000000b00ff95992669408b11d11b0c714a87523f062768363851b17f72f269e72064e97596d022146d7b53de3e7cedf37072d18553326b32ed976c3e418c994dc0a93f397e31b6bdda63a6ea480f6193e1b96d9a857f5cb67abcb99dc4d9703ec668bec6286ee827eef768a9e53b0b8cb1b665428ec4c73fecf87480cf8bcf4384b9d09b5cb4fb53ed9fd1e8f200ca066931ab62cecf537be1f9e69b55f045327fa6e228198849de3b449eaa649d8e5d95813fd0000021c000000b0258583a4b4dee2104eed40e47b21ee84ab393fe4776a1962ac8a61dfbc25a1401f26e3a5f2d700902a17540abb83aa578d2b91eb2c10a76f762a4240d53c6ea3559de63271baeea039affeb50575dcb8982e1cd1abea64f320b8a3fffe0c68bb3fd8d4b537d3eaf6d65fb4d216ab152f1065707cd5a4d4c866fc85432bd622bb1fb14c645d890720f86e50d04c0a6277084b8f73869d85556bf2c929a3b928f5e2b10d4058d02fdc53ce175ff589ae0c000000b0038383d698f57506d35ea1200f5dfd62950799af3b39c13d6eb6b2a318af99cbd5ac26edeccfa1291a58f8cb47e9494c78be935f61e9243dbca339a6a8e165401f25423c525d3fe79022feec6cdfd9011cfceeb27f69b0464b187413e3c889e3b3d1063d3fae02e6ef5afdb35e2f8c430d71f13e2c3f97d346135f0ebe63f71af72338a960e45f4ecf6e0e5a0dbdb161053d16d93706b5e208017e5614ae9b139cf9c69de67e275024f8f3e8ee811840000000b01ddb36a91889e8baad061a62ea52656b9c5517be0760c9beac40cdfba671e1b9d52df9fd518d805beeb1b2e43e17f1b59a3b4e5774e323b51256515b85122d6a8cf9b1ba2b38e386254ba0e9957d52c901e66c86eda778142f3cdb57b6c9f8b4f3991c06da59487d09c98b9cc424fcb802767e44610334df982990ad57ef24e0d1460958263075516a1baf35b1abbc651ba70e143205e1dcb71c040c442ace719552fd319a98ac02a9f3be81a5e6a0080000021c000000b02141c4d436f08ea34c65e3784660a523d97a73fc28a7a8b08a53ae2bc1dc284182c278a77e1e96f00ce50af271a526e5adf284f752cb309b7848f409d49ca4ef2a6a44021369cce015f798999dac62f6aea4369ed501eca6493fd146c1a05e8fdaadb76799bb52e31bcce77fda2367a915ebcadb81b298254ad70ed755d9e61999f844f5662f6bf8b382e0239c10ace80b7703d0c3f07bd6fe54338d35e6ee5fc474e4352273a6e2f993eb169000e0e2000000b02b8fa47a2d1f9aaac714dbe57fb9735b22b08801d375c441003e580502e0b1e820e92a7f36dd22a9be4637bf6fe93c45e33e0bdc9203b9714e71614aa4ebd7c41587cac687a5b69e0d675b815fbc15b3a43510894e69eb493b9070c706530196d994a074e28fa1854ad4765bba71aae60273ecddbe657fad75b97302d3a5cd0647b4f4df04f45f4844b2cd404d162bae29bf80ea3cb8afca00c509be22a5041af6f24d376f165339fdc908c22cbd0c9f000000b01cf4aeb416180086c113e20912299611d84b25ed911218da0a99fa28e86a19da5d27615c1da55e3bf0d6e8da45456ea1c5f266f2414d182421b3a4a908884565cc39843d6dbd457e7acd32d92bf6c82bc89304166b98649bf004f8b7ecbc374e469a34537fe94996aeb7c7c18607d1cb0a3f1b73da26894f450d7435fbbb03bed71efb26d629e411318344154ad1d91f0f99824b1622f856ebf269f559b6dfb3496f1b56387943b9bed54b359aabab8c0000021c000000b0131aceec8d369ebe35b8b7932dfe7b17534b6e4ad6fb85281d22e543e796f814322474efd5eb85c3503b4aff841577f2ae6a5e65ea849c06d4432fe50e05fdf098bd9c699cde3353418f28b84f4764c157c5e96f5b247c9aab16bc595ca9d0f16a9634e1fc8e84211de7fc0c49c3adf810325104003949e390aeb5fcfdf2e71687e30aad4e544658fea6e74bbb6fb6c01c87989721f18fa47ec49719ba099587236df762ddcb90ba7adc6538d8ecc1fb000000b012613f0f1725d74117752b4b06dcb36b619e508b6b20dc71137b7fc46fe68ba8565c25c8dc62fdc45e09888d06c2033ba1607cb65b3a0eaf42ff5e7c889b2e65dee9e4ce76dfba125ba3c9686f8a36a93713fa01c102b1de65517b880b5a6bc3338051a4f40fdcb1d22bb394128dccde288e7a9ee0350ed02f836cc8ef818640db562ba05f9a48184161ca73dad648700c58b7e1a1d336be1e6fd9d316337e632d24911226a4781c9fd984a174736e38000000b021f3915e8978ea1ea6cb60dc322dc190b9b2ceda42f58a20ac1c858af5d3a8677cb13641af6764700b4f7af927288b3e984fe8cd14246d4f1bdad77855de1fdcad226f2f20a6be73560123b63eae804f4ea48eb084980cc1f9a98acf620f8c08517e4e164b94db9da0119741c6c220fe13c7e787b3a2408819bbbbbe063fe867ccf7edcd2a9424048d22f9deb8a6b26f2e1d179088930e5f7ed100d17aeaa34bf8f6198dbe444e5c82994657a7af2c3a0000021c000000b01c6eb29514dd89c1d9639dcc00bad0bc74c0eb9175d32f8db520d928ec7cb0e0cd36e9b588ed7374d810272db510cf62f8ca4a892b799771d09f50cf2a897ee33c046366c3013c161b0338c773c697b15303fd83700d66bcc053a17e5e6150251b59dc3033b7b7da0d70449967fc504a15c202f68ce391c6c755af4b6be56af9b32c3091d1d71a4c86f201f9047028350688c714404bf35ad9c7c3d0ef6b77bf60b3316d8e8cdb1e8d6410add698a285000000b0231c09d4ae56203294710aa28a6c4cc61bb609b6aab288abe177f1f975770c2e70e9c268b8738fc70a91953921671fcf2c59d1e96c748ec66b1f12acf1f73ab3ab6b9bbf27f009c68c29a38e7161725088baa6fe54320327785fc14cbc610d4cd02af5b0b7bac2fa71197c8ba13e58662c3ff7a3f8f845d5b392518cd3634668051821d22165193019062033301a181420f5fa9896b525b281e4047b9d368b73ecfb44e19c2465e1c42fa1bd342690c5000000b00db4597d5cce2d126f7e7084cbcb24e641cd29e43a00bb7f445d53b705b7004d975016837b9bb0981d58af0089e9ac16197bbd8b4e6aa2b29238b785efac2ca76155d8b4771a44a5027e3b39ff69af5886bcb9cf78213e2873f80e5f453eae57439c45c17bda6a55fd4fd3cc648bd56b09985e4b6a9cbe1e72c6e8df6d60697df2cc4fae562f82a7b58cd77c248ab23b25c45f8745a0475f52a36eaae44a99f140944a2b96d9dd0ed44b374d070a5b6c00000fa400000168000000b02efd7be27e8cdcee73cb68a36432f328ed339e533647c8d2729f4dce6a5bb6d63d76aea7df4ee16ad4fa2c294a98752b392d7c674fba88d2ba7ff3d3b6fc635b38a5c8a968777dc653473cdcd1e0d2940c39c154d736e7853d9d1cf7c5e9a40440e6f39272153b157b2c89088ad108781e02cbc776e554ba80125d5cbdac15ade49c0ebc57236023e236de201cdcb750212535e0cd1ba81b4d5f95c8358a4fe6b3a21327c52c27e9762d002013c5fa61000000b02e01d9240508b56a19399b36b265824ed17b1580fdfb06d0f618035962a27289bd6435eec3ecd4839920064b71818ac6c544eb0d3034b5c260891b6ea065545d22ce3980bdc36e3c35a7595f29832836bbd034abc09fef0eec7127904369b2ff99d320532b8c0dc3714942a6c3cbd15b152d2a00c6c66501f3415f1cc67a2b7c0e9987a8fcf457788b29f55fcf61fdf71d41042e8daa44b070b7966f2e92efb7ccde48d52c25372d310d87b2e05a6e0f00000168000000b01934ec3fc6da0ec472c2e2f7a22edff222086795b5f35032598f0c0b5479dd6e70cc492c28da17ec25714adc10620bfe042438b3dfa45364c6113fae97d8bcc3e00db028c72af2ce8e7c3bc51d4c621934516e243d4aa1f3e5f66d8793efa71399be998eab58bf890e879b5942ead1b70a2ed8771c64a7772617c8baf0d492c3a17c430f7667ed0ac894fff65d24f19a18a70be6142e67c55173a2593eed2a64abeeaedc178f4494406a894b62eb70af000000b01c74c13c9f6064fd99f08d97404590fa68c06aaef5bf2c7a254d0732d8e85c67bc806ed42e2fbab9c828103adbeb5d18fbb78522068d4209f73efad058b3c710fec86731fe49217791b0f7cfc908bb64d23fbac33e4fb642005deb6821761316dfed9cfdad29b7834e6c1bad2e5b2d6e22cf778e25fdb5ffb1b6cdc38153407ea936f668aecf471bcd190d446a11f4b51da70e3f9ed95610cc3c87f88756016b0f685b8f77926613b22dd4b0c4b1910200000168000000b01454ab5839ccd5d48e562012cf9f473de0893e7efe6ec718742881aabbf7dc534d4d7bde54951224d3a8cc80edc859ce1fd71a1b312fb02a971e17ebf73d28f13c1b813772501afce4548d9b3955d95a0d5d3f1bc0d40f1a0dd2610cb8d0b1d6cbf7d750d5101ad05401eb2e8ee968c6084ffa3bd18c0f8c697b3ec2762ef57bd5e1129d3d5e1de28ae99a57f0aa71d9281cfe8c9f0ed16fa448b10a108e9359d4d40bc50f9948933335120937e60005000000b0159764e1eb6c50152ee65e2535788edb3acdd0331614f0b11e474bab0b19ed07713d5f42892420cdfbd24ddda39cfa4286b5bc16021ec9d99659ef64773ce6bd5beb99cb22ea3313341f7fc15032f5cdd062cd44802ee3757c60602e205c825f8d44adaa4ad18d9780c5f6ef89378e9313957415914ed788bf99fd5e1952d29d374b07f731dca6bb21f9cdfbb6187cd625cb640b47b591d8ef20e8a1b9f395eb1175db888e0195c75bac7114697955d800000168000000b021557440c7455230f6e5fee59d8f4f2d0baaf87e60075ad6ff872a5106339f030dbe53a47c69d83b6e12838763774db33751f943eb17ae10b9f89bc71043f177dbca618ec8b952c01ad3fac9c13e5bfddb9e5f5d483ad4a88cc184c5bbd242eba9844d9ecdfc7e3dfdc3151df09d09d922685cf6a737bb3107dae6c46f0fdb2aa35e8f3f8e000237c3d1efbc2631b1f61e3cd4c8953eb3c2992789aadeef1428d478f09dcc0aa43342b32a2d956ab394000000b005b258610cbc247cb32329b0d3373351f029cf25207a5473af540d236c68b89238f04c4a3a7926379464607be075f51af2e5e5e976ff6f5ba474182d7616e6ab7828307973bbfe3858ae0a6ef3291668568121eeb330a6a36c33edd1ad3f084f4e7ca34c379c31a6b105f4e07ba6a3560fe21d32f2f798a9e941ebf55351da2bf817bce7fe82177893ed10425b0fc25b08841e0f7991e88239b1372fbb31517df5fc85af292a5fe019694ea50bf7732100000168000000b015804de26f2e073242217ac878980070fabdc0a1db7f948d7043cf6f8380565299b774987703f8ea4edd62b57e6aa0710c72577d752730db3707b6b81af9905cb46f8bf7637c9243a15aa37a15d1e492f270b8269f8025c9cc58daf2ed2d7f236d0569e2e7bf9f7b98bc9cc08d6ade221412559ffa59da9f6f258f98f2afc31cecf7b6873b03ccb35904e547fc2937742595c92bb9381806c267233c025ccb2489db225d727bb8861d7ee63dd9426f73000000b02e0b0618ffc41e8db251e847986177790546ec8d9ac7b20d1c085bfd11b54c4c2a5bb548030ed3d78a1a5a067e316cc3d3354db99e7dfaab079e5cc6ba1311723c47419bf52a03f2c144db6689808b19d9a561d2abf6e40c431e81a4270972e8e5e1f2f25040290a455c06a9082d59a71ca84e7cb36c5f26e5812c73b90f19f32f8db0babb1b23429afc90e4d9a43b5d2d0a8e97893c844fde5a21bf9da97afa5d87f073a9ed1430df2d452fab8bd63100000168000000b02dd1253430ae27c49838d6212f3dba007b5cebbc12eadfc73fe40792d9a8f08c78c12b81f78bd478594944c131e17b8e197291df68edfaa75dae06c707151f84a607bf63e962667ae9599435ac68ce99dd0ed7d02169615b252d17ef20dc178edcb7f42ed875362d617ddbb03f1bb5040ab6ace11c31c6bc8ec3e47a0a6dfaaddeb364125840a27eeb343101e8a315e21d2fd6707ca1f113ac436de6742e65bf3141ced66f745f434ff7fb2a393ae3e7000000b013f9b36f974bd004b8d6408ed33d04b3575334d99b9bd3031f07166b2564c95e01b77903f659983622101a78be1557974c4c914371738f59163e987aea95bea3f7392122ba771b71c2d21835e064bae7d1a556468c2786432a0afa082792923fa76e20e0b16ea4bb60af728c6a0f2fd62cf7407b6b0e52c8c41bd52823da3256954ebee116ff48e513c316f5db19eff51d258094b89cbcb00e0bc7709c465c5cba6c90a9b09ec69958fb266124ac3eb200000168000000b0185a39e63e9995f0a4d2889818d093cff05565727fcea3bc95bb622aaeb14659dab568c215c165b400c5492ca9f27843c4b73870a175a43b5579191176dff02220226fc58976ae0922e84d56da653f036332cdd5d8cbcc626bdd46aaba9bcda3f9aea71fd9af3f1751f104acd5b714b51650a52967ce1c6d34b47e2363ddf9493aed5a5e44bbb1c74621011c12e8542d069dd83d7b27ee08498f50743badb48b8e474813766d4afbc8bfc08b7f624709000000b00f38f42ab2439cc34fe084bf4b16de18175331b3ddcf418501d2bc8749a5dd146c516c2a4d987ebdef118e3ea65499885c3ca98a384e068d8f8a8840b06baa350a344846f6ac81e8c2669668028f2da42938aa4d5175c30b090a13b8b09a3136d7d45a6ea4658a9db6977d2084b782751618e0acba63b3ed2673856c9363c06d0b7366064437926df105a80b858fbded11bd8c9fe423c4f2026f53e8a280e5e11e5ea58f5d69ce9e410fa52295c170a300000168000000b01d85284fface431e6ceba046dd40ff46ce917bae9a003e806d71d1f73ff64ecd5aa487d0c68aa0421c591818c4036138ad09d590f7fbe42a4eae0ac065329eb25fd06c6d48a2bf63008911b2c28b1ef8780f9a4bf7d5951e22dcb4be03874627b664ad40f77f10e3ac9ed4c4b7c873a31e18112cfd96c4f8b96556b6d30c1a8b06f69b7c30448d61bea7b538d2b2347f14a9590b3334f4b94d82d8cc55582708343a5264eb4a9d7356b5db62ba72fb55000000b00fe3d5641a7757cb3fd7197b9c71e00421941f4fc71d50f6a9aa45af24af6b8bdab55b59d20b9c7d40358c1f6336e89052b5cb26e52fd86c041b65336093a9caff66a472b48565dfe89d9fe18167168cce7572c2d45e4c47ba7690bc730b80864d901734200cab311748729ef30f934713bc8b6a993f5c65f9d2e5e327342d699df05527b5ed19f4c2502eb3335c533a03b8c2e85c05b68ab4cd2bf4f226c25d22c9bf7ebd12bf306d1a9859ef42a72e00000168000000b0254b974066e7ce1262ce9dbf27fc0c5b59a386cf1fe50f0b3c31446fe41d2763bb4270e4e162ea6c8fef13c7015d92d250ebd05ef50a04318ad3fc06e7f51246f7c60666ff298127cec08bf2e95e1ea15fc31ea92631c1014c5c377326a3101c6bb66b287b643483e4427c930d6cb7292187f7fc3b3702760d074ada85da295d8742a26019c379b3969a44f3cfd7f2a90ec3727c8e9db92fe5bdd86a2a8e1e118f6cdcf58cc626e3cac88eb56566a92b000000b02637059839b160723bce86e01fe93bcca27a0c8f63d61b85085ed99f5c383b3f8ea592d5ae6529e0987460cfbe0c0292c3df941e76d527aac42685c9f6e4ba655b6218d764d9b5de9fef87b0a8f4262f8f75add1ba6b1dd889c14d1fceb01d1e6a087c2dbf784a75145f5f280dcffca20c52911605cc234dbe86c4974e2f314a147fac3adf709f80db2fa5a6d70b98101b0c1f0e37a571136d715a50ed60bd1c21d846753bc3652c43c1413c49bd3bad00000168000000b00527c1520cac6bfbed00434627a2105f992d3d82af0866159afe71ecb7a0b97f11f3379201a5b039c9bccd95b0b13735be2b89d6559cd4b1cd5f8619038788d0a2715d2fd17f2e0613f368a801a153695a3b70ffd28bef038cc5a9548799b079b4d8fdfdc998f65579d0d8cf8c9d2060043446386e411f4e45011cfceac2406108c9d39b0fe41a2d3e9bdd546f785d6912b4d893f3b431927ae26d1a06f83b35ccf94b85aa26ab886148342dbe3c5197000000b00bbc58a54f543261391469d50ab865dc428a1ef0eff0b33ecef92efe59c984612dec1a13331244361fdbbdfb4a38603e14e8bbc32e977ca1dca62c001a70ead92fe20a80fea4eb2243eb0adbdfeb80dc15427b9691682eee89fa05336705c83c4293505d187d821c72080069de4273ba255ae9c85084c32cf076135366036a6da190c1c6bea11680b5c4b20038d505fc2edd17545684a4062d71ef14e612ab17ed0d96c2d2ea7037d26dee162def406900000168000000b0211f437cccd63c91c35106d4896afffc64f7cc40a2efbaf56d1df6d192d39032eebc57acb2e63bbd34217506bbd855d2a22546752da6f9e3027c3991ef152ebb5561fb7164ab71d6f25a91ec70d66b62f4f2f89f9816cd41bad3b977093b1ddbb2cd4e8316e1b2a45d371b873ccf61a51a117e3767564f9a6e8d6f93ccdd29c619fee8caa54d6324b97f3f4880e202f608d368b7439854d856999ec7f08af8523c5bd059d44f1def724892eb936efe90000000b0175bf999fc61d7188c6c6ed4cb8b0fb1aaed8d8b9ae2a3c56f1363d92046c7be6485c58c4747d4601363616b48cbf698c22f01302b106eac4896feaa09e34f11cf36c4156a3fd2272c53df18408c1fa0319f41d74d8dc5aaa8a81e89f372cbbfa4b4f3151ff781df39d92932c47c383d0036224be1a8573eec228abc967ab405d39349c5a6c25b450f100ca3551a4c2e048e3efb117c4d2df8f7bc0006703a0ae28c816d06f390ceb845ce946952eb2b", + "txsEffectsHash": "0x005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd6", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x008aa79a60dae1c619fb444fdd7ca7abf423f96d7bcd650a3282c5267d3a8faa" + "txsEffectsHash": "0x005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd6" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711036016, + "timestamp": 1711459608, "version": 1, - "coinbase": "0x9ede22c45cae1d9aba3dc43ca9a4014868dd9416", - "feeRecipient": "0x1db11c308c86c9548e554e8ea4ab6a0e7c0715098a8e50d016c9a7d2cf3af8b0" + "coinbase": "0x632b334737f23eb073adf0bb99d5417f9161245c", + "feeRecipient": "0x2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x1ddfa79462a8e2beea5cca8199d5ce0f9b0412d561d4a35c8905b8e8b2beb7ca" + "root": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x1ddfa79462a8e2beea5cca8199d5ce0f9b0412d561d4a35c8905b8e8b2beb7ca000000020000000000000000000000000000000000000000000000000000000000000002008aa79a60dae1c619fb444fdd7ca7abf423f96d7bcd650a3282c5267d3a8faa00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000065fc56709ede22c45cae1d9aba3dc43ca9a4014868dd94161db11c308c86c9548e554e8ea4ab6a0e7c0715098a8e50d016c9a7d2cf3af8b0", - "publicInputsHash": "0x00c7f2d2d6b9addbb841799014778f84a8ddf77d35513a0bb2a22e417d3ed4b4" + "header": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e000000020000000000000000000000000000000000000000000000000000000000000002005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd600212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006602cd18632b334737f23eb073adf0bb99d5417f9161245c2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524", + "publicInputsHash": "0x00b9136d0c140bdead5d3f63a267da0428c0209212e2b9a1e1dc33622378d5e9" } } \ No newline at end of file diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index 7d4a697ff66..488efe49ecd 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -19,7 +19,7 @@ export interface BasicValue { export type ABIValue = | BasicValue<'field', bigint> | BasicValue<'boolean', boolean> - | BasicValue<'integer', number> + | BasicValue<'integer', bigint> | BasicValue<'string', string> | BasicValue<'array', ABIValue[]> | StructValue; @@ -269,7 +269,7 @@ export interface ContractArtifact { */ functions: FunctionArtifact[]; /** - * The events of the contract. + * The outputs of the contract. */ outputs: { structs: Record; diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index a408a9bedd3..efe95dc02a9 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c>, + "txsEffectsHash": Buffer<0x002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a1>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x000000000000000000000000000000000000000000000000000000006601bb64", + "timestamp": "0x000000000000000000000000000000000000000000000000000000006602cd7d", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x12323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b>, + "root": Fr<0x28502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x1b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef>, + "root": Fr<0x2d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x1798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008>, + "root": Fr<0x107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1882c9614901f1f1b248a220cfca811c12c5fdd88c61804824a9319d9c308981>, + "value": Fr<0x288ea046201e40f136d1c712cc76e2157132ada5cef718f8836650b23bcf8471>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x0082cb025a081337054f138f2d4708d3ae2a35c1c024041344b5f55c6ed3ee83>, + "encryptedLogsHash": Fr<0x005d0fac5a1aacd8e5293b8de3a274b7087dbbdaeb3efd2e36df2e4f91f357e5>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x12d57be1320db2f84e9ee09f4cb6d2845d5a813c7dc5be06779a58820db51183>, + "value": Fr<0x2c4f4f50d66785fdeae26cfd05b6032f52ed4104dd0407cfdbc55a024eb51096>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af>, + "value": Fr<0x004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee3066187>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x2905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd51>, + "value": Fr<0x27f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb8>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e>, + "value": Fr<0x0e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index b429f7a21ee..ae4b03ec892 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23aaf9f8c4401000864ba282583f7e8885cd95c99d5b94e8e4e7e90f960f7d1f744d4e1a3d1184600000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23aaf9f8c44010000000000000000000000000000000000000000000000000000000000000000001cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23a0000000000000000000000000000000000000000af9f8c440000000000010864ba282583f7e8885cd95c99d5b94e8e4e7e90f960f7d1f744d4e1a3d11846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276ccc1f739a2f32e67e0a69d000e0f24549e2daf7ba4ab92d0c396c749ef708000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011cd5ad4b3a2730bb3e21d5483c7cba30278b7e86de666f712758642e58f9f23a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040073ced0da546b196db6081a63207dd54a4471baa30273e0b81f7ca1896331ab00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f16100cde5c5b63f50c24f425289b93fb6719b045e905e9dcb9c281c79f8a10700e749f3a31cc27ed4aa1c105c023e78dbd20f922114e47d92d044fefc24e355f13f925dcd83bf6054ea0cce12d21a0b9d3be109d26fa9c333bae17b82becf29f188d5acf2ca79a04d6e2db7589ff5543f53308a162c360a65c80261e28f6768200000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +04264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105efaf9f8c44010027f63604d8f92f19f44bd2962bb240ffc7199cd7ae2481b2c8fc4ff1f3b8d56e00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000104264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105efaf9f8c440100000000000000000000000000000000000000000000000000000000000000000004264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105ef0000000000000000000000000000000000000000af9f8c4400000000000127f63604d8f92f19f44bd2962bb240ffc7199cd7ae2481b2c8fc4ff1f3b8d56e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163ff2cf51017be341a4c78bb40496b658edc4f56a21c3a107289107a7d4d048000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105ef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040040d13d312ab8f01b005a83779462d064f947fe677af4a84a6da4208641f44300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f074cafd093764f86adf527a5da2e57da986ac03233033397537a888b38d2cfd20e749f3a31cc27ed4aa1c105c023e78dbd20f922114e47d92d044fefc24e355f24a06ce86cc84094dd363c15c42c94fb941b9e9e6f2272cf4de3bcc5c47b6a631d68a2e97e7b86b5daf79b4fdd8aa84e69631600893cbffda4383c8997722af300000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index cd099970554..b0cf60c9a3e 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001882c9614901f1f1b248a220cfca811c12c5fdd88c61804824a9319d9c30898100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028e0cd51c331bac85a0b3e3ec688d034ab7eb5e75ab085dfd3aa200343d23460ed08e599e5db578d1fc18d29c1eded075b92ccd489624367e8852bc807861ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b000000030000000000000000000000000000000000000000000000000000000000000001001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef000001801798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006601bb640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000000025ac0f8793721f4bed5541b84ac1b3d3a7979d2d5c367b7752fc0ee13db1aa9109b10c924d7b8ea453aa111249a391832ed60e771536c5f7496bea3d6e921d9502cb42d99fc18dfd0b7faebcbc4b04cac72deeaa804c2f881c734253b239915d25d4a020c2e9dd66895268ad6890d394df1b7bba1b5f68c5482f32502bfe7eda0906bca101000ed08e599e5db578d1fc18d29c1eded075b92ccd489624367e8852bc807861ed25d4a020c2e9dd66895268ad6890d394df1b7bba1b5f68c5482f32502bfe7eda00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000412323626efdb913d8d0e878df766c402fbb5b61c87826363fa9cde7ba5e1ab8b000000030000000000000000000000000000000000000000000000000000000000000001001070b95a463cd3e0c1eec74d545327d35f036fa6270ff9ee4ae4fd248e4b8c00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301b64454c8b6f9ef03956bec11fe831358f8fe47a3593534790f822b35324ceef000001801798310a7303baf83b94523073876af0682377b02f648d6368d4b750297a8008000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006601bb64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0943e0d2a4e58238525bf3e5f2b00d44ebfd6d27463767fce64425c1c95ca1a60ce0972a4958e5b11c7d51f6f803f78799b28bd1c2df941f869ef6c553d6941b27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2665e9a78f03a58e48cb92a31a243d9906c13eb556d8feed67ea831230d9d8c900000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000288ea046201e40f136d1c712cc76e2157132ada5cef718f8836650b23bcf8471000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000599c71d4d0b5bfa98a9b668384351e6434bbd54bf8f9b4acc764d9de49c66c3006379df647575f965b4677d2fbcce0e1b6a6a0b86b7759401b080117f0802f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967000000030000000000000000000000000000000000000000000000000000000000000001002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf00000180107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006602cd7d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000fdb11963fbdc677df7e69deb637a7746a144e5ad7f6298eac5c950fce02c59304251ac0d54a07b260b153c4b378d43bbe646a83ba9b5d378a1ce55060bc6e3a23341ea58faff4dc0b1a20b5bf4a6b78d5e604a08a94d0a690ea9dc3a1897efd28822e414e92ee71815cadd6415ea200f184bcdd36d0270cbd048dd1468c35450906bca10100006379df647575f965b4677d2fbcce0e1b6a6a0b86b7759401b080117f0802f828822e414e92ee71815cadd6415ea200f184bcdd36d0270cbd048dd1468c354500000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000428502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967000000030000000000000000000000000000000000000000000000000000000000000001002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf00000180107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006602cd7d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f21f0fb1e5531d768f8ce63f411473acc4d81421aadda4425c52fdfc1d6b18eb20ce0972a4958e5b11c7d51f6f803f78799b28bd1c2df941f869ef6c553d6941b27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed15b6bd1a640f82463dc078acfd55e7e7c4eb013ea66ee099373ad608857117ec00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 73a2d6e1f99..dc916b09c83 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002df6f1bebea79e7109e9a05d46eb4f3cbcd2ab2f1deddf1ee404519d06f6db4100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082cb025a081337054f138f2d4708d3ae2a35c1c024041344b5f55c6ed3ee83006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001922b5761a51e19b5cb4d8b6bb2ee8268771782838b138bcbca98b4ac18627890bce5a69119854406c06308ba266813d1c29cf462591d0d9fcec48977c449a7a19d92aa77bbcd9971855e260da442e61407d51011a2f83479a5663c018aa933d2df6f1bebea79e7109e9a05d46eb4f3cbcd2ab2f1deddf1ee404519d06f6db410000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ae0435114bcd3eab4c8994725a1b5a21e63c1ed26db53f0ec26af423562c07e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028d5f9670104b5af44b1ae3ea44a5bbdc97f37425dc07a9acbfd6902e8fc3af000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012905d10baaf69765d2b2f1e03ded36e2b50a91489515aa91d277a9658999cd5100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198f8393258b9341796b7ad0b5b152f0cf060b55417a5fc704c07a3e0f725da500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee30661870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d0fac5a1aacd8e5293b8de3a274b7087dbbdaeb3efd2e36df2e4f91f357e5006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002e292cae7681f42f990d18ea9b49a88bf902e0c9b673f8df1c33df85313262a5059c713e8d7f3516130a28bde84b30ef0aafc5c7f2a57a150c31214275a8b0d40e33d6a453b58737c2bb760b23a160b3e59231be733eaf4540f738bb9d0baf0d198f8393258b9341796b7ad0b5b152f0cf060b55417a5fc704c07a3e0f725da50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee30661870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From 2124cfae9f81bd31b0a21e967c3e68da53716b88 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 16:10:34 +0000 Subject: [PATCH 011/123] changed integer serialization --- .../src/core/libraries/ConstantsGen.sol | 2 +- l1-contracts/test/fixtures/empty_block_0.json | 10 ++++----- l1-contracts/test/fixtures/empty_block_1.json | 14 ++++++------ l1-contracts/test/fixtures/mixed_block_0.json | 16 +++++++------- l1-contracts/test/fixtures/mixed_block_1.json | 20 ++++++++--------- .../crates/types/src/constants.nr | 2 +- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 6 ++--- yarn-project/circuits.js/src/constants.gen.ts | 2 +- .../src/contract/artifact_hash.test.ts | 2 +- yarn-project/foundation/src/abi/abi.ts | 12 ++++++++-- .../src/__snapshots__/index.test.ts.snap | 22 +++++++++---------- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 14 files changed, 61 insertions(+), 53 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1c31e002eb4..56a9c39f401 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -91,7 +91,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; + 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index 8782e0db84c..bdbfa7ad18c 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291", + "archive": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xf5260028ce1ed35ea08399dcd31c1203d726cda4", - "feeRecipient": "0x269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677" + "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", + "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000f5260028ce1ed35ea08399dcd31c1203d726cda4269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677", - "publicInputsHash": "0x00e6c2316a480d1dda0923579320d563fc07d73b4d62c6d89b51db42a483a654" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", + "publicInputsHash": "0x00921c1673191eff961f7fbefc885d9f474d2e6c272c1932b93504ef32c7f84a" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 13b9478a690..679c311f7bd 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x2c1cb8a31da8f420da38a9da675509e1fbdb99b07b37af497aa4b2263e727729", + "archive": "0x10ec263cb860c7a7ea45eee0548d67ea370aadbd4da3b1a52d5b8869d919942a", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711459673, + "timestamp": 1711479928, "version": 1, - "coinbase": "0xf5260028ce1ed35ea08399dcd31c1203d726cda4", - "feeRecipient": "0x269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677" + "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", + "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291" + "root": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x0f226a7e6cf275c228a53ddb5060ac420354851e3d39dd1a0de7a307fbbfa291000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006602cd59f5260028ce1ed35ea08399dcd31c1203d726cda4269a1884ff1f4dfe1392d02c09c00218fe81cd55ad2a96cb447c74ce0df2f677", - "publicInputsHash": "0x00c96c1c24ed4c10240df62e411efcd51f8843355550b13b64a6777c0375e254" + "header": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c78548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", + "publicInputsHash": "0x0043c75b707b1077bcf67f74b67a7c2b43305209213888abcf8818d2f5ec1051" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 05e67317da3..11424cf272d 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b0148f0f664f1b2ba74b20ce68a177a770479b6b80977cf10354218e2613715aee6e42162656fcc46daec2bc016a18a90ee3d03238a519171844702e36d72727ccf8cf84ccc3a3b2c24777779d66cd3780b2754b11b1ca952aebcabf1f4b02c4b1cb8bb20517440de62cac21130ef76dce036d96f4a966b51fbf0f84780025fd15b577650dc8d4b9d05344bc3e58a2487f11195886773afe14dcc975dbc875f84acf41d95fe9421dac0513700b6ddf3fec000000b021e352a00d5f5b4db88e54ade17bd43c21e8b147daaf1135d2ae8ed43b8f80ea75632b4ce367c475b20281b87aa45bd0540edeaf15b67c60237f6a6f861f4663ea8ca0c49f9a0d5a0c49cf74ae6e9c47533936ffbf98969570b8fc6442b70a6eb47da8d99e4a0af521a701175400f4822581ebcce4de9eed83d18776838ea697e6a311a20b084e17a7c0d302a75164d218f5d2931bd4394415b02089f46c2cc9f76cd5d9172aae04972a438c8c3f87da000000b01b137db2100e697ef5ebd8e694f557b4bf30016f81889d2e26cce05c4e40858adaabbc317aa1b6afbee1dc6f0c611c0d3ba2e50d211253bef209fff36375413f38c42137eb6413890109cfcdcd8d3d28044312f33731e5f56f3cb19535a0f683231031ae8257b34146bce4c08c0f1fe30cd1433c8843a479f32b2ccd4eab8b35485e692cdb2d4455e89bec8d1a7807be12fd0b088eced310b0a7f7a79f767a67cbb6d94c1c3fd5c3df9d0f29331c9bf10000021c000000b02990b9cdff5d50e8581136832d07773de7dbbe0ce0df36769cb0ac83c6121aaee333cca8b139d2bcaea640a143dceaaee7ee0b3e43aa4d686102424b4e6fe8b107502127688a3441951abb47c0720942a58783c76a4179083b264c67dc706c9c5d0c15a95d65a988c3639736d217d79e2337c6097154b9fb4a4b73f5021e4b2b0c07c1755b70cfc8ee0f76de688309a7292031a4096b53a6ef217c68575da911932da65ab5df1bf2ba6588a8199f5e71000000b02cf88f32694987f0586ee789fea4128e840f0e53297078e94aa91195e2e9cd200b60c0c53a30b85322fecea8f3fe41ad71a04db70ca93e05e79f4ed210e67c83e23868e4223e85661be552a2e06f454b7644740cd656ed1672dd7f9cbc626e6245e0aa16b9a0a0346c9efffdcb1610ef1a820221c1819ba7d3ad523df36e87f4827ba0d34654a879a7314527654862b3097fdf30fcf74319a3f683fd34bc86a9a040925748f5bea19094a2ee1af4f9b6000000b003c3ee10f1b41d24b481ca7889524d9d823083593a3aa50860287d5b18db2f79854b0b539406454d74039d5dc83f13e30f26fd1985e6b5b9350ba8b18dadf3a309d6c1d2c6818a9216b2a4314b0ee6f75a801a27726301f387046e610928bab3d216565053eda05bb0aec4db1912ed621fc8ff599f47bb26845a5a874e1e479085ec9ca5ed084c068926e99eabd4608c19d46bd4fff7537bffdb4c3ec370d3438db25eec11d8792a4a4acc47762863ca0000021c000000b01e6adb3bc0cb5cbca4be598220ce7a5d4b85b8cd7c1d8a5f5a8132dafaa4d8ce61ac608ebd1d5ecfa0f8a4322862089298e53620396130204f86d8acfcb082082e48dd8451f95641c5a99b39052c42b1836614234476b72a327ea2c7413eb7861c34d269eda0b4df9e5a0701a6a9797521059a616db60e1677e0c0773a9bca80cc639f6c378a0f9041fcaae4c16d6e4429976b0e753af4bd9c7342d7663e5d48be9d8232acd308761e9ec0b75fd990b8000000b01eb23ed44030089e7a0ec4c02917681c6632512924a0911f59af3856e3ed6f847b1216e6fc9c8eed6255cc5ad0592225ae2240968a2d9dbee8f7b3f8995b6c975c42ae2e39e5666482faf4c3dea665475ad84b1404ad5a333f292fadc787ca1bf8c97a6c6662178ff416a97a77049c221f0f45541b5084f43c537d8272e05eb2206a12a9a7f0d69693316c4608f270681853da13b95dc72da9b726637df357ff515d798165e765d59387ff2da8430125000000b028ec100fddce19bad5b633b0d5046810682ff2d676f249230637b76e97287dd29cbba245b7657aeafbe1c7c8927ee4074331c4b8151165e6b9b5fa4e7a62ed9bfb33f519c520dc5e1eede9202247f0184f13ccb96d1a6afb3377d55efd038199b6ca42a640832987458a5b2f0ebb9f6d0bd5413ca84e8cfb35825c40287687cb1bca8ad5a64527a7c3702b808385aaff1167ca9d530ab1e15eb7b9b68e9b1b215a15b2870f83f9c25cedf0c44ca7714d0000021c000000b01bfe8d48655fcab455b7de99cc0ffacfb012e2827ad710d798786816e0c9ac1e4c86bdfb4c5d98cacaec2b3e3978e74ee4566c3c46b2458d0842a603952b6f7496b9c9612d11c973f23bb7f04b9afd3384be4d475ca8acaf459001c30200cb9d61aa18a88b3bea00e8d4f7ac3f226fd506a564b7bb4edcdb3c9ac2b8934190e4035b6913f330356674944d559da2a1fc15dc075e623af3654452275e2de75ed2bd2c2c9d69c169a572ac019d32e14d52000000b00de9b867a51e59028486f8dec6b840dd422f94113b3786bd747e71b7d8f92d51a7e0ec1b70b68832236c3aed5eef41d164641fa0a4426e639e9846151c97b0753a8f88be36a941602dd1f14b31777330d35376d71211987fe5d3fa8889248b1c780e334e34067987f3692a0c55e24ab709cada74582349b98f68069eb967924500662da5286fe02fa63dc3175a457e912e4aed06bb3dea1fe871bb79cf3c32b92dd9a2331459aabe405344ddf4241179000000b0235371cb9ac5b7d8c86480ea02f6c528e797b172ec82e163c184914be496ca049778da34e84f3a7d36d8c5e6a60d503252bdc629f4bc2d3c4b79e88a02882aeb2d7e393942e2e5526b971ff1a917da068fda1426a2075f7815ca48c8863141d72470d6d4a84c6ebad8402f3c4af6850a1846cec429a9e3d761243b4b0f7f6fb194a3e137be77445108ea03227a66dde928e38670377569b41a55710ba6cf17800c49de079ee5a846ebb3cad22db0a86e0000021c000000b02c491ea1ad1a7ae28a8ab5d5a1bc357f319ebfd4b9da436ad90322f918209c66cae9f0b4abee86869c8e40cb8c77049b17a6f20933a1e6a7f494bc424ca45039a35ea5e1e3e3c56603618a7599624c3066e32e9b34807315f5508d9df6662be1d3b19372b4fd687ca3d73e7600acc59e2b1fb4ea90824f9e6111783e18523b46c5582df8b6bc1d4ac2ae1770f967e653115c71f44f31729319741ff841ef129ecd11054c8b4db5929cb49eef99fb695a000000b0293af8ee042887992c8da191b592538a650a3443cdc20f7d4542dceb5f5caa3205a58638e8e8a6b681ac76cb2497649e22c6eb95652045917ec7e85a48fd0f5c02419173c7f7a8ad3f0feb54b47e8b6b56dea46b4a2baee7b9e9b83e7407a88502d07a90967641539fc3aa6d3899f60a0808acd949cdefde2fea47e213220f927229fc361fb3a4a9996132349606e3660de7ee5e8e7b8cc721ac8bf2bfc7d6ff3cb4488b0c0a000f5eed48aa6ab5b1f8000000b01c177d417de96d2e1975fbb7faef715b252465c1eb8eae5c14111c57dec24e9370545eca34e64ea55da64e688065a28fdc89e1e9a8daa0129b7b2231fdd839e065c752ef2ed3714d25e0640d1ccfe8b9cab9ad004b71cf1b0522756d8a2e927c1d1e6c597b76b816791324fd4c0dbcaa2c2bd1206f70de59f5681e6662e055341603f3988f2c761fe15ca5a766a9d36f2e08d6d2def621b65525bce62220aeb5a47d87ea4d01dc3e5cfd0482d6f026fb0000021c000000b01463a3dfb68534603634d36c97e4d7cf096f48883787e247e9b8c48a2ef4c64ca12d9b8af789ea6c615ede653635b57adc5a2ee0656d17cbafcc39638a4ea98634e5cdaf2e9246dbeb8c52b6682319d264a8945e113da15cfd7bbb49c4887d39080c423d88db6f8a7098135be85c5e3814667573924569d9f5ec7a3081034fb3f3b350ccec9302248387101f1e2d590b27763f2d9cf23f53840d5ed97e064ab06af44e7520b0f4f5c839f4f261c2ac61000000b00df09bf084dce4fc628cb35666a25e3186a829b787dc3ef6cd4d5ba0c1db5e6259569d76ab718cf3166b9e270a64ebb7a9a24b3e2fe5370cf33d3c179428fcf39c49a4569fb40487f4c210be4c807e53747160e686bcc1612e686f933942a8460c1d682f6d879755ff3a4d9fe172981f0cd418c1e2c84497e0789033c9fdaba5bf2fbaa8ce8b1192bdffc1aeafe1bfce22f8cb9b5c09092b27ed257627a45873186346dd921c01f86af823d079265884000000b00a60893c1ad48b46978c8783562669a0e73aeba4cc73cd2cfe44d53defc3298cda3cab1d0058eea9d76959d38f4bd6e61094955cdd4cb08d03352af14d3692ad990097add2cd3cbdd6a1e68bed78d7658a3e62e95623102322f029d321cb13852448c5326ef42d83658c47460e5b31c30923a72ebeb551e74a2a1559814fcdfe8b98355f30edcb9f3a8f37f36690aa9428a4a4d9f959849d32902d9f3619b519ccaadcf269261b13ef7a8c6ff52bbbab0000021c000000b02f379206ff2776cc709b3e939902945a422d22982132293139dd88b446a02ee9231a2e1924a986ae95d752d9940cc750580d433b1713391482366a206d7260589843b36ff21934a2920c83542176fde60c1ce0b1cf6238a1b3000c886b3f758cc06a80b0f18683e0bb9398a555b20e9526aa36b41afba8d4af5468968fd94cbfca103ae8a4284af95302edfbffb3903004e089679103a6e7bb3e8a4363ec36d411fc0ffeebceb1b5db0bbbe7c0e993e3000000b01caaee558dad6d8964b1ec30f1f308c26fbcc1a1fd9e69ac3fc320616d8c7ecda270eb33cdbc49df0f8181d98941f743c065f9ff5360a31594dc9fece8f2537a6a217e50b49db766d1ab2c806cf878f5be829830cbb07aaf158f4960c850d136d4bab87b1c83046ca14987975fb7ea270a7398dbd9d4bd9b55af0dabd97f47b1912db40acd66234e3d15c6aab7f92d7f15d257ba8772380c6e942610a18da8ed06789e568123402c2a9086fc9a3ab551000000b0245731a198032b691eea7c776122f2ac289be0cb45b6f9e3a5a0d4e142118de9fbaeec5bb0905df701b9ec47b4263f3ccc9d7a8a52b92573c20e95d47fd38ac2fa82a826063a37d8469b1130c27d2681b159a5ff618dc202e6ad2d3626b2316465e1252f0041f4d7ed4355532ba9d2bc2d542bcb775b1fa499a9cb6a3ae40ee6623ddfb112181b38d9d6d5898ac97e27304ea798a4f2e23d393d2e70a2912b29ae0c50224118a1cd180e7c8e86a386b30000021c000000b0062b5a9c65a70a2f7487b7fa391f4985e117abd15e7c34a2b2f864611ade3ba324dc7c8cd3aa02044998676f313af92176714f3926363e9c95041b5c675571b8e271ab73b31523b8c11de9e52aed9db18030444d28163158f715b8e42004380065406d4f5cd1f797ef870af5735c5b3c2ed6ea7b87cc10f84fa839a766146fcbf5423d28680ba18b84d0b06f93d5685f21f7be6fad5618b515d2a2fa019064774a784ac66502b88d40e90c769024fd3b000000b015ef85d1a7e8f6ebc187161f7e8de4fbe2a6f89d90a0ba8d4815329415de92d68a9cc9ee8b88a6db66eb8e9b9aa59b6e031c4b9ee558cbbe9f6982a3e7a7b435623732f4912bc5397fe215c9cf16224c7602e134140f8239359f3b5058695c7e7f8d99c2409ac091112b65d106985c7120716aefc31962ecb2e83808173e8e069adcf2398b78f3639a14710e2a5cf86927012ba991093696a2558e7e4b0f9aadb128ec29dc542308a98f73b132c88e0c000000b02f5543b45c213f0b614cb780a54c8406a542ce46b49ec88f59d9379fcd4685dfca7ba13944d30cb404cf9b0d0df2c2345a7aed075bd897c4b65ad7c1b75fd3f3668ada9ed16425f0f158e205ec7a658ffab281f8041ac68fe534c757315801d88b32aa60119acaf4e79a0f37b24b7a1d1614f4dfea6035c94761409b28d4cf982d5403c9eb4c7cd803d43bf0727c7b642880626d65ce53be673fb8740b45b86292e82d7f7a34e666876a4d17c279740b00000fa400000168000000b02bbfdc11f05ae14743d956e69065448ecbe1067f6a49f7a2bd4bd75a0c654ec35e5837ec9b64cbfcaeea8caebfda9158fcb52868e1f0eb943ebff888cc5413e6f4f5cda430adbcb07937d87d9e1d0cd14f47c6c17b11752e5c0ccb33720237e279ffcf17e3f4e549e829a65b6a26bced268d79bebb9a21345c0d9b19d766e45d679c0416b4d904c2f89c256de4bc1e221e9f73925a41be3d3783d9ba7fa8107f62550479d7ea161c268da9385b997c69000000b00885155760d99e624e96bda87798a2866ab11d92c550cd9cb43f12f75652565aad4028a6a218993fa93b05efb25e2f9470bcd73936b31eb33b617993b1a568e37d376ad0e0aa1a61fb1e7bf0256500336e11d58aca6518db2a392086b91a84d013de2213c4f9014e14ddcac2d9d33b1110e3d25f2b90dfd20d0aa800237964cb943c042c87ddee6ae8a7b3311612d4b4184a0215c00ac34e4a3b6024cc555c5c8fa580129263e8562a3ee71c607a53af00000168000000b00ab3d086cdb51667fdd6748efa55bfbbafb2176b217e3f0d412ff07826db530df2c30bf34746799aab28f2d3d51d69534eb74b877ceb021115ff145bc7dcaa8d2260251c94137c2792f2a5a3978c274a8c99fd58cfac209bbc17706ab9a69a4e76ee5261faf79d891a492133acf44e0f17170b304313f342622e258a25371316d67137c7292b28f00fe0b266aead8a1600049c5b3c31a1fc3c0961678405c956fc8a7592a3849ba2ab7805cf02b073d8000000b00b713080a5223b3470e10e203e165dc76f38b12eae62df75a66a55fa8600eab680b13aa8b061372cb4af5904133d9f4172712f99b33ba1855957873f52149a73417a2bee457da74f9ad5c039eee069d4bb8c5fa2ac5d92df2c655a789a35242b39f907b2dccf69e36311a4e69240c4270fe997946e58944f7953422044fb91e6e15e23ded5fa50fc4b23604975d311682bfb1a3b8b87b1f6d25fd2eabcc84324501c6093ef43417998e531eeaa62ba2000000168000000b028f011e45682d979086ab4e4810be527c606ee4c2a020fb4061af6d96cbb72603455e05990f9e3d03b171691ad874972bc8d1103a13e2a3d551382fbd8685cee8e02a2a407ed849aa8a2e59386a510c643f58cb49d3ef2b30008f16511469b396a2863ecbd9e4df237f7c23b39cdf7f3079c71e9c6c4d91e92a89a2d59ce8df57c22095de644b1281e8a1de6abccf665083a54d65b3a55f37d7e954d17318c8a7aa024831ef96a9a289f0325282211d0000000b004b3c8814844bd14038f397be71de4ab04a883bc885548adfa4a8e04d592970b86c4269a708235c3443a3cb32952c43e091da70c5e1bb20f04f2df8dd44dd8b6d59fc3ba76fede384b624f770e1dae1ca7d294a59b67c298b25739fd423da838b29f5c7c9574167d60f761e0de9d8fb0104bc673ab8cc4b8707a717d7de15689967491972cf578e8572be014cc9c01d106061762e9f95f0d520c03188f36dd676751b60ed51f5596efab93468508de0600000168000000b00715a471d680ef1e95433a3c4d4a425767cb7c0ca2d8d07f002b91f72e4f16048b893087cae8ace36e8b1cfd9be9e172a0558c13129841da9bc940ea3843b96417256803841947a449fdfcd5c3ea1ae76f772981dff90648d2ea6af708608b32390512e62ad7353dc55b5991e203b42e082c6843740fe094fbb573900957d2ca93c290fb0710fe8a7a58ed7b69346ec80029bd5fb8542db1e5c16597f7c6ef5080b689641c1e47d4472e6ae218de0ad0000000b009b7dee5341ded215fb7c70eab39cba1b75b41a67a0bdb1d7f6143b028765c3cff0f515c17290541523e8303897241b211389417f970c04c9955d8e35f59f5dba9f90796f073e077be565a4822532cb5fb25ed2ea255749d67fb3470206b2d7170dab05826d90251fa5064be275f887803f6e1e15dabe498e3dd030b8167c2b7319582be9ef55374aef030a888255e8b2025711e4855da11416f03836257b6550752e673d3fa7aea144049440c14179300000168000000b00ca5b6f7a63563477ed2b8f287fc6a0024fda709bf3ad9dc5f724e9f8261b3f2c4b1fcb7c9075b76f0b57ba13f6ddb63e0c48ae393168afd43253e738f10ab214cfa882c1198e050c880c5e1720a75bc53498aeb13a918bfccfa4b39ff550aa814cca3506134f7d3f2338f0147b856851d047c02c2b79da42479f305694a8a879eeec6c54b165b34deae68cd6b22195209589c4ff51d22ad015c3195ac6fe79cc41d29242be3f0b86c9c5b22d35693b9000000b028043f88ed639780d07fdc4386c0e0e6800d6d4d5dd2584dd2ea8cadf77a805f1972c1b43a2bac31f8c154bffe2a0463e83c9bc4334dff758afc3557814384e41ae767bb54b20bad6d68858eb66bcaf9ace9ffd514728d6d70d2d47b7a9f7166aa2a8afb2ca1eb20e7071b0f1015a339057891f71c258b8e73554eda560a931d0f91f5440815ba51f09000b91fac705b0120053c1aac6eb409417c6904e867780f4ab7f578c16fe4fd87d6a4c551880700000168000000b0126950977ad6ea11389e6cbb68968ae8cab82e0c759ca2f5163944689f012d82d45852957da03b0483f3738d493076780b3d36dbc497a60546de689fa48d061b44292d967ddaf8a065dccd8e256b755d9acc119ef10ae4d69a1d3dfa0976d32b4250514d4598e0d2ac823c6b0c6106632587eba457b725679abd8da1e2409b680110a2978768f10e2b511aa26cbe21b21075853227e5db35047ec22054a637aaf42291977de69a2e96c90b211829276c000000b00ca0ee223709a0cd96c84598be2ee6f3d24a989729a97176e99b1f44f2f0188b21e041d74e40ced15f72bcae29b0d92f845b5b046da9accc4e94b799fa9fba7ae1fb33ba58e0a7c30d931963550353e40ca10d6b934729c037f5900fa0fd67b3b76bbf0b4c48b3cdb698530088bf229a14dbeaf081439bfacf362c71411b393cb8ded33597360b2840c165be27dc4cb30d48bcb7e9504c914a5a9bc880a0846b95d0aef1b34f03e84f219b1d365c07a700000168000000b010152d51f0112d3e113a68842d803226ece38eb741815fe3fe12d2b75a245e4ab3c75061ae450dd21dda80866f28b735acf9750ff70da39b8f87263aef84d0dc15ac7b520b38534f7d4a069f7921451ef83f974ea5644a6a75a400b15f18415c2ea5d8ef1c76cf02415a89d86e333ab328719a8f71ac72e2a76f7eeb3d94da69fbc5bd22179ebbea3992225f21582ef50d2a8bd870ec21b7921a5f55411373acecce49a4ee677e5845f18c4608466847000000b02c9e0b05c2544e468c955bd06725ffa0696da91ea567f276c53858bff3d399c9c5de1350308b30525818bf73ba902b0bc1c8eb9fba854e9ff1adf4d75fd8984e142ae8fbfe412f69a920bbcf614aa97e7f45c41232b4f951d01145d04a26a88fcb7785644f28f1b2a634815c5140c57b217062545854ccb51c6d5d061a66bba336e59e19c5f980da9320540173651c1b2a78b0f5de19eca27fc28640dd6ac0d2b22391f3100fb2d701a9221b460a2ce700000168000000b0124bd554eb24b3c84c9c24045abf8b6b3168df5bdb031ba99517a7147ca005707d9d895533c933b2d0751c5156545a23f6b2776f20a493d2a097a22c01366135c9c5c0a41e5dc41b794305fbdefb4c0c6eb03c013cbc1f2630c74d18d4e0d3425489adb8aa677fad94106acb92b771a526f213fee91eab3f2fd6ff81530a804c118b36e078bc4d1fb93fc44ad8a01865252e842f33b48e6907e9ceaafb6cdb2252990c6c217184c443a44a5db3194620000000b0060465c7e5fdb1e8b7ebd6315b64728145c991a3453c7627665aadfdd30d3e78837ed3fc3e9b6ad53c462ffaf0d377781f1bf675be80987f59b5c17c3568dea4f8ed437c95cd47825ba4d434f3ebc1f6f3bf16cd9e9e81c3b95039679020732383843c4e4deaafb8536c8268ad94b4e118bc701703bf3ab608aec8c7d8215fac21fc284a55bd50b3595c112e7caa81e32c9a19cdad4c05f3c539fbe61e50ccddc32ee51e468764ec00c55f91fbd44c4a00000168000000b00f45576bebe067a2557cbe16fd5492cbf6b494829afdebdc78ca73c018fac739a16cc37401f2ee5f41e6caed4f0f7f6e6976e55b9cfbba4f17bc68e45c952f853aa3d62d1360014286872718c9d8ea20d9d91bbf3560aff96bd1f2daba0bd58fec62915168240c6b7c3a6bc29ff5fe9c072647da0c4f662d788f25bbdc62451594436759033263099501b5e5e922cc85018509b90bc2c9fcb33b3b4fce5186a8c55cf845e853469ec399736883a3d277000000b012036866af3d5d2aff56990826ddb26e04c908bcb1548f4e66bd4585bf734d09ee3b36b01f026f9ccd69395356294fd7c79f2e62ffb8da1bcb823a9497fcde9c216ceba02100b43e050a68764dacefd2a00193c18b622d0e371d4c16c8508a37a025290d6e3f6f1856c18959b549e6261760db32015c23a4d7cc1efaf3cebbad6af450cb15e3cc285d98ddd6faa24e532c76f11a03a7663e1a5397a779fb5287d943aff09fb30b44c3bd2878981db36a00000168000000b01de4b007efdd614442b2bdc959414bde48a332271b4387de2bddfeff6b5912a9de081a7c39ff91fbfcc6156e2a4198ba11cd2a754a78b2b70eeaf31c43ba666ebc5c776d73f3e785b3c0c695ffd70c8f4681f08bc237bfa12ddf092f8aacfa854a6d903c844f93febf85d88cb440eb851495fccfa6e1c364f1f2e2b4ea51472c697a3e6dde6d6bc9c8def31d8713285f27ce434d8320df7049f70e2e0783be3f1ecd301bdd25673e48535a09a53c40d2000000b010a08d4042642d519dfd68cd91eca113ed6c43dd9e77ca230d347e07d138079bd75c41a98949a112e935d8ba7ae46d83c6c7a172402e2bd6efe7a25ccc76ddff85f8b82975d8593fa0a7903ed2f60686ce636c5960627ce47baa8ac94eba2617b9ea09e8e8ee791dabfbd407b260ca1120ee836d7e43f1e67d5d1ed4460c1ed856f01e3fdc12aca72e35f5ccd0b968a01f72f9e665555e93784bb9150fbcb69bdaaa1669a7ced916fd3721e6187a45ec00000168000000b00189cf5af02d3e8f2d8d349d7cf7c9cb53234757cd87d47e525ea35fcbd37f37ce5d4e8100bb1d3190675ea79c4d7c743d8a14f12d824904555189c9efb6778368dbac35b015d77662e76d0fc37d59e0f9e6c8c079f12fc3224c329ca3c1a47ec2b0ad91a7ac834919654947b6a4ae4e29ddf107ff19dbffec5af70c2f6dc59f58f5e51797ea706a9124d19780236aa20fa7a3dac3689a9a0f2462d0be27605ea9125ed401ca43f21e77bfaf4e738bc6000000b004b5e7cabf6ad2c77e0a42d81f391f8dd08465d1405aca28f147f06e7d258c8405d1a0906d147ce6766c464949cb61edf8082b6b80dc3b5104541f975318ba182a4946c2996c756ae4e084137001e4a1a6448dc0786f01b5f962f82e602a01dee00ec62bf2f3cd1888aeef15ab863a740968c7f38d346a43147e67fbe9e034629e5ec9b454bb8d6a6e1fdd31349f809303c577df46f7e4da728e1abceaf5bf2ace802ba2833ba4094ef860198a9db93a00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b010cdc0c9ec2837f66449ec16c53764d6d46e2989dcd12d4843b7dbcdf44d0b1fc6041fe6bf8cdef5ee1cfc604d320d0f7b2fc81117f1f573a628813011a56b514d4f3820913eead63f6cdadaf2c88fc2f03346f55066872ad554a78fd874d85731c34cfb4778e1740477e935d8faebe02f53267e88ef61da7e90d9b1039e844f1de2d70265ff9952f58f770e90fb175f0f29f41d1823944ff7fe9f1b6cff6534110ea214b0813273554edf532c400e54000000b008b93c1d6d77c9ea2da8ac8d08e57aed30937741ec30a422d8eab311d41228a93b6433a62ce1e9144f0f2128ab449986ae1911e975cb74c381533200fca70a8ca265f5306b34553f039b1f1741fb38c8d1aa2a89744df94b28347c8be40fcae5737dbe588504e960a7f709927d60aa3321f91b9a515a5b303e9fc6c6ef851cd89da4e0486426346262862b5416657cc30b005b61c45af81300238188e032433511fd82f6bdd48719239f5fc0649e946e000000b008f8701258d161bbf52af2d85a9e9c53ca6b0e9f88076e2cd6a2fb09495dd09199e6e7b7358c0f0e549fe55261aaf25b89b6acd04e3478b954c4c41c207b44e778647ba5384a0785afd0bd5588c0167c415ebfea44d2067c9c3f3fc4d4b93eb9d3817f84e918f54f74b73dd1f52d2a47032de41e5ef514a37d8fd8651341c8dc2a6d5d3eb4c9ff2612aea03438ee42112a0e8c22cdc399bc5268d4c06a9f4218ac2cf1a6ffc1dabbdfa59969ad2e0d2d0000021c000000b029c4d4a57f8d14ed8012a300cfec350bcc2fc924d08872936b0f04efbd8ea4508c22d3f6b7d1458593cd52cd8e449ca9296543b835302e8b7a2ae0e8ae78eb05f3d00490d0dc6d20de1738ac9b339e7aeb85ad0ba6aa25f1284091f99c9f5687290c09d8c21dd544c7fdd48f838d6f2f2fa54c2edb22676a59eaa2cff0ab01f34f5288708ccbee356796cc03d58087dc26ef7c0f3b335a33ec612f379484b5d88b1ca90253fb7587d7b81ee3c1432fe3000000b03039bcb3c32d0986540173233f1d7e05ce25af3936ea5c387286dd570544e911e396314abbebc24503e9118e5956636f54fae971b8e0143b631d4d399d6c3548474b368653217b85a0d6a7cea934c3bb70b4fe03b639af77d26ba4ce135134b63fd977310faa81e2c175cbb9e735cb3f04c10217b22b67c34fb94308f5865a51a9ec17080ef9d707763cc97fcd55f0c72d515c4713e2827af0c8123bdebbe4b0bc8300a67b2088d28a26e61ca9cbe835000000b00c19fab5db50fd6c4605a47ad9aae0ebbdb04594784708cb03975758ba2c563b8331b54251b3432a91b90951a2323f8e0ab7ac67d4f0b3f27a146168c3878e9d15eb601b2d40a7b71db02f3c12b57f0afed0f43e515228c48d93ee93d3dd96eddd4af8bce6f6031baa56825c802a46b22e293b9ea6c9b435684802bbe6a828cf4da7d55a8653c188c2da09b1595431a8298d5c594ca3bc7855794cc5f27f5cb9d8da89196a3f0f3ecf1bf3fb26f4f8a50000021c000000b00ed8094f5634f0ff108822d5948a4b0435b9f97f5be5d2606b6a46022336e61083dd9674218234ef2f336f8d8792528ddf867eeb1cc922f40ed31e069454d63437801d570d0c7b28cdf8b45dacbeb510cef15ccde41dddc9cf02b4ebd355c9496451db159b4e59aa29656bcf989eb95f2f85adc6524ed0534e934a0429fa381536f8f0f1c45e55c4b03745869da1d5090d7d0c0d45123ed87f63deaccbcc1b12178a71b2414c0df83ddc0b6aea1567de000000b01a0a7a37b2b6b8ed04e9afb48f6ae2c144c7e891a1bc35c4c9e02fd00e97b4a8fe7fd9cc809c0297d0f06a4d095d0df5d26d146b81558f6e1f9fb5c0b890003ea3553d7092608a91662f42c3fe438d38208a08588ad3e1e56dc9ebc8a58f4ff03364919b22b6ed56814bf2ad0c658dfa21de0a99c4682bd33931a5c5fdfe2bc007c61d023e58d9c4d9569ce2baf1e26914d9ac251790ecbd5225d4895432a7c21db05ebefa69cb5ccb99e5c8dfc1d4fe000000b00527a7347daa5d853977d370b3f28a77f07b19efaffcbe414083f4ced8895108fb51d71095d6d1632df7d11404ea34f45e3d30e637fa12d56cf988476c78380ef0c76d8a9182870ca14db2a3b8e64b1c33e1d8504f0577730c0ac0a9806a900aa300734210c0bdf83b6cfddc76e6ac6c27b8be4d333b3d38e240e6620b5bbede9a2edd3e5839ea51b588ed9c61eeafb52bc6078247a45550ea30e6089d00df962ef9d7c91e7cd74a681f0b2a907515410000021c000000b0253b4a1a57d73a3c5ca284e8b16602017325b07818888abb6cf0005d558262c06df6223c399f095bb73234a7eb59de3565603006921eed9afef36615e3fd3a516db67459f11462cc1e2f1c2b61764b5e09a339f335a6a6e2518eda94aaeebf788fe14fdb01764feefae8881f729c401116730a4e5b87aafe90b85f0436e0f90fbcfa022060d93ca8a6798318ecaeca550e08b8fd8f6e7550c7d70d156f3ccccd286b468a546e366fe3bd27ef4aaf4beb000000b00664cdf0e237c505a48c3a7a67b8c288a0448f40d0a828bcdd6228d28b586e6c9df559979dc84f6474311815c79c601ea9008008cccfbb9afbbd669cab87d67d7907066cf4e22220e8a8414fd806a3cc6a90516667a37a38142070cf2498ab10d072a6d8d00e008c706330a193b706d815131e1a387492bf51cd63a0b7790777cf9cf0d9e397669cc84ba13e639818682c11fee2d735852a22471019802a1f3b06f4cc1c16d20293f06fbf85eb25c28f000000b00d1ae1c45571eea44ebf4872ef8596b4fdffd3c7e89c2752acf0b9347c03cdcd32f1f584992fd91bd31ca85a02171f04c99dfc06493449a13af05b590549866a79dab5093358109e1eb225cf294b2220b8806b6de7589d526189b18cb010ee508bb1d28d5741e4ee48dd6a9702498497030809fe3bcbeffd06fc9786b2bb9deb209344ba45f9f612ae79f3ccefd0685e049255f864f2d38b008db3c3f76af0575a70f53a135655a1345ad8f4a96ae5090000021c000000b005ffc9ece3269a35744f8f9d2b1c03f76a5714f8983abaaedadad1844f3aa2b6a08e9b16cbc14f8e302a49982e8bd7df44451ece3648f3fe3e710d50d2b89f0950e2e3085cc06d2754ec6fc0bc0f0b110883d3412b5a48c597328edf18bf5ffa6aac8b3e2a24f3c00de50e3a462e3a8a014ed0f28f44bc36b8629a8c9b275131c2bbc77169bf743c4baa0f8e0e92550b0a4f39a5be70e2bddbdbb7d22760efca1ad87c0674ed3147b8bea4337e8e7f9c000000b00406dd9ee4079ed2973d713805ecec0ece5855b10affacdefceae1c832181e67a4e08c0a608967b301fb2329b694d1a08c674920ba0f2f7d09a7b9528da2ad553e9eadcbfa262ed82d10f31b28a636aee58191fea9e76db354383973918bd513eeea026a53f983f76ef27d7e97900ef607a879c528eabc583a33e5a1c55311b525a01a689a8e4ede8ab0ac4bed2989fd1bed5134af5413c453195943a1d18685783515c6c4d451cd658d0466d0af6910000000b0188a19a2cf0c3e78740d84fc85a37f2479983bdcd1622e473a1380a43fcfabb2e1fdec87e831d4b9b76b0d885582f915a4c5a4efc8a0de79aa639e03b5d9a07200ce0abb9b962e92d7701c4dcdbf9106be99479bc646de601aaad8fb20d82bb5d9c3c4845ec4111ede6c48e93e3b824b028ebfc9610826301b2f1c453448226154f8636a5df3842be7114945cdc048eb0bf836f7393dade7befcaaaeaf6ae6cbd32c10b46ea226e381d110207775c50d0000021c000000b028c94f38bae6f2899e6104308acb7be0d4e122aecc39da69d6063d2ae01273cd37ad4e44ecb6a1d74588e0c26cfda1817c60a13cead5d8ff2aa7f70aee19ef2a264f6e32ae89f7070bd7bc8031eb2d2ed1bda8a58074337e855af2faa8fea5178213f3bd367c6238fcea5211a959ea2c03ef509dd40332967bb126875172f1f898de4edcd9203183f3faa2d31d34c2851136e0f1f12ebd51f538fe653c40962b74dd154156370fc83b3895b793979f37000000b00aeed866d882045f0705776afd23deb32866a251c024d5a773944a600f746a603f15573cb6826758fa42034b6f07447bb408af8fbc4777ea4c7bf800e0205e84fad5fdc66c2c21bcac253d9447bbdba6a2e81eb32195c19f8897aa450b75df704fb7a914c01860292eaf2d10fbb6a12109960481494ab27aba69412f9772c24798ed7f1abdb4595f731ca230c808b6ec195e4cf1d6d535715d21a0b6c884f5d32bdff99242ac3a2139b5261c9bb91282000000b014f391db085f00ca21f9d5dc1338781c9a752d19892e68dc373d58afac818c8deb2b369f7eec20f08d74e5f3676708e52a63e09d8f1fabe4f65255d24da95c7fb7411a49b272431010b9ed20810569e6a11f0d00d4e6d81120d7091e9c69548bb760c7f0fc3102f41edab4a0aacf88471b7bc2ef5d12843445b316574f90c9cbd545a589351297824d4fc5f00b0955611417278a1ea21b11d72ee65c0c834d60c7aabc790b85f799ca51916f08c7ef660000021c000000b0187829e3a9cb4a1db3ddd0fff416231388d8b87b078cdf935d7f6d4c80e6243730aa54b5fc2e634bc9181ebaa0f0c6d54858a54d835bc70b2857c946cdccd6869de6a59ff5f923c852a6c402a4e43d2ebec8d3ba4d5a4acd313e23a121d978fa2ec6c7a73ff810d812d6271adac19f6e2b921222f485866c11446863c20ebe5e6a4d09b71c0e622776a611748419adba04ca994c75b7642e305fa6b2a50ea35529b6bf4120877780e26b180db41a2088000000b028de600b3e9a0d22ef927c75702fa589f31e9c931c7b50c9739fc55a5c78ec4aa63a85bf26adabfc69b701534be427252014c7f7c871d723f005cae2ec4113c805548ae4fd2860b301ac334fb5356403e46df6ce0ac6ba9d40315a372651f593675d8ff044f3aeff73595d7f17d9f63808ad6c3e5dcf900bba5fd81182b407c478a5e0e38ae7b0d700b992e3fa45b5e527e0aac33f1d0354713f7b0ae72dc57f5fbc57986f6f1a249acaf5f0d3d3700f000000b026f56f279f1f02ecb0ae3eeb4661276d8b161b8899dee4057ba729a09d21a9082e154077ce9fdd26f02a5aab1a0425832853a8ea21a9a8cff931de35ae114bf637db4e6831055eeb0da1b7dcdacfc46e101ae4d694d53d02a9d83554904e272bee7e6ae133deef4e0186088d62a2e7ad0806cef255a12931398d4e4b6972944b6a3824923f6a978d0d0291025e5a47a919d7ca93b54c6d7059aa8016943f9f35d6df85ace7b74346acdc20110c28d1d50000021c000000b009c9424746990a8141dff40efb4e8e23200a4052ff5005ca03f3cd4805f41b3f94b3c2288bf76b7f3d3913c982e9521045e188af0de43a3ecd62bd79e47dbf0510d89685f55cc503cdabb63769ff621460c9a4f25e7c01945bf77941407ee5f1739a66f44a6a17a327efc82a376cb7e523ccdfa7e1e682bb0bf624fb0c3b886e31c92edd3445b41212367c0bbce8c22d10c39aeed7bceb798bd188bc32a2defa73d321ba7b29835db256f0891e7735cc000000b022f877825cbfd1a7c2839a0916f23713120640a87e583a8a9dc9ecb5dd320bbf78419ff4dbbe74830b0ec624253e397048a86dc3489960a614bca1e7648c43811ef080b2f5c766a986c6f1867c0d6d9b4ed51ece984cde832e01732f911871cabe0064eb9a67c9a2c237b082690b54d80472a4bba3a9b0ab1f0976d09946785d8b9cede35fdeee7b8a0b6734a717ebd610a9cca10d6bb31e6e52a2c7baee7967273fdab25b1352a9b87a703ff7e7aec3000000b022799eeb55b20f36fda8b18497e9e8843cecdd2f733e67b450b74ff1c0fa02df8cd416f388e43ea7b25e3316e9178960e92f05142454b1964035641276de9e278f3ae22be1f518739e28884a2ac5aed2f1a4009dabb007041943d30f91dd6255ddbc031219f0211379e7222c5e8c04ec200bdaf5e9f1304031890b4334eaae62e8c9db783ec46302512832b18493c5a50622865988ed8c255ad87a397c085d0eee9bc59cb5beb1194ecc8e3ce4859a8100000fa400000168000000b01981d3f5ea832e04412f1cb839dc1c600766970653f3811f5e594535b971fb7603fe2241bb08fb5590fa9c155af0d9fda72e78f478eb41f18a0abdcf67537b770ac6f7e7a2740c5cc1bf85aa0779c310e4d0550e585c0b01e9bcf1a9c0e8614a61be435d04ef11161f1d95a61248ce65250c11cc447cc28d18df92956bf3d96b10ba245cb9f658c8de4a9aa2615b50190fb29d617ec83d0f0833b25661ee19cf66f1144ed681eb261e6326ad584a9f14000000b01e206070deacdfdeed93878a9ec47f7df5dd686c488c63952e20ff8a6042cf618ba0168fb21ce7294baaf7816f04cae0a638f46792e6b99cc48b9b08ad6348863721807d15805bfa6af0de31d29ba41f2639643628f7664e9c8bae08ce88bfa072679a413173fb1ca03ba7be2741f4fa15a41aaf96e82ca5584ab7a770d271cd5b89b12541d8ad3bc7df54ae77404b2205fecd74ca4d967f2d7bd5159e74bda7bc55c8ba5f45aeedf829600f58eba86a00000168000000b0269495b7a5a3d10762a8215e3153b26d5c9b94683dd0edb89ce0c27868f8ac1a35a90619692878453b1bd3f24f0049b22a1b157c9b8f29374a5e922cfeb3a79eaa63fa9cc486dbfc5cdce0ae2ea1e2abcbb298d8fe3db3de33955d4627e12f8dfb639a9c42c477d0cc18f4af3f653d912b5c50f74768cae4d15f747511814750f811314920f103e45c812a33be5b8728060d7170489ffb7ea9d7390838cda0146544e60f79dae174e4086d60fcd77a1b000000b01757ad17a1f5321bf1f19a2870c6ae75e2f1a59b0b9997eaa5c94027d1482d6f0730d0700041e6cc031257693e57ae5553a2c7d18ab43fc2c39313d62745e05a90ed826bc18f1a5bfca92972f96e567dd472ba75cde7db764d523937debf4c2bf11c9b334a5301de8e8bff9f0a93035c242a6b1b59d80550160e1c701fec55d58e9556ff64e5adc8ccc4d274667e1366211546c435aa93a1b32ff411c49ccc718ec117896bef6af3efb98991feca0d2a00000168000000b014c4caf53dff697fa1d4b3e4ea7c1cd611826b8b3f8d66f96173c6b2297327a1a0d2a64e2a16f87fe5e046fb1d58f21a1f0e84fe970ee3cf14448f2b2a9163b929d8ac1f7283229745dc5712cd25ab430622745388701d5594f2f2007c9142703ac1a82cec1d708eea8b07e8a86338f70870e528c28d2e0f679e69d712ca9a5971c7093da1004608292e2319315bf1a72dd70a80d26e0d37e8559ad057d982064a728c0639376ba4e8278765f6c72915000000b00f35faa15c85e629adbb6623688ec836118feb5ef9d2ecd9f5dd73f76ccc6597ee54294398caef936c45d082cb50d8128302be70b096917d426fe1b738a6c49ca6a94e6c16fcb175d6debaab229134fac69f1f451eabd01f52fd687896da452784b68b6b25961731417129bc83d2e6ae0b9d202a06a0df10374b71513033d488cc2e1e6b91e6932d4273de60fdaed234249027a958f977b2179a2db5ad8fb10959eb446bad8d82896c310f40d56c0a8d00000168000000b011eb66cd85bba7c745a7150770b9a47c07df0ffba6a295fa4d3f7373691c4d438999389ba4bd6e11b40c1d344664aa4e03c47d19b098c1f763c088bc29a2a3b5d20a9f798f8151274920b6e90833bd8a3a301878829a3fec4e0264b108fe1eecf3391de139eb08ebfa558ac4363444f91241cd85cddaade56b8a0d73b6cb03f283ccce522a9fe6c24020b566e1486a2a0de9ce217bcb0b858cbbfcc31fa64378f855d5f8a82e85907a0f1bf88ca032f9000000b006a1d16e3fe04c6238ab7dbfc5cf2f471e9148d563e1e01284756095c34e324e310467d5cef691bc4e33c94d3bf466bd59a14c306516ee9f12afc5238bff4a0c274b0a85e16c94f3016b5c6be8dea3e0be0d96ccc8b47fd368b4e7e9cfe1cb8ee98401443c6c3877c8fda0a9f0dacaf6046aed2dce7b5b3619a49c5702a8a43debab7fa13a2423ffa28f395dfb35b97514015e86f8910557ff74425d9a98ab9b683f55cb659a1bd9c5426986f31f782400000168000000b02093ee9082b75a54a60238b87b2b9a6a8ea88f469cac0e1cacfd05469ce326844503afc0dc93e274b391fffd8d633ea0be3951d285ff36447c99be29f1c1a70968ba1998a09e30c44f190d895dc04cee8c93f5c0a818ba73326fc71d544fd5cfb4088837f5e71e6bbe156dbe14dc155820559894df49879ce25f6b91c863de09aca570277a2f1d5692b6e7c90b990cd110aadff56cbdfd170256c3a41e711cabbf620e9bdca7cd9ec70ceaa6f6ce391f000000b027d987151ad2bd7e51a9dc75a1b16278816c7d9d21ac07d19c73aceb41e5c296714d87ab336186172d74cd21c2b4c290761e129cc799a7ff85292ee41058729ba2006226627ac33ec0fa365901a9d49ddaa2f9515d28f286ae407b12338900bd6930c12bed403a63d8e9372e307e635e2e07e01e0312ac47b754ed7e0bec96d814a08932d81d336c6f645183949c1e8c25d2ad7ab52035dafbc20b5533caf2330511b6a7f8873be95186919ff8cc7ace00000168000000b01933fae924c669059ad99b0f1637741eb991a8b5ad4185093a3b347c249bdcfb5c4439fbe333a408d0d76a591c4851c35e9c2fde75140f9533e212f9af5f1141790c5e2e3c6bba1f4cc7376f84c607f0a22243b08f3a64a6592c1cd997fde110abcb917893bc3fad97fa0806d59cb31d27a4110bb26bdfae935106d772b49da7a0125e3b43bf8cb50e82f2a31ca30bbb24d3dca52649963bd462671ad128cdd4b8e6a5a52beb48913a4c4e87433a3bb2000000b013e707fb503f93c292d10f57aa815a4fcac495068a70c055499dcf8d63d0b9b1dfa56aa5a96b8b4655e9e9097d16fe0dcfabbb6475c49248404d7986deb12790bc7a12686600f64ea57a588f4ea1ea9fc768455453f80c4e6ef80b1d4c543c9822e11a277e55a5f78c94e4a8adee885124d2f2f7d600b7cd2623321d87619edbffa1dc9ca3ee9df667aee99f8f1f964512b2edd5e880a4cb3567a296bffffc91e822d47005a2c6b2d20df2e21ba2be4e00000168000000b023738f3d7443c654197575a34d8dc3285d5a3169ae44ae19fd0e389c1bee332f4f276b8e7e19f853072cd3cdff7a132f7df18b3d97298da3f04ed6988574a0e33ed47136a7e9008cc24618c6fa24c39278ebbb1a5d03bed39a69cfa57a6010c67f74b69a541d0a1dca422eef43fca1481d6140f894261e746e52c212945f816e832be2d7011f9f56619f75543c935f1624b27af8ba549f1793f402e5329d44644b649dfd6b51748f3f248198a8b72132000000b012dbb7f60349555ce77f68df64751ab4bb3fc263684b9fbcc695a2068656a04bffd40ddbe37dfb34c30ef425510b3fcc92945f9a6cb8d0a9af25196d84592ad2846ad20b1bc1f1122d65e4d2c1d416f6c35632ccfc3192509eee61728dfd10314532272bca532794026890dec113e43f04fa195e105fa5ecb9b50d7bbf9033ac0bf34d003a5a670d34afb7368450c9852a5ce36c05203763b49d57a976cf06e49e5522d11114c9cf4815776ee214eb1700000168000000b01eb918336fbd4652ec389c06f246cec7a6c20b00df8e51b31c6472e5224b4677ffe2f97e33c81058b0e55c1991706946b477f0610730e4c1b90359572b8433b27624e3c5164e1e38d06bf65f8d685d0cd15c9a37af3487b7eba92ba8cbfc77b78e95b51d53ece3ddf7a24570d7d729e0029d208b8eace2df154bd508834cf5638319758cbe09332d12b99e618bff22540e79a4a0af07c584fbf877f7ba950efab3621f9770c365c6fd5b6544b792a48c000000b016f384cb388bc790dd163bc04c9d75f9a33844d3ee969d152d1bce86bf46d251bc78aa2946ca072234523569401530624e98839aeaae1aee6b66bb797eddee19cfcb7590059d79975b0b28954b7aa88bdadc6167568a4f0ac07896ebd02b251eb0633dcff9ca127ac4d46d75b0e18f7429135cd3fbc5d20cf4ab3f1a18205915be8fcac23aab58925622a1b58aa28f2a04ba684ea6fdaea0f163bbdc68d012172a6e2b72a3f2bb845f709052cfd3ceca00000168000000b02a042e81b0f5f048c1a145145c4cf1a6baafb8771c73376ef29301f631543f447d7c6a35229d3d6125d26fc4735ddaa063f78bdde78756ca2441e47af79cfb44b00a7e60bd707b9b87758db29581b0ea5a7cd39c378de2eb257e4c0757784fd1f79697b8417191cd122e4ebf3206c17e14ce0c8f54e319654f2d27d16d92a609b35b2b1921a94ee7c9827d2909f86d6605e0d2703c746fd95bbd56e2d89638c95ffd0352dcad4e83ee623eae5e0662b5000000b00fb63d247f6be16e8af56d9fa9bd0b4f2b1a4caee004bd72bd85e9b682706e876f96c6a25b97ac140846f8cd987eccddb1e7a46255b12f66325fed78a4382eefdbd814c8e55fefd71c2dfea08aee630d5d8572336e11cd5a1f582a46a5d6a9a21d67da31119ad1fd44705d5cbd5e55d40e5beb9427eb1c98882ffc2bdad5d5323eb2f55fd5d3944a08891c576bf90ac12b45a5bdfd89cf6acc40310d76fddb16970b533785f2e5c3c21a0c4845c6dffd00000168000000b013c5954abf65cb9575a0f176d1c1e28399a7fa882cf6df08376f6034e20970710d2987613942ce564645d428c6efc000e5ace79f6c9d0ba5cd9e1dec39dc41545156096b82901d6f79c3fbbd0634764e051dbff60048e69cdfde774715d62cebab25b9e325b60af391fe311d10b98cb93017750b7440b0fae3206437a58ca79698fc523c671920d88af043cc5086aaf91475ec155112103d30a7a47ce0fa88bcd61ec0ba92f8023229ff4ae5d3a367aa000000b00c97a8de8aabe4d6f6acd4efe03bd6b9f263834ba94a272c5fdb68a7ccbcad04c5bd99a05911b2f66ea71b35db7157794bb2fca7d0752f0a4d40749a118898fc5d90d755115aaabcfac4b527e9b14a3a3a2607e7d069d5cd3053f519ae5ec29fa7b5c01f62787b61fed963998e884ccf0322998180321fb766141b1181f82ce6f8d3304487c0c2e3be85e3888096807c04eb6d7bde62422327c475e2c469ea1890a0b8333241f2e164e12f0ac8a0bdf600000168000000b01ef95d91924c9d17ca619e711320ce16d32b4c5133b5b8eee002dba874fdd3615c07a51c7f905c238efeb8f3e6433a0416aa0c05f52becf06f6fe7660e17bfe7c5434b9fb354c3df7aae2fab9cea551a4575a28b0c5953db80e25b577e823dcb3fb9a0fc3ea618f3ab0536fbd6380fdb1e6be09bff717d02e608ef125648e20cded2d01af0e3fc6b8149a012d174f73303c6cb2429b37e738a0042aa0d5929b90e570417f794d7825b0b9e2ee04d4c81000000b001be33994fb3086403934c17dec4fb89e66370e1f7ff8456ab776ae05ba3e441f8fca6dca0ea33db177c159f38f2fd3221aad960243778f67c71b5469742da7e70cb5d94d34e43f2ada0a39a567bf2bf1051c2e24b094d807ce09f99b1a183d52ec41b1a956f8e846a264c77d067fc2a0aff4255b1d49d2c111f92aeabec4f2b5cbafcb54e54a6b1a34d6e97c786c3d30d4f61cc3011a051e472074a453527bbe89070415a738352763994a1594fba76003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b028b1cbdcd631d889feb7dacf3c9c7cb5e142d41c9bccd5d7fb49d80a6756f5476bb0401119cce83de0de2a14a9152e41549258a22a6b5743773712cf02655395242fb3ce556009e99263f2937fb6fea18393db6de0c618b68081d7a6069084082bbb1d8a908ac312b7438e82ba22680b0446ca238e502e714978ab94a5ff08ea9c86f547265cabf5469e6b27f6be7a7424219de1d9680e81022a8e1d5e4661f729fc48f7c469a9ad5c7fcfecb2e5062b000000b002ef692ef5a4cf023bd42bd8af98f4677d6712a88164c5559cf6e85bbe7b1aa0e2f7533d5f230c8e114634612982498fff5975a108f34ffb3deeec0fb750edc106eb81c5e085a3f0a978bb3a8bb035298a4fd0e5226e05127a808345dcd35a0c63cdbb8c57ced90bf8b7521a78667b1b1d9adf582d40ad35d453b1551cd276631349cb151d40d72b3ccf34f821a0f7e70090d6a5a9ae280210c349a143d47216d82451ddb536feebb2e13801ab33c32e000000b01ca6edb2b5ad51ca29ff9072989ec0c86eda3a48ba0f082938499ff5c546958ae22e6e8648ecdcc37394fd77fa0b63351eb6b2cb1d04ee0dedd494f8f1a37d9929b70fc747ae260be4d452510c3ebd3dc5b09f24df0698e3bbe45f1a5cce06bf1c187d1a5902e575e104c2373b6072b1276142de2c21598b7509e2a3f325a9781a8b2d53717658d8d7f386b3802066e10a7836fb71c35d08ae96a35dabd1976b0a5cefa0fcda5dc0128fe20816887b370000021c000000b019ed01e5e08e1cdb520685a9e40c8ff64910957490b5717858ca10014770de522df4df8ca2b849b745e55ac5dde26c3acd43dbfc210202ebd4927e9bc8d9cdf33f4b16c74e29ac0cf6824bb6d7aa6d4da234e77936d34c84d8893b4aa6486455ca64f2162c9c9e6e9506ce92978b8011119176421055774bc9eb2747e2bff13d5a4b770e62eea27d863ac1c3679d8bef062536c321d58db1db625f77e8348b88bb587b6564b55f1bec454b1bd3b67c79000000b0086a21a3af358c12bac902fc35a2b02fedcf2e905ce334fbd58b2cf34d737d2b45b28c16489fbf77bf79f8e3272b9832aa6a128ad51726495af6443eed3cf6fc71a09e03f303b808f245d3ef3d673ab644ed50a8a64f53489ce89900641eb02517fb62000b2e460c63f615182be928eb0a661dd9c8ce83eae60e6232cf34c6709513d20e2b055fea9d9c43dfcfe76d6c085886164fb85efae61ff55c3e75201b1d99b54f4b27c0fe1df7f573d506f663000000b02f221744a274a5c294e856f679f1a1c937d5d36d58e25a124ebb57f7c0024260c8761718d7a932fcdf8e4d43b8d753e77f45f21e16fef3b8e788ead45f78a15865d5fbfdf3257f1b8ab9676eb31e47c1422659357700c1551d9076c43aa254c31d348311d16a39bae9ff26032ca59a42252bb3dd9540ab08e8a08212198ff9d59c131fa8742d5fe5b1d5b3123957384c2c9ade09f5f8942c2692e1a04e8a1c01e43067e60729678a382ac6691ce596010000021c000000b00bba54c1bdfaae47b2a194bbed6cf01d0ab42a6764fcb59facb97c9856369ddc7c83fa5d8589753844379d9be23ba4134c45e61daf1b2763ec5014b677be1c1be51024f09202de6f8a02bcd410ccb4b4b64f3887569d54c87a45ed171aa007e808d999c7528c1a46228987c6de39bef610738d4fc0dbf3cff613e61fabf7929fa5eb15861b4730d62ece6999329644232e6d1ce7b6f61b42632490b7e938c5a09d2a6c1f8ac78f704a03b9c418f7c35d000000b00316634bec85384ed8c6c28f3da8b0de595ed364bd7b18e19e11a2ba27e8a780b7e91542661f1e273756c715e76181dba882d4cfbec734253a245e96441991dbc0f62d6a30248a6a969a9c8f2565e98e3acb473e3edb9c44e17392de31527306f2d45c252a4df8f4de60cf5175208be82d6d91b91c3f104162e982449e8633ffa3342debc5d78344400188a3c53094e313255b9aabe60379a6fde129339f4dcc81b17c959df68c86b98460884b249129000000b02b46eb54f634b5369397075a256ad6fa91692d1c8d1a8f206c6a13c153a7cb3f13fbafab6fe73e91a96f40eb16adba098da383f47d58072c41ea858864372fdb5e3155487eaeb8389e959cd4fa567c20459e50f4652bb289c9d6555af3e21b5fdd99a73a2998b40f4c44575c50612e4510990a298e2f5008439cb9b4591bae0c457bd5aafb00d4d440d2d86e23f78d310cc109170b72d8542ef4f97d8b7553054d462444c76904dbcc69ad706dd77bfb0000021c000000b00ebfe238759ebfce5fdcd1b03efefdf9e8e6eb00440b4b5fa2122123ab87e8e9a7e7579814a2e34f4e54cee47622e590b280b5fefc29cc3bb3656a3277890cf148943979f0767ceb0d400e5f782a15711a1455f7afe6f7e6ad04befd043bebd09a0c65f1ca5ba7fa280064628cbed28f23dc2c9798f44b36d19cef9282fe37985172de145e89a5e4bb866ef4cbde8c6e1a8991f52a815a4cc5e2c0773326dea13af1c492f4f48af7a3c68df947ba25bb000000b01f67cbec447f41f9fa75b1061586d1730620c557a0721b51958a4866474fd761cc05237d650af50e1127a829de8d02a106dbdd716eb20c814bb83a51dd9a0541f932f3e7d5e4ed01f523f369bbcc2a15b3bcf6dfebeb0b8bc82c122b89342f3052f0fe6e59f143e586b5057795491fe8034ff1c3c1198e12b7035892ed07dfc6c772b9c15900eb94e5f22182a086ea61029874fcc95ae1e421bdee143fad5b6a8abe7a34dcf96b6447d41548a1de34eb000000b01dc65eddad7cf688c391918f2c2a090d7dcb4e768ab3def58d02a8b5bfbbc79fc6f2764a04e29f0a7994225b80f64f1160365fd4e7a77428c89a6ce60eba3bf03feed7e1236b4ceba1c7b7de1ccd8cebe7622689352f08a91a6f3cbc1d38ef35670154dba565321d0c804c23459c305c06d3b193ac221fb726a2da4e628317e62d54dc9d7dd8a6658840bf73ed8c132a03de03b4665ad5cc227a487cb9fb436860da4b57119ca155ebb06ce5a5ae76450000021c000000b02b36f2d6f7fb876c488b7bd487774f4db30073422fb0c4635045a8b358434d357a392cd84fb733862ec5b894a21ebfa65f513e04229bc337459535172f9ba0ec020dff173d2a9184eac6be5bc566500f91068277f94418fe34d9a34bf9fec41e8765471b912913c16525002a9537d228011a3707df579c5eef5c2c02f2d5fc847d2c532745f81e99549cdbe7ac3ad65c282524267e517b15eb7f57f0137eb1ab03ca63d46a61b9dfff86b4a1f89b22e2000000b01e29f1227d12f2bf6784f7a84535883dabf75ba26d43e1afccbdbbabcb0736008be0f5581b903db955774d8eaa68470e11d02ce8151e29c52464abf61c3684e3a0291e0851d91bbc036b1f1acd77c23140b49df6aa0142034ad33c7250b39031eef615777da312556d29651e59d328ba2bea75b7159cf021127784bc4cbac36c81f471ac85279aed96a01478e701872c0eb402b293b282f74e8e565c17ac610c853d190268d12d0a2f73bd2d138c0d3b000000b014be21ada57824113cf86da1f149234b5f2e51adbc6bc5b58b692c79a5f4b6090e1341500f7cb65f399935596be55c3208d29c16ca6909f724412d0be82078b1089419ea976b6cbb293727c8b08eda6a1a9a6b7cbcd41635a55dac20dda8bc5b765447028779b274ff3b187f4fa195781069949d7e3088453039d923ab2df2f7e48b90a1eff097e1b1e5ed11de1a38881c55d39fb3bf543140c9343fbab016f24d22fe8e9727ee24c4df9fb13c6e033e0000021c000000b02c4b2acbbecd3b676270cf5b611b553b327cbeeac660587edd516bd0a5e87458fb2b0da3c13383974f6bc1ac3c0e313ee46b61149e22cd22d85ed6f0f048e1d397aa92c9ac905541e32ee51225a4cfc03d37fae169a2b78e91ca1f10848a677033c8e788790c596db4f1e55e96f93e211e9a5ab3794ae6f3e3b8f121c523c25d8bfae32aa90adc854b438488f5be74fb1d86a9159f3a7409f056c1628f6022ab35036cd1c4ebd3cdd7c9e0758daf6895000000b023a19f0d8b708f3d03a3624985b171ec824bd6178c848d2289dfbe4b7412f0a498c359c4bb1a2ec08eb55dc61dea02fbfa51b20143b617a720b8ca8bf9422e4750fc2b957ca1fcf6cdcc7d90c279fa75a3250901d6b5f02d6710fc6a34057b4f19ca9e7f94d2a6fde5fb7023805a2426251aa248dd755f6b661454fe308591c2d5c109f96e7006acf052cd0bd28003ea145e052c0f800c61a342266007e29bb13189cd6d79b8cbe2ab513905ce778a1f000000b0294b6701385877d22405cf9f549b56b144f6f55a360177497ece327e3976f02ded729c358b2707c486f9f1f539a9d279ebb16c02c474c54ad32339e243f0abb4fe0f14a6d00f502e438c3b80dfb4ed93d5b1bfc69d1da13fdbf173f39ff93d6e38c44e7ee8e0d6febdf76b7e15184ad000394abc623732a1a677f3298a8ec016c26c349a58e4939d6d6ccc7e8b701cca24a35b26f447f24a1e0d246b367bd384aa4a05a0148368701c71c48079b4e5d70000021c000000b003d3eb0adf3b810195a3a755c0bfddc5251efa09cb83e07c12b5987b9cf1a2539bdd53ffcfcb64874bccb3d4de506545e5f894e128426077f24f0c15b123f1d99ccf0da75a1d6ae8ad83e0b7bc26447fe2431a389598a3213708d7190c35ee0c25622fe3c76552a3547e7a90b313df3122c4e61ea777113197cba9710a6efb081d4608eb12c93d53f82a4bede6704ccd1daf991654062b6189baff4fed1f95b41ad61e304e36c76c09a5fc21f02a78bf000000b00cc98183ba4d2a4599d6f959a0a750068d878465bdf7b73570e3796eff6fd1c4944816bf27eb970ca8077825cceb2094f1138a7921cfbf1bba9889ed280d5a39d6ab7d48e2fe0d96262106261701689f96685d648caf78f8eb08abaf8e5710226459e3457258e6447c078a124e71abbc039b1909be51866a1123f68f0f58d92b45cf32529abd0dba70f352e5ba5b8f7e0984bfb415a192116c930c121691e2a3971e43c11d4628751203ef8a1126a521000000b001a940521b52899e05fcbf8e3afd6863e87018bd758f60181bacac08a3ea509ecae41b0e9f13709a2342439f1f0308bec9ba2d770324d69d874b5f2ec076cb527f650cc48cd99f605effe38c81ad16bbad18150fedb306e8b260e2ec6f8c6c069fba9daf5297852355ed303bf4c2024d258905a89cec179fb5c5ab709108ad3ba86814bed4721b289f467cb69850a5ad1e3b6a69b606ac9dbc9942b8b79730a0cfd6dd12d97e29c98e2ae6ec7adbb1cc0000021c000000b003c5ddd1d743e6bd0be8110b9eec6763ca21c073b3cbb52fe68657ff101bfacebc4774b0ddf7c48f10613f51fe1beb8e21d153e5ddeb0fae83c047cac68f30618d749359ca7c73e2fffebdcc7e364ae3d1c9bf21a4f39776b4e0320508d8f9c5480301c1c31a403a4e8bd90df9af0a21111752e4450d25f85c346c638f7e298013f9625c0b30a46f47208ab15785bbe12d8e97c135a85202b6a728dd9daed8190bd0ffca298dd33404e3d457d37aa3b0000000b0033d12852952df59d0448719eebffc533b4666fc20e858e6bb47bd34df1be1b07d6945dd269d8948a39cc97105d4ec357cc3e1de04d78fb46063a35af1ee1cd7e1b1ebc676b74e65e18afd2c14a4e7d47b74466644c8b83d9386a2aa5805679e0dafa58bbe8e69713e9e20005c14b865131ec97a3daba382648e06273a2cc1cf9288aba27c168d07ad58adcaee5b377f05f6479448b8d806e1aadc647a7ba33ab9fe7da45ecba1c9c16dcdc47852f4c6000000b0220531b58f9d9ad6feee8c868381298e62c907534fe2f509d49aa8403c631057f139e31e616fe2567492c50a2ca59ea3b756848653e05088ed611b3b1467ce6c7876654d6f249cf3cdbf3b2236e85402941682400606a6a28c00b3974dbc08aed99fd13c74fed8e22957e61808d7ae4c21ea655902bea81673c493202a161456cbea0f8315bb0bfb50c2907b62814a2f14b4df43a54d6fb3630d97c85f098e3245f1f95c72c0670ccfbd055ea89fffaf00000fa400000168000000b02a408003bfb9c2f38e55cd7bc5977b6f571c25450774b6bf85b8f747a9674636caedfda8eadfdbf0912b55f846988fcd631a9e00d0beda281af4df3c732f89b9ca62f919222d10c14ed86c4e9f8a81613faecb374e95c82463c71f206cd523be602bd3904eb2228076dd543f5e42d3772b9ff97d8c0e5b9049d60cc924328fc92ca667bf4b0059a05df479642177d82b2c5859d1108efb866fcb73482f510544421f6a0408347ea115780c8f599565ef000000b00378e4be56ed1cf9e03c71d26570ef6b3f6fd9493ec40da991b24806fc7428987234a89086ea86e3f2d9424a77fb5db3c48bd15ba486c0f754aad0d67f6baa9ab9db04831075b1afb95efa17d6fedb24db850877d2a31cc9caacf1ac2b1414da6dbfcec2608199ead6d1081ee0f33ba51452372010cd1a6946903d0bf2fd0ed86072f484832d0090a2944eb87614e57719cde0448319c8aec0eaff5c46c0c43f894b6a439eccddff40acdb34fefad78300000168000000b0071be37b0dcb72d0be074c6e8580c9f7952746775d5cbf1002c6ac2d54000e1353d762181bb57380778b44dcc53669b4d4f29cac13d7594e926553a67265201937def1af34e8d459f5f9413e27e04519ef0dd25b90d5d6a667dcbc270cde05891dc3e0dcb1a38050a795772b8289613d18280ea7541fdb4b46473c051aa24ff68f2daf31eab2b18c77f1586e5ab051f40ee6b1624b610529fdefd9dd5006cb87b762ff6becc58ea84416c7b3312f0256000000b024abe33cd5febd40566a84b8a980471dbac26395f8c88605b85e9bb0fac2e5685cc25aefc45fb5a886f83800271b49d9d16c68550507ed09573b4e6b8e5923ed1237c5091a776eb136b2b2a559fbbe69c985be6ac7abd85db2e8ac9083f10f0d1f5c90e5c04611366d8d4f274346f721301d8fde13475fd3b5f5911b46551788e4e6bb8f05060b5e922d0e7e5f01968b0a34304fef1812c71b052b08e10711316fb69c53a273fb7001c876bd7c30031500000168000000b004336816537c7fb9794559dec6981a89b69ec69ee605e7529739cd284f948eda0d06a3cc44be6f5ad7d65908d478944de8097c86b85b870ed495cfe97aea25ab6ccb9902f0ef2f1b3bcc2716c0052ae208b036098e77202b31754469ba6d6993fd139448a38833297cbbb1c51af87b6203bba9147ccd27df8a745929ee9b15c48fc013ad7f3d99aa4daa6760a471dc3b0c82381815f5e462cfd7ec758eed7de06f8b071cae111fa9e21f46a0d4ffb97c000000b004e98730867325064ab2d6eeb7bd1e46aac1947b0355df9feef25f66a7e3c02eec71c16adfca42b4a7097e7265388bf416a91b86df2eac87afe5b3c1dd61e1989e906c06dea4b650ff1c74b5b34a08fd25bb91772fca7cdc81a75bcad0703df380e506f53be5c6680658043862f519530c5cf431c02803413af29325a274a0ee324d8b18ed4f835ea6b6d076cb27cdf727dd236c51194e7ecc1fd07e3d22b879947a17e77ebb3c8436a0b80fe046dd7f00000168000000b01457e1284f1b7efd5fe52aca02f545086680eeb923ec3529b07b6bd234baf4ead12db785e5340a2d252bccd6b14f19d85eee103928bb0456eda34687c6d7561d11c7948c9ce6dd961b1404f92213540f572f0dd981e9a45dc2792ca74177885a03e7d1194883fac1dc89794a9c81621c16fcb494b24b288f20bd723363de15745c7ba8845ee888457900e23cb1c1b5dc27a4704a70e5628875ddf5dbc401964bc3421a81016b042a690a9fc89bc2a936000000b003ccfae9169df2d8c96853352c93a420be7dfa3e6b474b404c351dac5877a3dd7116f6eb6c3717d8ce7ef42b18a392a1f88c57eddf2f8806d71418a01831e9c6e3ba6e8b413250d23c457ff1f9150adc997d913a4ee6923cb1a94b686ab21b2bb67cecdefb149b489cc709acd20bac022f47996f175627505944bcc32938d6793ecbd0435121307a41bfef1de1247e4217deb9a2d0d0ca00c0a3c0c955a8c7280db0d37b51c538c1a6c855f70898010300000168000000b00e2c9fa53beeea5eaf57bd757dfe1c693facaae13e35cf6209e636debb475a7c9061d64a13d0ac98a46a7715fbee730d94725fd302caa0f2e6bd7cea5a65d990c06a1c7d8508040164d5a60b26ca90f6237b0227bd2870daf01f31e41f557478cb0171d7c4e4fcb71590892b50cc5d232ce3b072f9227f66f903ea73553fa61d18214dc40521bf486341980bc20e16630832866513b533a9d64e00a5395ef14acbc82a4cda9e6a402361350ed9d33b66000000b01e9686fefbfca1edf1eeb01767b275820d12bee964a945f86fd8e03d2d7923de5db50f1f6ff808290e0a65a716e262d7e3fe46fea746cfbe8ba9880a062ea51bdaeac32d5181ca5f1e14d5366a84ae0d7a4c7079853d3043605aa619a32434685df4668b98fe5a339c6fff198a10159f0850d9ed33917c444dc7a7b7a0aa317c21d996c26accb1409af535923aa1e5d70df0723aa95fec3d957f5d96be09642dd15d329c127f8ba305d5bff7ebcdbc7500000168000000b022153abed8bb711b01691ccf6d148e48cd4c1cbb7649cced6b154e815a545dd74dd78e34694a044e37646d42ee73b65ea53aa5aaabe9eb96251d6748954dc04eb35b5f3f0f7d9d8184ddde16f4ff1590e2417cea1f5d3772052c2c659cbe0265c9825b57c56e9744ac123101138c2e3c10f50c40e9b72b1d12b5a776985e66ebdeb857b0224ed549b10b61c8485b15d12e4d47787140da6e5c0a0dc21b8d30c526aa40a1c87f5aa4172f4d0378c6cceb000000b0278badf450c851255fa0c708c0790b3d1dc037a80db09cb086c763e5b3c75b328f3aefff3121bed23e0003d2c8ff7ea4b265d043cf204f8fbf249b0f2055a33f399b7123c71d707a515f0bfd5c953c384a1b28a70b5bfd9d2e9668a7a301f37709202807f403901e8ad47380fc05f8181696f994f6aa78091859ea56e9737205059695d6f582a89a1d004851093826e710fe329db8c32631f7b0f523b44971f40f01200fa3e8b4aba7dd5c041c7221ef00000168000000b0000744e5edb6586dfd2e400fa74bb0a9233f497eae003733464eb73b402ca8c5839d28d3a21ad3356dd58388eab4a701ee05451601f6d21cc87b31669c81b4e9600db2f0bb37934be9b28bffd2b43647164593be0ddafbd62a11dd168232aec6ea3427a5a6befa867e0491c7147ad64b00b5807e2bbce368d6521c914eb86af35a0fd2f034ca7711f2e261244427025a11980edf41f309b042e36320b8fbe538948434882c116b3853d63ffe1150008a000000b022bc4a0c1d5be070a25f827774f6cd483c5e741b728c3090b16fe60936b8b758066290669a8524af4263a4dde53316fa9a94d909c58740032aae10bcaa781be308c7e638176283170af351e111e58c53c7aea3204eb619b98e1de082034aca60bb1b893f9cf7df849770172f4e715d601711b75321c868a499985eb96b1e3dc63f4a4ec5efbc52d38a55ca1e63a3bb2e1959263e5277fe597bd55499bffa515dff05375e2da9c7684de48d302be7598b00000168000000b001dfcf143c143bf3d3f875becdac36afe7999fd14c1b3ddbff9f69af3774a66d03426b125cdb776b1be54f202de6472528fd3ea30bee24587abc4d4a151501c403f8a7a1fc2e6f65045249b6d4ca6da9e789fe470467fface70303551235f2948fe13611b7d3e4f02c453174cc23aca612ba6c1db0022502cb311ad7e12cebcd8453b55104355b04d3fe933131b9ed2321ecf8e7fed67a01b68f9a5fff518c6125602420d2adc5dfdeb31afd16015b27000000b01c9ff764871295a1de6379c3ae402ceb16ca9c9bf80130dc6033978db713f2fe118de1ae12cd82079b343b297bbfe004b2bd49cfe9261611f20495c1dbd870226ee2eff4910340128d8edc4babb11db3d10d1546b5f569572665e812d59c25de04d31422c765936e015c328729055f8615027f048a0199bc9fce08f611948243f1183a11b26282200131cd4b2de12af927fcfda118522a2fd74adc6ad025633d73379309e75bcab3d3183133ef186d3c00000168000000b00f3538edfa3aed0c2fd5ecc0783c72d78064585e1af184cfdc25a3bdea735b0452bc1ca76ffa511afadd3644d8777fdfa836964713cdbfeb3cd30a6e60e8570770aeb348676b58402717e17f05c4c90b7170faf837f4492d98ec02fba16ce99c64dc472ecf3d3b0bf073f36dc1e3297d24df2915a73223d20ae3276ae503fdab477f4644dc899fc68ea1702a45d3221710685ecfed72911873f7e317e37e32cc2336358935e8ebdc6d10e97b52f24fee000000b00699a654991c4736251fd1083fa1b46c59bf57c6281a0839282941ef917d08e2be1229368b6a1c662d7ea15d254a048efc537442ef391201f166d16bfb5d4b86f50094421cdd0653d456c807f20075707d1bbaf78c3634d9f41fe4aac04847b153ad0b2dfe56819159fc290b9f6877771151765f62a58ba985305ddb5d35a443f7815fa70b1f1082b782eb2b34704a9b16839c2082534de0d114764dc27dec59aec911c1ea5d45f8db5c5262bc46c60f00000168000000b02719ce1c92731b83374cb13f4d0601f184723b61f4a2f141e5e9bfb97f777935af07f8a3cb315c3123e82fdbdfe5b6de0c30e05d31dbbbe402d2903656b29a1e934beb5fc7081afaf183221731d1fef38d46d31b69000227ad71d3f3fcf366686f264349d1c188aa99d66584e250c1e109b7ed2e424d4fb5e1708efd17d8983c9c58818e6f9fa994453e29139607c9e9189f335271a6977ea850482bd16252795c202bfb155c93079ddefa47639a7ea2000000b010651b3009ca43a4d639d62f81fe0c44e77b156aa97ae2d1ff17583d0c0fdd6d9d1db10c45f6fccbc2f4a0cf3559821207aeb0538c1decf756e481dbb3998c24111964f0e9e3989ce8c3ab34967c35bc4587cb6b41d1674cf0c655ece6635c0f693445faf0157020b905da14fc56e4730f43861d14d89750ebf59ab278c3496c4440419b7b8930b20e3299a7798d88bd2fb70396805b577bfeef4988bf384c42fa38a615bcd008c37f0a3ec70abc57f700000168000000b02f38130d085ec929bf449ff2fcf6fca4dbbe50fb592874355b9c5859eefd8963ba8d4eaad1b627325b5f1325a07c35a14d14c05193567b211abf0d34dfa9ed4711d06018c069e70a75bf8ce32cbb6ec1cb64095ee706550c6f4b821350d2eb7bbf9b7463eed79fb9a39d52d4f7819f472428f70bd93be06c1aed976537f55dd5ffa98e8950e7e7b85f223468a22898fb091e3683e6f5bdd53cd6f73f42f2684ff046eb34385b92c83e4a14e139b0f484000000b01b706853acb1d48172ab5d202b862c9eb09abebe53f88e78f5f5babe16585f8a620ddcc977fcf7554b8f697c4b2b6ae91045309bb8fb48cc55f9b16158c00ed49449b59677f8df63a9da2876f7e1cf3b0f02da2c52267f3c51bc377c1294618a187573f041b128aabcc3d8aaf89e3c4110cf5728dbd9ab42e93fa2b33d4b475abe8019af922efd940c37f5e1131fd0211f421ff8618ab34f7f6f911b0c25cb39d286e3f4df22bb5755e736cfb5470c8a00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00478ee59ceccc8d92943aa8fbeac7095821e0fcfd9dbd672547a80a0c5fd181fd2232bcdbf9333063f3debca5596a578a5fa55a879278f21017a0dd2abff39dca0bd820e0d78f5854fda504599c705303150675daa4ebb61d7a13527896f1de57643ba35804f4b83570c68fb23601c7a0f1241a71e0cf8424ad693ae6a4f7afb72697c93881dd8d39a77ba8fcb0f66270d9fc05764eb27fc0926cfe3cb027a8dca137873ade7008c2323ad48b604c5ef000000b02260e40ce4711acb3c1667ea31462820a95595f1d94c514c99777349aa062c218be843f107f8e11f90cd396761a003b955682bae024d22cc04b70eb150317913e79a75a6427e85051d245baa32bb2e24452e34ccafde909a6cc5bf5d7b43f26b3c876242f0a165d1873d0880960b4e19035a17d239f76b480feacdce3d39240177e7c1b5815dc9e88ab8cdb243f28cb72a2add95b8e084143728f7f25cad15f7effeee173a3013f64e22a190d5d2637e000000b02529c3a88c7ed0a211b69566021b758b36f08e822df3b632f8a8340023ff0d645c7546666f6cbe1305128c32c0b757db82f2f4505e693f476ee2d0f3bd886a9e86683600e05158729680fab0f42f99b39ac2c60faf047092b602be9a16cf860fd37882e6cdaba84ad6ab19c8fdc8cd3b2d899964c082666f9a73675c5efabb41f69428ef52454e5b74df5131f6ccf272241649e06acafbb928653d41ca2e71b4a79bcfd35fe84411ee313d7f9a2adc590000021c000000b0198978b6b6ef329110cb36855386ebff9b0c49ce2f50ec0df0f9e0686aba62e3c1757091135c8ebc70540aa1ed0456ff1d55694fc03aca5efb3cf27792fe3a0e85a2d847c84dbcfe12f13dbc1d0e48ab12248a4c44b0e6acd646b551c20e3cd44b3c9591ecbbebf4f852029073637eec0cb19d3ece532bec962279a502ce0027ee6183432481ffac25271b69f7b140e900acf17e559d5e536d5df9c55b459147f691b555a225eff7219c285676adf094000000b0082caed5a729804bd000550eb291209fb38983fa54292847309e63656be75d716d0719006699137c8d9f0f73ebb2c8f2a8f072715c7e34ca36e49de99718ab85955e835859b242b6ddf6933699060ee9ac49ba0d3d196d0e415399e2f65acb64412d157e9e14495a6a270466fa6c47ca1d0a3582552b458a3c62ad26a8032c4a31fd8c5a52bea10f313473b247eb65151a9cee10d42e097bc9fb0186505afacec84041595ff798db567689c32958fbb4000000b018cd8b5172dc4bcbf8e8b0e7a1a39af7510216c603207c39475c60cde5d48992600b048c0cc577b86dafaaa3db191a17243d95cedad390d0f425a034f4b33cfd8e9187a0f1b4a50ff7c9dff0d571ad47d698a0696327d09fcf726d4c2fb8e7d6855e1e5cf73f42d9e5e55d67059c1c0702cda1ff558f4457b5da606653f26310f5a1ac8548a3c866884453cbc0c6696a1c1cb9e6a2eb0008efee5e1316c2ead933dc0448ccb1db863d1d634cf68e47e20000021c000000b02216e86948f08624cf98680c4b239cc861414638865201120c09d8694c267793902f8d29e3658442a6bcffff6d482299a4097cd0e248be277ce93777adfee60b52122bfe202ffe9dee00a69eb1bd14137eba66c47de8fc85f8264f5c597cf4ed05fbd082e817cd908a1b98529d08efd8013d33868a6a8f712f8546d435a4fd4e5f03f6f50ca913da7c10d88e86292b5b1e6d70824d87104ea503f827ed67edfa53223655f8a17417969063b59607f1c5000000b01f4c3efc238566481953fc2cd68105075bdf40e3d761844a6327b5639f2c402d682222f8aa503a76129a0dc20def841f8c8fbdc7cebc7aa556ff52dfc132b6b39bc5709c2c124e0cfb803bb9daa31995c9c8beec13a348876ade3ca61be301c0ec2e10a41add66f273850c93f0c372760022c111fed19b5032cabd9dcab0e5d678b45361db16946422167e9e962fa4b11e4ae7a426839afefd07674446ffbae4a470f1351110dc96a944749007b545ba000000b01df6f69bc8a9ffe0573dbabebc92f4c62b77e453f6fe4e0344b7675234f0fde2fa5749e1755a5785e11a97dbd051e088757dc37f62ff29e3e68796f7609107905a09079ce8eb3cf2958a70a663a76ad007d2202247e6e8d3653cf9cd2d932717f4d2ced743b8ffb567831dff34046c8f07519b49b55a37a2b3892e41717a89680438d3fbcca5a23ffc3c83002b2fe76a072bfddf6c942db3bcfbc59f497b5bda4341a1122dbab9595243b2fb4cf8d69b0000021c000000b0048e410a47fdecda2bf97cba92dab54e1c57d48e3fe07c1e4b13ee0294c8cc372b6857bfff658fb61f5897b8c397823dba45c4be6dcd132c8ede3f3866c659fecf88861e5740810500327bbdc1394de34a7cff5dc48d81894abbf07b7cad395cf823b10421d93873b3dfab326fb33538213b906dd8c722098cf27db0d493e85efa5da6623c3dc2d089a770b483e77a22038217053874d4c968fdbbff9a7f9fa44f5983ebf7449ec1b3442c40006e412f000000b02ead098c380c8d48d508fb2b8f4c53dfd2065e39e524e46e523838ff611f495b8f885b14df76116cb07ef5c75e7519fcc62b0be47e7359b06fca5bdb4f59ea414f06be465d52049f7aaec1a6e6ab4c9fdc155e15a152b96158dda3c57bf4d64fa98b12c2441c399a677fbfca52ddc604221966694addd998d48648c83a85c5b404dc266e25ed885588ca610b077e260b17b8136166e29ca18f00eb22dfd747393b31d2fe3986edd1265080aca9d66f08000000b02ad642002fb354927704541b8826dc11afb0279589455374eccf826d0a4bd8b452b3b313ffdd0839c8b3757143994e64c88d471899aa62dc8ea3091d6eb0531d8bd0ba054feaa7d08a1ac8ac13cb2e31b392e68f10371d7f8582a9e608481f5487f1ce06151637d5e243b20b687d496a17f8f93c0d97ac00d43f12f21778e0b4e28d09afaeb7a3a3e485c163d20b55281b48fadbeb7b3e5f7aa1d514aba28831ed7eaff0c0bfb4abfe3250c9804d2beb0000021c000000b02e8eafed9f0aae75198d13d80f477b25820518e0038c406ae3a09b552b6acdc135eb8fe881d3e0477cb40aa1124d8b1245fe41ed2b6147b4a534ce4b56f640f15fb338c735efd9551e3d6e6ffd27b1076e85bd54290a153966feac39661a6628b34eb967e060508be5e4312553d99a342d8b45e8a13ca53d272a3e626eb41b3345f6d16120a8f072eef4577b88dd2ec321ff0b065bd9e43e414ba92eaf0d7dd1765435ea7f100af45e07deb0ca92c7b2000000b027c347c5e11c429d4de93e93e2c140cc4c61b19c0d38895e5fddc8f8b8ae53774840d6feb6299df3d4349c524dec46fff046bae135a1b7a194d91902d87e05ad18830362e70b6cbe394862d2636aa6ab4539113411b15afa0310eda02bfc8eed81c1c99f19afe6bfd5b6b0663922e5a11d03ad7a40fd006ee2d14d5e8e75d5d675be1d13d0ec3b94135ef42b4c1f94bf21cc1a6617f26423c201f94fc0c96a38188f3e2500b14378ddfb9dd922bead89000000b0018e28e5fe8dba20d730657895f727b591b98b6a059a4e7e490a2691358dbe88e76a133044be1f530f2380a39101cf37b2ab312905637d9de6d894506f17b1c5381055674eb76539393eb002a6f808a75bfbf625c2eb2bac1015edc6ac949073f1f48a90f651f7807dfd27241af5e5aa0f34bef6919b2cdc5e13c5c76fc6c1402848d012311601d7161bec6b89a26dc711b046fac6df832fe690d614cc94f5246af6e7e88e82644d7cf2012ead95b98e0000021c000000b02767d02090c6ee2c226cb18ae97da8c76e9d99ce00f4ea40c31f4e79dfcf03cce5f1057bfc1dd1808d0fe5e9307c6654ee021ebbf3ac4f642bf2d2d890fc7699cc36312ccac9bad6937a879059e5f658c9127a18db7cd835d071c26abf8a5e864bdd7e70a04fc4ef015261cb28830d3a22b2aa35340e114e2d79fd8cab2d7518d1661e7d56b35c6d4198af614c9631552661c55a69e08a43f09135ba611eef3817e792bb11b2b83463966d540313fbf5000000b00bfefbd2487dea2af0fa1aaee9964b24cb58dfd6d2ffe0dd145f2acaa91c44979e194f3de80ed90e68c6d5bfa8dd3869ed1f9f9461f1d76fb85f954358a6a9e5a28b2830f9d668aaa9972f546196f52e16bb2b14fccb6827a9c0ccfa38e0affcf6baf8df5bf602b9b2f49033288a69c0040d9f1bd46d2f31f946f1e8e6eeac5da236a591ba2171722abd6496bf883a6823bc89682ec9422a04840689c692898e6882de7a38ddaef43960a2e3f81a8dc2000000b006955afd1d2f1179aeef47051c22a5d9e81c6d3d14f5d6420fffbfb5e1f1efd4971966ca5d1d5dd558386bb14ad883f2f051d222c6db60ff6e8b5f1e2649e8de89905bacf4ba498a02e1a1c0e2eb7ed5ffa21e67eb4bfcbf144f656023c860d6388634bc27c0687bb90d5b882b88c2442bda6abccdb61885727f6705b6243d4017403bff5dd2c449a6b1d0400d53d20d0131e61fe31c3e75571566819b875f5ddf465104e8cc7b89d8893274ba900f4e0000021c000000b0298c255c22ee7c3159e76c63af87da373959467bd5e28d68c4d9b9511ed23419f4358122d86c035bf9f525175c697513309cd107ea864fa12591a7ad618145fcb388ee51fe0b6a4fc13c067c58d214e61208c7ba15e1fa3b8e6d1b01cb3047437556938d57cba9181a5cc7b367af61210d8483342dfe4a6951f4b3132025fe034faa014520d4807fcda8f4dbafef104d0853b81e60466f8f986a090b68786b3b1a44a2f9780bcfa8268268577937b1f4000000b005343d2f66ac0180a92fe92a8e022c3dc908f6fad26ae2f24067dbdb70b37910e45df08bc37fa8671be05c5144874fb376f6abdba88a5d2b3ffbde0f0479381bc5b96a9a9b4225808fce5c66e154b849532aacf146df70f3f456dbdb7ba672ca0478630365c54e6b6465fd076f1148290eacfc5d2d39b8cd7dd8f43fdb568c9dcbc75aa73d95a87d0b7df195c3e5870d0fd7ccd72c9f1127b1516233b742a540e19bcde3a50a8ccd22338dc1b89bc102000000b0078fc6c9a29b560550103d054b78c472cd54e9af6593b004e1d4eb650a4c62b64452fef6f7b277f776bf4a68ce1e2e2ea6d2199effc7bcdca442fd15725b46d8c0156af99263523d34895f32fd6eae80b5aa4276899b65b00bc39503b98197d3a9ab0cfe809164626a150f7145d39357022a4087d9333fa5c01cf3b59123c0cb9ce428f7b696d6d757f055feb0b1c064211ab215131c543a15e0e71196a37643fe749249218c229e63ed1317a2173f1f0000021c000000b016bcad5a97fac1081575372c156c998c0b810a181bc7b560eb0fab21c73338c7eede4da4da35f5766d0b5c32dbbe0a074a2f2145dc1b5f131ee8c606db9d5a863a91edef785f97b5b1f45a05d422cadeb9de600cb465cdfc94fad0a1ef9678f1c18383123d632c2e943ac59e5f4de64b2da1702716fa7eff4c369b74e29f1eb9c641c934912cbc8d3a85558c85912610058d7280a1cf69a536c00fed6f25d0adfd203d4b2a5d4eb3c0db3edc7a0704e9000000b026b1a54b68927195ad1d84d12e16d2258fe2ad6541acbaac7e6ce81e3f79f47a3efeeee67692cb5ddbc255757c79aa147c91c1d0ee4acdbeb7fdcd3e97c96ad34330b360f94ca4ccd9dbe3e48dd8c3131d8d1e58703fc76abeb2c5ecfcf8c2c69bb81ce73c8de9a0cbe2b7cef056befa1dfae8b76db8f8ab4295b226d7e178571dcb5b980b3e8614ed7a2ae758124238146606277095ecbcfd6fc036fa90b83720665bb828cdd34e54d7e87e8dc7a541000000b020a2fd6a5d0d208840a5b416fdb28ecdf6a7563989d824f1f762ad89ac27022d11c4e1c9610453d131c51303c748c397bb386b602284fb4d766d109c46db7f1030234654f9e4f4f69ca70b1dac5dda88eddacda16edb86cd261a24faa64c0c754a8d49a73fea34c9789584f3f7e7ec702be7d87c1afdae770089700f5ede6bae7be52fda00d6f933e0dc130e73ede15f1fc54a10f6106c3b674d262fcfcd33bb52a93bc3115cb4a14fce501f654b691300000fa400000168000000b021eef539c47318c619dee9025ba3f418b5b8c39f885614d896f4f1520066f2a8d82f6d7af5a72201536bab015944ef6cb1dd81bdf9b2e9673da026218edd955de7d08b6b53d51e7f0ddf137e9b5c5f3568ce6a489267d3a48c4ba6056799bfe7f36ebfabbd465eae1d071091858549250adbe478dc48e49bfafa00a2c9b9ba294c59d93d52c1867d3692e1b7a103ad0e0d3f54d6bf2e890554ebba2b849570633e8b59828f25e43804d6d3c74e04081a000000b0031ff2a6bd05d0a4ed223bbd7fe5fba2508c893b2bde88da1a69020b89ed55777b6ef28a08674f2ebdefa050c252efeedc7970b25e30da82dfffc2b128f334fe1aec8fd8cb981414742ad16ff9f3304e9d3aab427952cc97d94cad9ff5732b03401be54d49579c39edd865a7e63858ef18556cadb59abe840201638b0a9a563431d479efc0baef21e5a80dd127aef21a01669239d07971308eb2f0f5b6d1d54ed37647e622e49d24f7f801740dabc37500000168000000b005666486f611cf6a2b5af0d20b2100909a31fdb0020c69b73ea6fb483de76eafbf2f94e7e31791d042d5d312b97b54945d6a85e8376284cec4728513765f86213673e81807db78fd05e0472776f257b83a0e79911b024433d1f8c365a6dc588da164a5bce7c9f468835dd4e27d22e1b80282a8458b473636514cd72bacde6241c161cf5191763bca2d21baf087764a34076cc7c6662b43e1a1cd13c98399e0acd42e99085cefdb3dba90de80c3e9620a000000b01d7e536cf0e9eac4a3686f741f63898cca4c0f324f0ea5389ce4c01ecac01ee36fdb3faef3e1958a0caa7532dcd7ae583dc611fefb7cc80b609c7f32e41f831782a7ef52932bb7e7ca79051b1afb52cec9bf585fd2a5168db4f0c3cd1c65be99a38f2e83b3908f09bde7d2265e35956f16a7cc3014b2784a5affe768522a5ec1f643aa961b1ab74ade135ae3ebb914e814d7766e6aa366cb09c8e9441266e9d1098a13819e4b3ac9ada678d17bf6738c00000168000000b0003a3ab9888c4f3373fb85b2036fa36e1e4e87278cd923c3d4c5dd39f0b49a058f531de020001c6006f44867aeb8ade8736565421b5e22a3f6d15973d47fe0b5ba44a5038b8016da5b9533d6c9f9c2021b0bfbe404e56995acee4275f14b52fe759437a684ffffe524e8f601a4a6e06f1d65ce8607d9a44cd1b0b4ca3dc19b00aef2654f5bb606e25d4c0f6f0b6027ce06a463149f2e0b53ba7e9f434bc06992ed0dd95ddefea5e56494ed4303688585000000b00cf84ae5d11be3c6ebbf4c885ae99ddf522e8bbc736a3472a4afe36b8ffce7e25f33672ec4d25e331b609584973c16801b1d698cb962d11dbd9e8a4c23811d9dace5ba2a45f405bd641359d7b19488437056cae154b397fbb3c0a696665788c0a3ddf05b6e846f7b748a0effb5504ae404301d368bd5ec508ab36e8849a53f8a204be70f34489852bb2367464f6a292910f0106c4157cd5b4c71b990c02cc7d48f492d96e90b0a03d8777d84e8036b7c00000168000000b01bc07294467873d37453373573633de9c6230cd0c70a92e22d4609cc84c92848d3c6395d52263453b7450d98e0ccf772079996ff3d166f64dfabd4c7fba84d913f0733146d139d3ce511bb05e51623ca441137e4af696ba590370028ea6803bdfb78724a9432c67db5c6b7dc7aebc1ae115ae735b12f3620e116ccf77d20e38f5184991cb75ddb813b66611a9f583888147d130ebb180e8a434f03f5e882f3d78719a25cc76d5ace4df1ce3265499c61000000b0064c62b62bde2c3508f53bb5e1a34c44e31bc419acd98b0bf431a98718aa3b9fac0095cf6bad1f86ed8f2ec3ed16c8aa6daf28ba158b7bbbc198f9002a9a0f7a0a95e96ae2dede11723736f7beb4a5ca85c40259ab1ef718209f1876c66bf9229ca826b11ebad97d49b938098599b68021491c5a2102b67cf0d4a03cda442a1d19b57754d8d8eb3d4b9c4c0007098fb523319c2c6ebc29bd65d7ecd1878e2192b76023120950e660637fbfae5dc28ae100000168000000b017963cc7e285b2de074ea323e3ba407a212f85587d1022aa2305cb4a24ba028020350f42a60d701a6372f0e182a2192cc2eaec3becf0c517a30978172b0e073357cd233d88a50eafaecce9f18e4db2d4466aefe9947bac9cf05a4351f20dde73d4241c9c7d4f83504e723bbcd939a3d506cd249a0f84a639c236b556aef010067217642b56803aab25608abd3962cb82185d8c6cb16f4704c34303a8ea444f9111e22620707fcd69b9d750cc1d1f2b9e000000b01cd47f460ae7b4133dc459dd27e1a6d76675fdaac17a3f1868376e82b64cdff1e564b46a1a4e0aba5bb5747e5bb35a32d6b396d4712690e5e3c51991881eeeb2194678d7e15fec4d90922d016fa7abc2ace4fa69dfaf1d6a497370d6163f24871a50e161614dcf589086458531db112115e570d68c4350000939ecacd7f7f8f97b48cc6a0137c0726afadaed8862f716296cf0502def8f0f062329cfbe078feba5e61f6d923d60b493f25a18cefd835f00000168000000b02edc78ca40c01a51b43595d0a7bb9dc8b1d09658665cbda5fb01f4cd2d5fb2d93fbeea9b396c9f9b940baeae4f14870009de84e65b462ca29dd214ef0704345ee31827297d304344d3923cdec0527726cf1b781eba816c4664da4a6c6f4c1077cad184b71116c62773ad858cfa90a0b523715af373857743bfbbfdf505f7bc6632dc99acfb9f9f7eeef5f158a920aa570f9c1da9b1f8845c34a6265390fd77664c83de85940752b1d4fe18dec9b439b7000000b0281c4b417afd2b0ec1ad0c4a68d73848f279d1d748b46fa5f7e61d6131439daa572e7f65b293bc855d6522bc7bdafc9aa3d99497976357c31f1d9fca011bd50b0f7ff9d685cdf3b434cdece56ea03ca7c3ec77aae7a4b0542c291f3d38993251b4a2d9c7dea104a8778dce5ba75d174201963b15bad41c85a0eda55e595563635e2e22301ed5ec892fc5a6ce17182df314d87fd56e9efc1d336ca7c099ab5652b38dcbab321f20ff1ea38c6b52f6647d00000168000000b02541e2f2c48acc2a7d91ff2b91cb5b533dc7c281a3e193d89729e63dc21046f6b10b14d374120dfe4d17e987d8f36e72a7bc6fd1e646c24f3714ad10c526f3c104c907d07cd023d860391cc5eb0a433f6e9bfe9f6900dd5c2aff4757a064bfa44f460beb056c17886ed3547f8cd09d5503dfe93fd148656b7a1b7a64d31bc7a9e0804f2b9f509065114584568e31487d16a94a8eb4e83f66d77f3f1f54f6b559c538622dad964314a60dbc9114f92740000000b01a405f1302822059c6ea1272f0ae160efd484aa3ea6acb2a8b22f5948b7f489d026052b4e8e231d3e1bd62b346a0f4325e34a3873941c7eb07c2c1826592f03295a2776095b8899830209eb1f31a0b9cdf2c5458562722e1fe9925eab5a33e24b0fe6e03e217a42fb1f6502aaa1f03510ce354175808a9684e4bbb0bc8f585a06a0bcec380ac281f4a2b5fe833d5672d1ee25fae26f481564b99865eed9ae0ab2ee86350acfaaef6a4a552b708b5ae4200000168000000b017b7ce6c1e963a27d2a29d20913d55296ceb311459363a25a98ff6b3b14881d7875359ee687ae03f8ce6a11ca298c69d755c1a3902e22b51bc610207e73655cf8a2d02d61e13d8e0423354d4d32360dd42f7ab1d468a8cc71d945d4cf7af48c484002457c19fb0cb7b20e521f61cbbaf0f1e882068e9db08bf7539e32ad2e5082b508cca1997766d3eed8a5664fda75418782ee23a831be6a8ee4dba846ff27dd8b393211769fe6512e666814b15d9c1000000b024278828c89dcb02c156da317c24758135e7f29cd71d453e4f0787b7a260e94630a4a75be99288c6bbf0d5fba8072e849a00505a735623eda73219768f47b6968bc4031c342d9fa22a7d87d1d0397b9afe3d354dd51bf656dba8d121ddaa2f25e9eb907b99e80a35a9b7422e28baa77d04270924e12831f4a266c1600491ff487582eddf4cc31862152162f17066136c11d0d5689fab5a71a451cc295a8f7d945605cbc7a39c3c3fd168c1c75367abc400000168000000b029ed48911378f303808c9c5a3f295bec555e8a4819ace61b6da2d76f60653df845103fce2353cb390abe61c6f5f9f7b2f4d857ef2e66697114292e4e670a08e14760eed84c73c651509b07eec80f1ee9a07f23648e0c621a9251101793a40daebeb290e5fd97bf9908c1b58564aee79a19e025c322f6548947920e5c67f085622b6e16567b4baa41f928b8a32ce7c86406768a95e2fd4c1beb486f2a3a71efe8e112e0a21e670f44d28df5fa115947dd000000b00025f5399bad82f5a5709ed2127109d7fc1e471059eb54f4065820ba4e55b4553bfafaf26ff6d92bb7937a0cb2e0830733bd39ce52af77ed739379dd24093033cacea39f20169613f2ec2cedf3582ce70887f37ffea709c8796416f35e5015af0c5b9710bcc4f1f32319d638b996a8c41c97ad6c82f902cda94e73f3598ccf70fd53fb8c4264e7379f9de4af70ec951719d6aa920bf64eb2a2609013cac1cc637967c6c72ba91bb71a87baf1cd5f125e00000168000000b02d09bf391cb926581f2c4f435281815f232155e6df4d824cccc668926e91d3f4bd43aac3ff391a18260738318e3e699c0b5c225e37fc5b0330a65e22563e27f2ba08b2ad671605e8ec565ab1f57c5543c7030c250d1f897e1bc0afe9e2750a44706cafb4c15374133ecdda6cc878a024254d497a5b8a69b2009113e60ddc716a90b3e6c5533c5107b2ee28b6707ec7701800b15a0a4a74c475e620bcd28b022dcd5d967e594e34a76511f24c9d150ea3000000b004447c6ce36219e48f5bf56313145095c6fbb492e9f4f29b1da3f65f4654b0a477f89a8ecc1911131bc676cefca7e1672bafc813b536790652ce26ef8c04ae66daa2acec693bc9a7130671247d354111d8e8837d64ef0a58590caf6e4474a42b48a7025156a7bf6af4d2925cf6da222e1db98f2cc2a802c5b589c4aa9b28c1787ea6a30fde5520b1e478719abd6641361911f35056a35e008a534742b74560a47d0650d53c1508a0b3abe0c68b09679800000168000000b00c8f39b1c6732dccdecb3775d8c6035f0f8ff1254f3d8798682cf5b36ced6334b09a43a875e21737d591d37664b8fe5b73d101d29e1e0243ab1a30a133f3acd9153c2269dcfe4be495cbf77d94f2f0da34393fec2073dfa71a5da8407fd96e903bd23d1404d78c4b07bd5e693cc2d59f215d5f6616dc26efe3a1a7cec59aa663b726372fa1dbb6390c3bf4178b34c3c424d4923d0efc6df787f340a876c8fd830ecfa6904032d19f8c8d622a7277f680000000b015b8ba9037ad20a11d0edcbbdb48237a200d343b9f76e6769e268567eb5e9d2b883ceab334fd4e3ddbcb3caae8d4e44efe24c552da9d07834db8d251a1b6f01ae9bb0df5b6b6e8710b2432731abde66a1e70b401065f8196ae6b4fadfda968e4f07affa41ea373462042a3f19cc9abaa1b69e0a33f61d7a95bb0d685eaeb7e2c835dbc87b1d9b41c4b73b10bc3ab4b9914a013c7d1a3a5b9d8507b6ad0e96fdb42adc8942b72cf6a59593b844daf70ca", - "txsEffectsHash": "0x0056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e021011", + "archive": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b012b05fc105ceea373bbe38874ae37a23b74144ddf183ab495bfa7de7c665fb0a8d522886137167eff9323bab8c13ad1726993679ffe512759050f0340853413785f2168c14cd538639638cfca8662b660dd80c53ce43c85b41d151b22ceeb3e3626f3942b66b72684cb05040f9cf331229e794e8d3e8bb5108813ee3086cb85bb10ead74baaec6bde977a2dbe8fdb2cc0c693ca52217b5c38cab5a7bd8feaa67d0670062c8263999b50bf9a767e7edb0000000b02c563cbe940ab44b660e984ff03bf89c0dd1b0d53425f5a75dcd477113b1d2ea42905f0a90d7b8770130e3dab454882e819f9ca0fba2a60044b7ecd46af40a07ad904e1e4a1a9519e6df261d63c7cb010714933b42811d32fbe407bd5be6ed2250d2b573656de96c0acf4eca5efddc24223da8ca7a16fcb9cae791c01b2980015bc07e21cdc593e413df3f0752c40fc30ea514188bd7247d4d625e5c49ac8dcb5bd22146db833bcd26aa2905e133c27b000000b02c79ff46e538780e307638f4082ab5c20856843d2430946aac49d3ee671e52db073f1e130925890de4f86bb115a240f407eb8e6cd2857613e2f11ee308aa78106f0138f1e055d5bf28e1ec2296bf792ab4b7618d74f14b37bf642e89e238f7508253706b03d0b8dece152e90762b38922dbc69806246efba3253f96e7485fe1482e37c066a16c80887764ce92833fde7039df530575f5d5a9ebbc2455100dbb6c3a1e7c78acb630a7e0d728f59f775660000021c000000b00aed9d482c19ba7c23229583522ac2f156a3f694589cd0644ba5e7fd718a4b43abe38d4caf9ae059fc525c71ace25b70990701b27cef566001a213e3c927cc315180622fb84f274958ae57bb1f0659d9da6b45431bb1200771b282cc87c17fe968ee89b3a1315ebd8e816f8e195bb014083aff6f16b1ba9ebcb287c31af5d194837e2f78686d01ab409b3ccd3e71e88302f65b42ea793f9816a941814f96722d6831a24958ab6fb8510dd640ba44bb2a000000b019035102a01205f3563e478ea50921ce528c27dfe985bfa0a2fb52f63b514bd85fd2d563d88d7a1829dcd4ab63627096878ae8698c0eed8e062be06873eedca5d05393cfa0a454d593825022e9271abaa08cb68c4f7c9533d3d5edd9cd5c41e994459ff88728f655d5707bb064415c5911ed2de0ec850682b175152e255aced3fb1cb1e0ec91abfd85ebee2865bd0f4f153ba96169f50c8768c5733bc64e8d87b7b52c1d15ad9a39f680151219ad9f74000000b02a4dc21c4cd26a43bc10ade7858d0925be1c729a88a604e7577402d23e07c6f1d2c77222760b6eeec66c86814777de9935fa30b4429dce72308d37da9ef653485dd2747fb06f0ead18b66f80fea0bcdd203b0bd931f8e48a0a9daa3556d9767a84440fbc8a1554d8dc86ff89e10e2649086c73183aeaca9ab1b2727a0ca14f6abc28cef7fe2aa81ec7abaa67e8d5f2d3274f72bcf1ad43e29223b5f785165e9689941dba5ebee800a7d546014ddc3f920000021c000000b01363923ffab065f062bfd9e316ebf71d855fafa043e6599ce1b53667965d6686566b2b640314bd10c559b24ff90c8b4bad4d3c67ccecfecd7800520541764a10f83a13167db2c21a2399e4336c81319cca041c0eac06b31ac84c8a36874d8a223c3f96e89b0691b0df317a8b4ff268db26078c53b085f0ae2c46c15753f1ddd96f26db55361c7b27d7770c78a6f60719253a2b18cf1fe4893845966050eea0c2dadc4542d4e121eef02476de1f02314a000000b03055e0822f598f6241c76dfcb7545786517c062a6d232cd2e63bf2d461cb6a5cea964332643c77f25e5b3f4e8dc29cd4beaea4d250d78a9a5a427d34a1f2919b4075ef7b7dc4caa403fecaac91f0d37dbf8d31a4c66eb8c4f32d2b9e1b32f5547f28821331ab72ca27e5e4a122960017275e03bf8f4d8fa61b415536d77465823d64b8adfde4fde49a7a6e2d35392d552b68232ec08ba643914075035182c5237dfe5ae2f187fb41661e016bc079a15c000000b00293304fe2c5312fc2eff48d9c7536da42f5e0cd8583c5704b26311fcaa7671dbde69d6772d96e50da454b84eb47ee61d1d66e2e4ba7a57b304d04280f54ff48ec5d752c6ef6b38f5c929da1aa96da0cdd53a63851cda5579b773869ea752a0e76dd40b0e0ec9b8a9e3f67111c8fbd411dfd4f7ccc704e91e6943ce46d2977110c5b593dffaf8578cb01d68b34f575521278220d444ab4353081877bf3cea7991dfc24d874693c0ae77fd59322b50d580000021c000000b02c8975b2a052f09fdb6a4d05806c16cf3c0b6b227e69cde9dddc6f6d8d2a1205049a994622fef693c10c44f447538debd4c75fda5b7098ff20c09f8193789f2a2b6cce0bbe1281a59b68e94bbec5194dfcc1119f82a130f1f7b710c0fd3dc7f31d821d9669d5b55236c06ab1fe7d469c07deebbd4c87f6f5dd30e67b9c2af51aa2e01cd1e87fd4285224b8643b8f6509019a4637ecd9acac317fffa9e3c42e837f843ca8f0c2c2092db93e1044287435000000b005d0462656bd9c7b205568702125cc2ef51d57aaf3cc76f8f2feed2dcaf745f2703d7632743a125d1e3e77170c2ee39c3a2037fa0270847aa83fc3d9ea5a5a15a5d065edd2b4c89475fbe063d323b3e2cb3cf5c824216630a270b24f51c35b0f9d79faca532acf27f7622d098d424d52036d6545421553f65d56c64440d4c923f7aa21e79b7a2188b9b1f991e78148242195faff89daad7f01f808d180d1e144b7f0dfaa68415f8b73bac59a7c82254e000000b01de4d306c7a987df44c6d8309839b205212521b18c8f3c42c03f0c11fa3669a70f8507ebb686920e5533b3fc3c771aa862f1be2d91315cfe3b9c85ee873897532f5e9edaea3fa980e56d896efb38868a49204d067ff9c91d9640cdf2222267086eb076e1970b4bf40e30319bb6ffc6981ec4d2f5de87a70b824e129ad54729bcfdc9e341a92925841d4a83192d5e94482993067d9e0124d5b77fd13358a44545d3a861bfd3998e1d0922fea757ac11940000021c000000b02ebe9de6a5e9e5a201c52d6f998349dea219be42a477f7601d0138b0d54160776a611d3cbe6a4ef2d76da37384bdbc29d0fe57eb9611a905e92b8d70714a292c6fb4686dc30be17833a39ad99b4c94d9b3bca71d1a5c4d441f7376358aa755d702a7c0ac3e9203addc596757b51b97e3277ef5ee5328de54b34e2e499e9bc750c6acc7f31f2eacec9170654a0ecd682f2b4e49a2f2258435e3dc52930dfd5421f3ace46ba46e32aa67a1f9ad2297cf2c000000b00c08f76d66132e0d5b8b2c13346e7aeb593f26369c0e873eac81555872f39dfb8602329de28b258c7dc188177b987c2c42a26b6221a1a7e15c0263667b52878a7b75de7ea65e9b7aeb3c75854756b44983293362bd74b4856f12d6a4a1d32afe40a4c9e3865ffb26af820e722e316e79089aea85656b8c0baa6451fa9c2d2eaf33131bb5108c576c40f30b90f1187f98010da2a98057524d6f8f64515146aa5563a26d0a262eb9f6ac73fb7c4457f79b000000b0252aa5a51a3c3a5e404805ec9c2b4281429ee6a2e1239475a64d10f9680526ea128026938b821f29225a518379ff3acd1f9f3fc5f9c7926ea5ff7308374c981f885eeed0fdc2e10be68fc3ae613133daaca34869c69e2d16c57cc0e328b89edec3153f2c28301c53dc553699ead8d61222100223ce9aa872133e4da2b1702ee056be52978347edb8aa55833adbe2c0171a20d4ff878cc8b21269402d7bc213fe9745967b49602a1188ec2cb4126817b50000021c000000b007b98ca44d372eb47228fb5a441f4ede1a850a334889de3d6c38a9965f476deb28e76a08c00f202d055b04ecf984a5eacd48eddf628e5fabf47fde5baaec8eb1e900a683cccc79a32f7e5754b01469c757fbcd248909cfeeef57ac3ce2d7db3beb197c2f17fda376f9287df120f252231d0c8973cf7ba0672ea644bf841a6820e9a15ea148f9180caa4be93c2988f38e2d437ef82da8f6ff4721f5c4b2f43b2a6ec04dfc8bca8f776137f39157ae03b9000000b0056f545ea3b8be32f1ba8664ccff5e86319a88120ed990c801349b2f48ab89ce5c7277c1c0dfd67a7cdae0c139949724a0d10cd556081aa930a78338f75ba69487dd4ed43c63847ece2d3751a3d9930fe8b2f180683496a9de1a9092cb12d083161101228605e405dcd1fdf70a76736f13f983b19100c5f6c1cb18ca5104e32ba6900923c8445cd266dc3bb6676421f70c10a9ce08e7d0e20f96635008e01b82a50449bdd2c12c0d900ee897cfd177ff000000b01f0de827da1cc548c7902d2e84d1683c5b96878bbcc1a9154866a08f25d6488d74cd4673e6ad17d9da8039f452339da95904d58e57d7d14454bc89948f966ca20d215bf8e6b7195f191efd1bb8e55d90fcf8f8dce16fe1df888a54204f8f969495bbd34f730e9e24790c513a68d404e02822eeca313e2804134be4115d7dee07ba6fc2b16b33ca6c5b106e57a0fc55a00b834ba9f7ddc5df86ffc8e345146bbe0d0fe26a7488a643f0504e405397c1420000021c000000b02281d2082a19bf375c1258f66d778d8f7465c022256d2063d91ed9da8f9e579fc1991d0e94d64eb5b49dda282a08453a41c102642edc2902c39098f3892810781ccab542d712d43346d3c23e915f0387d5e087b32f711b611ab26133879d0b0343706bb14856bd3ed5b2f95bbec353e823e1c8a227490925afd166dbccb3b67631695b26ec71da65435314432f3fab132ecc7c91fa37b65a75a0cd3869d69808de4ffb547c3c5b8a66831a4e6d1281ee000000b02b9b5f7054d4c95f0974b2e8fd80f83d95489d86c9d10203251f1ca18a856e3ba4d68c43a5596ba1448c476a07a58048e1477972802e0498559d6f1b6463472c3721544f486d4a25debf080e65f7c2532437aee2df68941f25f42b26bf954329f7a861d0dfb4f16cc8914f22f06b6de712868fe61a8f68e4a7d91180aa9c9871aea0e0d276d20dff0bf1b7c969073f020a832eef6b780b0b2f9bf30c696d2cb40b7f8c0553c9f326e7a218326e7912be000000b0114aab494689d419bada0522d9a76d46bcc180401237ddac7206eae6e08e59d5e3435981b27247c64b3fea0dff0683f1598a923e5c4354220a5df4187a3d948965a695933d37cd4a238e5b6dfd1045c5d450ddabd55811a70d257ca04db58b434386cb44475433e83b8f6a86d17d5e9928e17ddf5096417ab6fee80ae8de5ebc88bdf439418919c0e8052237bd2f93f9070fa7630a486f2ad7d79531f3fea87f5989fa2e2db71f064c1d64cbb3b3ac470000021c000000b001bb70983789e86c4e0ac0ffc9b75d15cfb1ec2545e63f0d0d05dcbf2f70bf49f303a27f7c5342af6a0ada854c32f8171aa2f5fd30f6c0c07bf18814c378be2ad4448f0c1133a32574c03284caf39e646b41365c114443926e3b92084c69f666ba25f9f063c7c356664af0848a326c1128935084f948a384be340cc18ec18d3b30da45919d50c5058c8277c67236cdf626b062da18daa00a696c2e70fd2d8a6ceb90dcc87f72faae9cdae7bfe7f66cd7000000b00852efafe35cec680375ed7073c30e06f377900cfae6e448a6323795c5d4ad17308c870fed90ded5db047bb773234c670817c2cfa598987fbf5f2411053c5eaa929cd8ea18405a9da3d4a7ea13cd9e989196b02d98de1f2b5167c1d5fd88a431a826b42f9d751ffee875af0e2d0c65aa1a77c80b364646c507f524f0168e5e51b3a11f4f1fedd32e0c0e7edba67043a8107e819ce38f13cfa5c8c8dd3a5890906d693f7707691a3752eeac75c4e95876000000b001110648d10202e4ab5ea47305f741f0f51205f52a6cd90a5ea69b88e4db199e8a7386768ccf465892f387c44449f85b9b3835a3a236466557cdf9fd3d239b2e36d806a9b0e6a8fcb4b18b6d5d26490c26846bbb34ce10c4fd711cf3ba8cb4e1b0460b0122f9b5e39ae53f93220b464701f1361e164bcbdff7e764a9f1ffddbd4afcf70b8cf89109ed5453342b06370314292277aa481fbde4df8a217db2ef9f0ddfd73359853399bb8d3000845b503f00000fa400000168000000b01aa89c0854af3452243b5c8b696d018d4e902b1eac5f8b2144039a767c11416e778f6e0142ebb8c4107ca844e6a96b11127c6c5d0f36b095265de957e7a72f5d780ce0abed2c14f80dd880da129ca4a4c789d8dae6d925941e9a9b1b5c0da455bf95d664ad1806713b8db283d7aa9f39242bcd0e9b91b653ea43b616ce408b100731b87f72403426ee568408369bd1400647d8e8298f47a5829a73e38fcc4182a13bfb94bd4e4686971ba39666c2e9e3000000b00e1379a8673dc4da198f83fa91780e1c6430f13f4f6d259480198fbc6ac62a41ccc1b9cf056bc6e9dc0190b1121c486638580e25f47f8b60a91949f166118e5c74bd913750c722c9a1dfcd0c2a3248df5bb33f6d6b4f39e839b1335f5a98316ad4eb90e5a72ac160b5309f8b7337d6c32ce75aeda8c6a36c3f33a4890ab2650080a5a723953fcadcf41df1edd5ec84e029b89ef1623e6fb27a540ea1f63c2a856cb2405f583f8b27b9c26751f643215f00000168000000b0020f5cd16d6acbcf4ee49cefa1d116cd46bf6372387e12f0e9c33e9a68180f4014bc602dd593b208526dc4c205d1fff3b332622ca9032b30c58f7a3828e6a289c7071938eff7111b0080842e65c96ae9791f2a1bf55aacec63e046fa60a68fd2fc0c7de4f5a5816e0838cc30fbe4d7d3176fa4b31a41b8eff68d38f6e1c1ff13ae3645d5b993c49e328b808e9a83443212e42ae6a3ef2a022bb4b5b9d13c6d4fc0947c609c2ffc4e9727f8945ceb7517000000b01add7007e7de216752a3b146ae1b79e3f23f16a8757ff3c4e5829b009a41c64ec56c0c6a7a3ed6a19ff917d44a921dd56b68e249efb474459998f94d98e4498ac4d913e74c940f15a57d7d0f025d0876a5b3a7c9830170b1dd40490efb101762923e017b9e34333e4f6a31a8a74aa5410459ad85644c197d3f8d93680fc9ca258261d4a6dee53839f2758fa84e84436303f607eac4ecba54c627e8d295a3694b9428fa0c3d3cc7c73b7735c3a1b9680500000168000000b01fda97d12a2bdc9db592a8a7e31e08a4da50d3aa063519e0ea23a11996dfa2d27f68a2b4aafba58ba5e58268a50f627c2018b65b7bdb3382f3c28d2522c6e730262e120755f0f717986d1252970c5b940af10da6f107f835055bb188a1e98a17ac8ed8b4a633813459722116e812644218430effedc5659801d5169dedf628ac4354efb5c5562bf809e0d7544810950d1f884a7fcad20e6b7a84f67b246d4de6b793db34e153521c97517904215dacb1000000b030204d0b44041ddfa44c932974aa31d730073270ede4d5b4889c52300ffef48f96e2156071d0a7ad96ee20f766e27b45064a0a3fa44fe442fe4497bfa6199a7a082e12c9c55fd9f8395a3e6e44623c888d326b37b27bf9ff6071b861b7761568213b2b87800f911c16ed18fbdced0c5a2ef85677d45f9aa1c6aee567b0b261754cf2a2c8928a0d4a59c2aa64b1a218741446c06a42e270c5a45f9451a30c7eb5a0f00b4e90e7b5ea6906a857214136e300000168000000b020de358af53e960f85a6d44c1db0c5eaafb983c6c2eb6d6914efdeb50ca94d190a0fd1db40b021634db077f2574b021e85b6db860e8ab32454aa3e04fc0c3388370618d0c072f5a1e84241e96bfadf61e847037ce2a2b3f2296d20f8466518f666b8b9a6949f7143a79ab3b8f4b97fdb046ec3793d3e88b0fd9169664e3cecd43fe74e475b4006c704ec59ba7fdfddf62b3e69a9485576b69f2c6376043e2c7a527548a39725392383f5d274fd8f8cc7000000b02eb0992058a9066dd3e36e183e5c24906119bbe3bb424eb3c20c12bf3bfbe67d607449a769f18f489ab2e05e7b2ae03e75e3b8f30d5334f6bdc458f7ede67327e5ac12b508732297e98aed8bffd47be912fb9a44465ddcc6aa4d5d0eca6a52469221585b48c5056683b92563125489870ee34f2a918f591de4c238a6870eef6f96944fabfaa65e825bbe777191b71c711db2decabd7841e3e1d05c6c76b29dfdef9418deccc0ec9d2b16e0b68371c76300000168000000b0139a568fcd2c9328b6b4b74503840c7ae6141b8714f5f0b619715ea8d0ffc0c1c1a790cca27eb9bff2fff3cd0ae3242c710149eb8aaea54810676cfe566750be77411e941a19f21f472ebb83bd7213f483f62a3dac18979ca35e3b16ea305c03f70e79711ac1b30274c5f81e83acffa40525c36ec50f20c0371bcced4ccdf67c7573160ba38787fc173659ae8ea12bfa18f017bc81ea9b7acabf7b10f4bf49f7943f20381cf52fc354a70551f503bc48000000b024b488a9c871481100819ec6ce6f08f715ec8862e34505a794c00088f93e2c1707aa01584bd4e4c874f8cc819481c367384310fd0877296a5175d8640a05edb4129719bf5ecab0c8e2122a285697df626642ba7436bb53002b1cba69bf94f7357c3e8806cd3d6da0fe6300fdb3df2ac323cfe80f368c3f33354a5a4312fc1fb1597bff532a493a3e1e58932326394bc20cd0d3c2099f682868baf232fff1d4dfc096bf7634fc6efbc79633554a0a274300000168000000b00e1f71fe7388b77e65977385f1c6ab76c64e93167298a4674b6694f39ddec7028844be4616cdb1da1adb8bd57fc206add37612ccdf4e1a6cff4528efa0cb9787536b18b8f7b4be92d0dc67bd372798f83b1ab43afde341d957c597b10840b149ffdc6ef0f02ddfaee47680ca8bf8ec942ac8ff4235a3074255dc6a85f7a7f79e64ae3df1516e3aae0a90e6e406b38e0b06938636389ae1f2cfaf2f2d30bf2851c0a6f2eea668d7037ca9ddb208a640ee000000b02ceff583b5454388d522de8c82677808350317dc08463f26831a03fe57071c748c4a29fa3e71234948af93bd0d7cbae3bcc9801930be91a3fefc6061c2ba4d8346485e4f5f6fb4c052165ccf1387d3e34d84540f015888a484db461fbc335a581d310381f7100a60661c82c12ee6b36b281a89b2563bf54cadfabc01dd1d4d0c0cf8236bd43b05f823f5aeba71a37e7d031ddcdabd13074e7068bcbd01473d5fa9fd2cd4556a499abd7990b41519b18d00000168000000b0042409073390cf9a89cdf908dd4d49ff7c0f413960b2e41ce7eeef857de890c453147f1077a8b2d16789f9980834dc14e2d87c4765a33bfb6faf4a4dbc39e2dfa3027e69d94e27be131b7ab0e623e810fab2069a3a27632b360735a479b129c370409ccd7ed4c73e432b24042a07e658028b830807e2ccfcedd4178c3a6bfaba0204429664be3469af5f1e49917f23cb2cb3b20178c47b94751eea9de31da30927e25697047d534fecb7f6ce90ada9da000000b02f8fbaf2e5a77aab038cbe4e3207b71e791294629afd274917c394449f82675828b4f36a6683e3b8742d1010117c4e6b2686ac7e27d67b081a71e0c9188d1fde2ac9ca87bc99bc62dfb8a97027da13541b1874d5126283f2a770a3a6b5c6cd0457b351c082b868c44a611250d563568808def002cb68dff41663bd41c434b1b34a458f24df3fd121ff6936aad6eeb7260f07f28a10788fe9073db930f54f860c8380d4ecc73cb0bf547d136d5e616e1700000168000000b0218f9e75abdd64c46b4c0ee95188cd3ba64fa1288ce5750c6c402f318cd2783aea999f43799235bced475b09160ec8d771aeefc4a4c4c153e8ac0eb199c7cd1ca76fe438eae799d88bf29258c3db38361f863396888dbc7db2e0a28e924e7d2fa4a6dc1e1a7dbef557a91e44c5fa719f096c114e1df02d8d59d2055e0b96ed1b3b4d3523d7d4d2470bd55e23061afa1d2a61decd93db9ac920946378f2d9aae7f25665371b12037f8208ec682748cb18000000b012d640749ed0b6a35dd19ba483140795255ae39dcf2bcb6f8d02ea639cbc4347604c084a5f7011a34c91716ad919d92d2382b3f96c450c18ce9ab57155264751c5f9575afb47871035ad6766e9d58011939535f4c2fc74fe85eda20b2a6197ee132d301e5dcba42a29003b8952674e392158df852ddd14a565ec69dc4f40505b516dbf73ec51e24652c45992ab389db719d7c1a021a1bcfb648184d9e239c7a6d18990c7e22d9dc24162be56aff1da9a00000168000000b01f292a2afc0028a52100e82cea8a912619dd33ee1c6d8b84a33f3c89344fea4d7714fa1ad067f6ede512659b1228ea4cbf8972899724ab42d136fa7f426ddfbaa6e4f3f85be8b085db3a61a63bbbf6e1e5aca0170791b2867bd2568df95ad2789fb27982133fd8d95e6a6ce59292c1472d5c6c8e79928a539d75bce4b3dba92c58bf76987c2e7454a7ad345bcb7bedad23ed906586b95aa160117a7a8f60c2d26492dfd111d366bbef20896ef22176e5000000b02c1dc36bcd22c4a200bd5d28d8a4f7ddd5a7f90d4191430099f7ee0667c9ec45d0df9862ea51b2cdf69aeacd41d63642fcecb91e698bf732e8eaa7cc0fac0a9d98dd7eaaf70843e4efaa236f54ab563a993afd0c7f8603f1c2c3fbf0dea970568641c97be7d08f5345ae929401eedc240d61293d9836fa697750cd9dfe3a6a2c5b60d0d001892bd3a02223814d55ca2f02da6f1ea1e60e89855a36babe7ecd6a6d9cf9f495780e3ab60e34ec5e074fa300000168000000b029f5f36d311fcad943cd5a9fad3a084d8c07503f019b5b1f8ed5a648642a976482821e1b0f5ae5853e220e2d2ffee78a2ee555fe104800c234eb2fe0a7dc194b13f86417c386a4980f9fc28292545c4dda8c0d34faf76c913e8a437bd1c5cb4c3d073eb1885b32dc0d20ddae6b7fec570efcbb8f8a978df9878490181ac2befa1e85dfb743a8c1043b3406161022d9182f294cb1ec7f33abf49ee6f243efa003f507d5514da09f432d697c955fb360e4000000b013b6fdcd0fe8fe8662420ca84d69e46941e9912423fd622fa7b9475863405fb69b44c5a9178101bf21a301f7f001280b145cbbda6729c84c45f8be579de6e6028ec3e5318a8f39a88cb8bbbcd15af6e5fae0e26418539e1894a1c09f62664f3cb50ff760cc3e1c793409b9462a6e2dc919070710ad409b33accefe6df608be7c97a3cf744a263e0f3ce65f87189ddef52c7f3418603dddf9af9e14d533fd35842eb54f60f83de3def22fcdd3978aab5b00000168000000b0248d693fb99496ced9732fbceed19de8c11f9138a69ee83ed7c56ba72c8449404de04538c1892b3bef8bbd9292fec342850490b2c479e4bc7d4ddd899b3d81ebef511b259eaae53dfbdbef8f4306d3b10a63bc324b2d34a015480f329f16cb4ec6ebb96a9aa1675811c5eb8a0e71fe56029dd73532341cf6d94331265d1fc44c0dae733293f654cda19434061bcee0a62a335f850475714396917b2ecd9f659c13cef442313d3a665d9d29b12ccc1287000000b0090591436746d59ad6707421e01f0f37dada7345303e11ad775c7c430eaeb0c3ed823d0e00015397b805cb8059ecfbe38c5e5346b6629e48fa22e5501453dfada3dbf644d7002fbfabdd7404c855656e216c50d178f79ccd027dbefd0cbdcaf5421be6c3198a7985b31a31c09815f7bb2935e3086da6e63d7cbdb00b4badf73568d0bfcf5506d2754867c7f111ed645b29164c3cee76013d67e35dae899fa4c7700672fb391cd34a84981403eaaf81eb00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b02ab5d595a67edb3facf6b66d86b21db6a9873756a62e24ca8d4a09104248f5a9b61a920dfc9f5e7373417712af13bdc259d21d699580191f688dc7350c50152c81817b31a252b5d2b3bf0076aace405562d9e362c672ab7674664f8f397c41a6c9b17132fac585c3916d3db5c241f07b13253e9d1e9fd43824b9431380400c36ae35c30c98139a3998b941b9ff84256b00a6a73fb2c69814bca39226cd3f54d40f8958f31a37d26dd2cb674f87b4ff3e000000b02e8822f02b28f48e05b212a6fb9be5e3ae248bdbb1e5fd7f36cfb726b319e73f1464a633893b4b499d20000b06743c0fd0b453541d15a470f7aed9c6aabf849c32669ef84ba0020c70f4cc0c604d088193ebd2e4bd7893318b17f7f75f405e1eacd38411e81ac8287f039e1eb4835aec27b3fa6c391d3a3517441cd9caac8f1338189c488b3e29e47b890d2d30230bf21049302b3871aa61a00f5cea2bb6257d8ca03374b61245087abe3b682c830e39000000b0035f3e3994796b86bc5cfeee4e2dee937b8600aad3520b20d4fa01e45316733c72776b553c95ab186cb303ab210e7470ea161dce20670c6b80a5490473ba86e7363bf9fc0851f8d7097756ff1eff304538cb8daf878193022349e6c7d6b0c5ed7e4e83f2c6e46e94aa420b4243a083672637dcb055956bb3a22e967eb79bdc5b690a2ddad1da150afc4a080cfffbe3840739260648517bbe0126594a9b332647decad0d1c74bebd42ace0c5e4a2c18300000021c000000b01b69f7b7488f947f28fb4dd5c3a3f3269e2f79dbd047e99f40a161db71aedd9729e5a3c7af9ffd8b3d8437e7e6c01a68cb8496fee41bccd96e760c08ee75c4667f54ef035c791e654b179a8f1f64de80ef2051dfc1e982f4e53ef831f710c95b21210b5703a2eea6a83f52f7c8eac70e29f8fa3f55eeef3850571472a42ff1416364bc78d9a658dbdce8e98bf18d44f41439ae2e8e228bb4433f68fe91da9d0a1b8cd9c853293fb4ecef2b62a98e164f000000b00a35d20ec255b797f31e8a1a7267427e173a43e645509158317eb7bc578c657c8b076ad1b7c097c44abf297485c06de702ad46435e5ef74b44e685c541e44e5d0151559652adb75f0712d89d0e315f2abf58ba810f5231753d982f3a6316be75fb0ed9b06730cf91d221a25a8add13a22e1ba57ed28d9f63abce703f9ab1731a1a2d5df55e9ba9c817c24eca6935397120367d6a427634e5a834181c1c1b15a93951631d4c20bbb6ca540307312cde96000000b02ff322d574d0e639420b3fcc334218cd3909c326e0bdec1a63e02c327cc85651884ed6841886e2db14fa647cb972a314f6e1b0c271facd64b443e9ecc3e783b9dd88ed88af74d341b34052794f81b6e8923ecb6e2b7cd36a62b287c3dff445b5a30ddff5cda25eedd911e21a576d2acc08ac5f738aa25ec5499b7f0b19fd80f934fa73ce63f0f536ac011b3e07baf25e0c70352bc61a688eb4e0f7dd0e5b1571ac75e2ec8ce49429ef8ebbedbe705c8c0000021c000000b028e6f3003a1d0ecaeaa8943e9f58df43cd1260fdd636873fd19a756da94898377d7c821cbbfe09a23118e9921e496f1f4830761a5a7ec8cf5fcdcbda69481cedb37fbcced75c9619a06d50af07252750c0005bcd053cbebefe14d1983447464be62c0b71ed7a77d00e90c8c39d0cf3c000ccada667ca9f4deeaeeb1e0a6e31f8b7b016417664d5a71969b853547f85e9109478abbb1aef09850548ec3436268ee1c786edf4adfd65073bca32a0a92259000000b02255e6ff594e734df2fa2e9f60cb3b2e27b351c8869f30dc123e70efdecbf19726219d8e7bad57feb585f9d8d9b6263f60d79535159698260e7574ccbfab982832a094921eb5e0f3a8094b6337c4c5401b94c1d0d8c94457002ccde3744530c2933d9a86fe9bdb8f1bc57ba4eec0c6860e45790570846bcebb1485411b114d3b06123e88648fa4558ebc418c5878f17e002effa97f9f031cd8fc2707df3f000cd88889205746522559dddb1f5d2793ca000000b0051924de84864c347a4eccc9cff312d4caa401c91603be975e19ee62c210639a493238ac8c237a62953f701fdf1ad9a2f769bfba7de7018069fd593fa24ff1a00389c8bf1734d5164025be0c50dc01a050c8b04d76d3fde943a89da7d8e66cb75d61411293ef3e5ac53425f99e0bf6ba0b3dc12fe7b9b7cc6ec8be35d31f9cd2d6b94226d471e8504f7f50ac954f61c6053e9d49013e8d1209523247d0107d1bb094610399d763dd007f17b9e23e55c10000021c000000b008b7f8ce1689c3282661819c34ffca3a23d22ed32913588d39076ec0caf30a72df946b7d2da825ec074441d9d12154f253463cbf0d09fc51ddefa07251bd9ea6bab15224a991b2e787ab010bd5c4b368aa36fcd5d57a91590bf2dd8fba4a5c2cd47e4301c52017327bf2ee4f65e4af581c43d2e11b10b5a459ae021d05a365e1566192650468e146d24668632ca98e7f11004bb90a9bc76ac61f0beaf8f78d079c619df74b590b93fefc9f054f57ed2d000000b01785dfde0f083170f91f2e685bba7c362ccc8a529d3c75646801052de8fb0c9e6b95ac45caeccda8212d9bb8b450ca888d7313e3829247abc5238f974d4fc7b9aee5be550a4d8549fb4aec7bdc7e68bd35063d65db090c6b9b6872804f6c505ca258d1e518719129880819a019df836908a147bc46dade68548c698bde6c4bba10faa163a7eada2b747037e8b5a68a492f48cdaded1f3b49e2f368d18424129ceb54606a0e5cdafcead3b2e44dc6f4e4000000b00ebf6db9ba4d351c19dd9448f9df1f66d96cc789fd1f6fe1637f3f4914a453c6b60e8a73f14c4875868b7ad231ff894eef058c4d8d967f0c9a9a465d967e89333f367fa21a7ac0ceb1437db4345b3b1c5a741f994484f9a59349edbfa1a491a932a2d9b4f5fdcd56ea4eb1555e47e0db2c4557b49e39938d3daf2946f6ea9e4e08024b548ee1f9a8cffa3aa9078dad730aaeb6599a2abf15b1afc6496d1f6781585fdacbcd904acbe5b100febbb336d60000021c000000b01bfcb1bc151aa3f747a5a9437e9f375796b323d3f1ae9676538a123bba55ac8a4d8aefa39f2ac1c6863f4629235bc8248f5ca57fbf35dea6a01b5cd9a2da37a3f270867b0ffa0cc33e3942437784be9bd7e9751f9c8e83b7b1775a1225df6145ce49bb8b4e08dd27fcb49c62a12682bd2fd55fe97c19420ef253c95df7609e217018c4fea5cd764fabd633d9e10f69dd2bb37d2621eaf575946c840d5a120cf262b4d57a337bb3291a34cd5e2ba6f382000000b00f1b8b49c1fffa1c0e3c89c834d66862cfc75f4cb1123d3c2a654b90fdc49bd93a00a599e0c68f5f2c9aae2cd2567518d417aa5709f05c71d22b33769ba95b071a85bada910b917036f112881e67df3b19d987bed38c41a373db23b5cc5eeb8461731d47b8f3f549ac313cba8882441c0ef080c081250afa2487fa1149ad997ea13297dadf7b4468d8d1c231f8553c772fe6720ac74ead255656b469ea54d173220bda1916a3481688c58811590b19d8000000b02235de69dffa13692d0a67754294c7ba7b1d90d81cdd232570b85ebb62e44b45b334f28a8f0733ce16bf5c9e7250c392909d8ac38f4a0bf7f5691b3eefbbffdcd2fa6c9b18270012dc5c8a29e4dde5620b2864de5c6ea3e2ec81e05cdef4f4f490a801bf4bb6065abb231fd185fff4680ae4dfc0858c4e2b5238c7295cddcf90198696e5aaef867bce8e5dee1cc713f013ac277dc4291a8716cffa2a8399040aeb71b76ebc266916d39713709d1411460000021c000000b02a62832001308690d71e24c493c2776909fa09e07670d1b04d4bbeefb7a6ada0e219a6af440ad0e04b0ec875a1eebef4a8486e7b7a4364388d105d5dd04fbf9806b50f843eacba971e555dadf1efd6873be0df6dbe78e1728765a4e3881ba2de364370cf4697ee849b34df4d2f1b7762269a38b596829f4c5aa0642adad369a106cbed03002f38cec3e0eb30279cf91623a8e62713ff4122fd9cdfd28113bb65135e3811a65da795f64f9cf7e14ac281000000b00a70562548d7688e2e2eff3ce7f2d0686f2a22b319f6e1596386d2f88170072d219327bbe0bd01b93b15cf4c2140e705ac4f6f5f9adea9066b95222e5e090fd3d4a5cde608cb2a4c403693de85cf5a6449980e4d8c2a495f2f802d3a7fda9e5eb360daecf00f5f6a3be68e77c3a3e0ab0e766849259ff287706dbb06ef5acecb68129a88a452a0060d567ae85943c0b32ec525818e8a0a976fc4b79ae062b4dd1550f1c04faceb302a2deebfbc80b82c000000b02275a210c377c86661dd245974060872317eb49bfe575c7a567604fbb16ce815abfef35ec78a9c6cbef624a3571da8d9c1504339ce87152b1d2e8402de6887809f72f1aac49ca40980a347d47994d4f3a6f46c9bc04386e56c15a8794ec2dc5ba7964a8ee2bac8c357ade35c95817dcf0709999265c6062328334ab176e08cfae547ec5de7ceb5ad70171d46defbcdf72f85eab498715c787eaf848d4b7cb32210bf29ef5682dce790365cd369c198610000021c000000b019802d2986a933f02e7e08ff1d8d6a636b6a656659519ff355af56821b851dc4d69e2442f25c665cc905a049d92b021266a7bb213af0c5df55ea5dce15c829c24f313ec3479d6c7d6701238cfa687831658dce781220f156fcf8a59fa42c3a05093dd9fbe7bf103af3aba20fe6a1f73b1ff148c55139ee8151ba9c5aeba9e35fdf71f26dd0e746387334d1c123086e7f16901348590d77fe07a37256c4f8ccca8c33493a88c539289e3591ac0e0a40fa000000b007fa142850d2accbde26f1e9fdbbdd8fbe82b4404fe4669888bb4ff1bc7abb3d2903382569588bac33d01f5303c134c0abd1893432e4139824c0b8fbd1fbacfe6588e2373f24489c6bb8d37b674440f3a9abf7c6033c283aca897532c07570c5a733941704b4d28d2dd751dddee99719142014b58c044b01f0ed606e3ef1c3487e256184e246befdec9f941f8a9806c62491f6b86e15af2f26afdef47f0faa391ac11489a676fff4986c419f677c524d000000b00a5b03656f887ca17180c7bd917b7f0a966fa1e3435c6361d9334908ef12c9aad8253ea9deeb6e52267ebec91e1add12446adcda04eac14b61913d16459f1ed1f11ff96d05d67fb09931b68630bf94b74c13ce75bf41ccf6a4c9266f963bbc3a2bef7b6c1fe8625baa36b031eaa9fab210c2f513f1fcfa619cb26d8261ea333d62ca4b9dbd5ca513ce6a9460fc4547df2e300f6850491a9fe1f5a6722bddf1225b7b45a5f244b52c6884b52e01b720800000021c000000b0107f5d2b2a3e4a1c4b8ee22101f2c6a676af6cc92204dd6fa877b4dbb0cfcb5147e5ab792dbaa4766b3ef22b4cea29fffba2b6032a3a86cae085392dfb01b80142b309cf5b400291f64842a01459604dfd418a4d02edf30f3fc7e0e5f80a165c4edcb9e221400b6bbfda8a25de56b1da1a8da20189697fb8d394dca78b4950732c1c077d8229d68ea5afd29f7e05225203a075a0904a51b8c142a73d0d9576750598c06a19542271e7ecad8b8f3135f1000000b01e7f5cd1212e8faa40e39943ba916b4c031989ad3c24c660bfb8659e114d1c2efc577d19ec17070a100fe02eab05370755b52f1705395d48185b51e5ee8c1afa87f654a3937831faf132890bf1786bf2348923dca5fe49deffae2bc3473758307bc5b4572593853349d6e4b52571c77500619d92b82c4ea4924b99d916cce7e059acbf12ee1dc2177681472bf914f9de0228f803d41a1662076efb259a4cf4651bc89b9b21cd54b94c4d404f600b7d8a000000b02af42015aa807e09be6ae0e666d22213923855ec83cf99b10da0ff170addfffe36b73a0583e7a78a7e2e8d7644fb931b543a02403c1cd2300db07a7c4dce29171155de6d327dfc6ad05ab5609f67123b2af01f05283f5749235d14ca20489b4ad8f0ab2dc50eb6664306e5a7d2745ef2245001df22ef3f10952cbed8a78528af5eced922c70dd2be5f602f23a5dd73f70ce5a3f992d10f719b75fc00ee1918d0c44bdd12148ac053e4210804b611ac6b00000fa400000168000000b01d391cb51b4c874add2f0abc8a0baba6b9e009e072ca04e4c86aa5c24e5c8a327c5f1041e6a4cd8d2ce679d46ad849c3b9bccc488f254252d5a5ae8e50880e6027b691cd68ae5807bc494dd81e2db0a0613dd4c139276fee835513224b5bada4873ce7f518d522d5b02dc6a5934db49d1994c81f601fd49ebcb240c2bfcb384ac896165db5c7204fb88474ad49bdaea8038471f35a0d0a56fd5a7f0c08b485961486d65f37cf43bc41cfcbb11853be10000000b00ebb5cd5e05257ec380708e879ca33928caf7fb489131c39cd51aa81089e0d6bea5bf8f279aa72e48ac6e3c452be520f652fa68266909a7cbed98b16375d67c437c13ccf06dba6b295fc18fd616f6a8bdc5be06eaad6f1520ba214c00f55573b684acad30713014b3592f54bb59342f60c8e7ad750f488d2ad74ab3ab4ab3217a972c0808d529e60f4041b77aba6e86b032618683dbc4be05ee7e3c87d372a6b96707625ac7c783c88e0c6322a909ad800000168000000b02c33a07688da6a715484fe8398be65ded38cf250661bcc2b8eb24f2bed7b8c2a288995a2ce08586c498e30715de1b33eded2423ac315e730c04ffac6a4db7743c2524dda6c26db7bd9e29231ba8034e28092445b4a9d058e4076cc09674bb3aa6cd397b90595f4bf6992c007408c69a0298fe8c9061cc6ff82a81ace55082c5a6629f29246a06f42ca1f34150590bf0a25c23f6f319fd4ac9c1b7e2c3df1bbcf23281b6811c0c3754ec784ab22be62c4000000b02517b867f7b85a3514589358c9bcefec8c92c12fcb6a4a267f020c9eb829bfe8804e903198fce413675896e0592481ddb59ba15bcd330993f2222bfa393d0ceecf958fc74ed1796f2dca08a2a247ac4cd662dc33ca7ff7dfacf3f8f62cd229777b596fe6e825d1c6953fa8f69de7669d02684430639f1b5e26ec158af1ff40b15d0ce23649d5fbc2ea940f57e7ec4d5b0ec1d40a8de1d9f3f0b9154b759cc876ae5161857c69b1168bc8ada41e422f5100000168000000b0168911b2e0af0661ff739779493c9b3c42452baf1ef1d26c348253f6052923a792a34ce2e3566859d7e787b15e865e36e679796f5bc200632d93fb01b50de3726499e013f5b95d7434d2e62e7f19a59cb1ca0d8ef5e021168cb54e114e5d5fde99ffa6c8ac77b4c61627a56541d5d5f223624c924589214af3be3ab0faf389d8d8ad795992ef6d4fb3405a6009771ab12eb54fc2c07d1801156bff21b8e36a8a91412d22e8b73e03076cfd1a8c99f784000000b02b3d2107234f52d1e1a8f17a8474711d8ac9d48bea0344abfad1a0e374415d538ffbb53f2684cead58503db7f723e8df9142eeddaa7840400af4892be85fa908b1d5d0a965a957dc666c334b1dd6e36881a2867d92a39f4090b3efd0814112c1d8904c91a1e25c827cf6a56726eb6ae624c006ff7ea95f7ee980fdde728a99cfdb11be87b74587c87bc696e0e9e373bc01bf315e362eec7baba79de91f267c9d6dca6388f758f9179e4bac032dc8d47900000168000000b00b5523f39a065de4cce6f8455c74f7beb6fc567f15b7829905a352057bb1dd7c6797a5326bb6fee94844954bf6cfb24b12f1a288167d6833caf03e7c5aa862f3301151c9d8f6aab3dc00dd650a68f5f72f7dbc5cc2a80ef7356f09051139f922d61164cd92a054c5cf23a2360647605e1ba9a36469d54a783c5aea80bf86d34af9efcc499594a83a6415b6591c5277f72bf68699a608cf3f9010ef7d56bccd4be5a17c771fb50e357db6ab20221eecc2000000b01d754d3d40b986c8bed8ac02e0305327942f86311a48a5dbef606496a7bff4c3559ab977315b8eefcaca6aa2f6b79107fdb004560e8027a957ac745b3708023ad2436f8ce23ffc5a619f7097c958d3cc9268dc9bb80ff1dc469b78eb14868ae16bd3ae2290656b79ed7761d4153a0b2108424817059f577cd06ee855bffc81f197a75fd010cfcee4e0c50661dcfeb07a1c25f9a42b98002f1bee774eb96db97e7ce688c58006526dccf1355509d859ba00000168000000b00f60e4150f8a42167e7a7508c73b28636ecd3a233deb626220d6c25b66e9a76f2b5cbc477c9a50dcf903327230bdbaa7b75174203b9f43d86798d0fd329ae613a813a8de4d3f79cfceedae130bafcfc6dc27ad9b4f0be922f871d2238cbb486b378791c6c9e184b912fe61d0f53032c217356b342a63908904e43d4d77f516b49ed8773d0ef94af2edd7671d44e0ab7e0991ddd44b14027038829902a306ef29a3305cefbcb575a359fc17f746fda0ce000000b027b43e3edae80d8010ab94794b2e3a1b1652338d115fd1bd16dc3dbd69d63ab9f062ebfab3f229ac9cda9e962aff48033bc7ec77ced8efe586f7f72718095a176e9ed1d3d7b9abace2a6ecae5dd58240a0e68e76b60e58aca64c78f64dbbc3ec3e2adc01c14d29bd1e3329a9970cd34b07d0c7eaf87fe4c01d66634840b27313426f26cefd9370b5fdd2325da8c7ee2e1ad483b6dedc9f3ba0b82ab6ea78a76027ff6bf5cfc5529345a913c9f79bbae400000168000000b01fabf4d6daea202a6f50dba6e46672500c76092798199bc152a4d704a0ac739c086faa94d50e3f5c43d82438018a2078c60aaaba9251d35918a220866ab074094c3426990b17285daaffd6d3186b15923e7a0420ba164dc8adecfcb19d3d7d9464789f4746c262b21d6bf03db6400c991feac33665c593df5b00f4dfe9c5a4f880ffc8ac7e8da72f922585fb7c260a2111ced8b5093676da51a1a69308cc5ad700ad7c6e33f6a2f0a43ced0ddb81ebd6000000b02efa70158fb381d86cfb5853c85699d2f41f0bd339005afd07386f0220504e6c623c507fe4d292c6e86f8cc38c0858208d02cf5573762b488b5821424fd91b1092b1ca5ed215c22d2b86ce2cb6219b89b9a3479f69c002e22c93a0378ea27b8695d7bd416d9554e6053a7b025f1f096f2722468eea58abebc8484d98d69d81438989da96ee87543ce9eb372586e6f7810d4f3e4670f34d5dba24093b7600396ffd291ff7b64f38bd4ae5089b887e0c3500000168000000b00e80484c7e1d2c103d16a2fdf4890ee43e9b0754106104ffecfa5799e2335e30c652a58548fe10588bf939b85a6a996672c80296591eb5581fd589b01d236416720ddf4e50c92056252aa2108517de139b4c6ac75bfbde33e58b152144c6904eda75e4f7d64b7c6092085aff39d112691151290e8c0a2722e497094bffd0b961958a91b5c39411ba71c15fc6234e3f09050d1061faa04e9c49362000db6196030fbc4e48f0a08d56e8e8731613cb94ba000000b026f5008a0ebbe1e30ae63696e7ac0f745828061eb0148616fdcaa6872787044b7835a1d9e87aca2b5f7328c9bbfa2cc17d17f67ba3f915def1742a4f8665e0e3c967c9de2ba9e3c176eada439f4fa48add945eef9cb076fec74f83f3c65dca72dcf747daefa0e5aaa5909a500a3241380b807fb303b13e136a4fccf46ef912609f9044b103fc88dce5c69363a1a82b8d2cdf1c284b80fc9dd9810dfe08117fc995abed3d66a7ce13d948b29c37dde6ee00000168000000b019bf0bb679472a2851cb504123c4fe5a736af7fee08d3828943ed7225c8dd65b60ff8dbaf4a3c4a221cc28e0d8face5d8fd729457542e1445a7a58a4c5c8128c2914291bb7fbab2fa2f173aaeb2b6996a629591edee8db6018e6d835e9a65f2af776942751b0477299356c527c41bef8223df67968830f1d1451d8cc8b62ef210d04772096b9a29160b34ac64da37f050b44bfab16b450453a4d9c62ae0d61ea99357fba0c5d6283ed4e8b56037b9072000000b011738ac33d38197ec9a4b3c0de367070931907bc27ad1e1267097707a007fb0b2b76fb76c55a440737ca84c7c5ca186723dc4e981128c0c6a9e506bde2ad2df8594972b6e047efafd3fdacf7526155e996f71cc64db6dc0e12a3449616bd77c2834e37f87c4885ba04faa9e61f0098340ed1b87fe23b4c1d40d8d606ce98f64697cb732f9ea82c991a4101451157af8909d67413c0e7a9b7b81aa0733a3fc2da07d5388127b09edbcf051026170caa3400000168000000b02eafccd3e4b23c232f1522776b18583c54dd4bddb10de53ba60b2b33494470cd9b6e1e0f0ed84c56f76789495ac768f8814a0730e2cb08d6b5eb410bc5a9db0630f4d4a70680a1fe8d29cdc874e8c77a71a9ceff47d29daab5f67e3360c52700d5b5685ce369466482df6b9558a390192a0bde1cd84cf320b4d0ebc02816110ca6b43eebd575960c3f71f9116b0a3e1b2fba567b2e5ed9759821abf1eec143d3c636e1757e22645364f9bc98892cfbe7000000b01ae47fdb30f2d3a13cf0307d269714ddc36e1e29b3f060d085cadf53f9a18dc64eb5d782071c1bdf286c27d76b1fecdfe27a300a0d5d06443b86a7d93a9194bd8a056ad0b3b6d56a530e2cf7204091337a18665dd4ab379ca113b131c636abadd0b3b83ba5fc5866c4611b9d9638db6601fcfd44e0d38464dae6baa2f99947eee4e70472c5e6bf06bb8f296d6201c21a12a4a04cf4c46d312874ae17cf0004f9b560e97a1b02c23c972cd3c27901783200000168000000b014d5743757b5d049304624e0e0a2a3ab07b520003d6fd1c4ca70e56ce82682b2fc75e6322efe505a06abe1784c81edf9882b8471ace526cf2f7bd2fb0eabd6e88e2941f850c07f6970155b1a35eae9025897d416f64711c5d2a33e407eb4b04fcfbc5f73f4aef7ea218bf9b8eabb6dbe20eae3b616bb02d04c26509a4c65a44040d73af94f7ad60d7b3fb2e4519ea4fa00d8775b7f550745cf5b2cbe65d7d8cf1f42fd2bfcf08d8421e38ff6be12cee4000000b01cb64ce3ee861d3fafcc0716cc2a7fe09835cb287098a84a82af6c8746aff2564c203453466c38f563e70b76dc4e8adc7603ce6b13641114f41e18658c145bf9d1d4ab20f317e5cce3cb7dc5aca33c660a591e8bdb77644807ebcbd8de5f8579501bf85ed20fc5350bb3a532512bf73321f6c44e28614622f2c97d69885fad3715cffcc7fe4ae3b16cd33bb21d0fb8781be9766434c59462c8911f0ed9c3b7f66bafa636e72aaae500fdf6e36bf1cd8700000168000000b00524aa987c9b96992eb381bcddb3aa351df1cf3cd283baf3502caeb5f7be991fdeb40e75f585da8d8e2ffcb61d7bd5095634775a71ecec756b6fdf2329f1dd559fa344714151bc000cfb20a68f44cf8345ce1a488ec3c4f62fb03ddfdc85e6e905aac45cabc37e55dc559555bcb34125268d24f9ae3f5cc3139324512b94ad38981b15e240e34ec880783be53ea1aa3805b35e524d41a7e531795308b26066c4211098fb4cb8c0fdee45cc066b2562a1000000b006f2175f11664794970e9eea00adee72284fc35f55661012b3f1e2ce662294972515f37ccf1ec2cff3eb7d5796ad8c0011c160afac147fceba6bacfabeeb721307837eb69abfee5c2a22f7c46c966a566021cc64a94c864ccced394d83a5c07f53bbeee5ed313164b9c2edaf48a7d05c0ede2b5267d731d9311d77e17e6c49b8b58eb294cf1283696e3ebd6f50bbe9eb1d6b64369be4277ed710387434ec1db21b0d365f22a6f9066ca86c7185253624003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b003946dccae961c128e511709c7a6cc7a630b7e4927a6fcd9c821118569350bbd3be2f6c394c3fdeac9271e2b7154b3f44a2262d56eeecb458ca1cb2483ef8e38dc3db01dc5663af74fdb50bb2a66abd34e5009dcec3b9164a2c20f3909c344004ddaf96d6e57fd0f47cc2550bcceb5bc0cdca3dceb22a82d533d595b0fdca2aa17f5a115f03448c8106e519356aedaf6178a67ee73d0f169f2dc3357a64e80a89308a97ba47bb8c03e8fb9f7ada0a702000000b0070f465625afd6400c7241801a2b4e91efe2f68d2213c8931ac147c4a06ed14806b4ec6f0add14f8bf8a25349bd0d59c8c77cf58366ba1dd0cf7141982c7cd5b715dfd70d58a9a15a3371e9225fc8b78988dc96b70c53885ac2578a3edad6386bb103323af88108b3fdf48cf24a27ca01e6893dd5457db7648b57889535352d7c2dba7c8b77b005c97b5ed585ca69ddb110ef3ecdac5d4472c8096444e8379c5ed7ddfed9b740604eb03e0534885f9d1000000b00d0a01954174e2d39be53f39f04c70392029494647603967a14e36fd9436688f21b5efdd8435a749f1dd8dd56a6de78966a61cf99c6056ebd2e2806a730386b0702fd926da921f11d97aa834e2231149cadd33e17535c2f04eea4e1cf3594c35d84f0b97c0d30634fc381fbebc5d9132292d429e651960f5eeb64784291bd27364f6914baca7f3ef74db18f926a7067b186e260f70d113a9417b409c16ddf80af0c784f53563fe0b4c73ba3fc45d7c7c0000021c000000b0126589f7ad4767568913edaf756942c6dcdb0a9b7b5918121e0f1da9483cab009df0072412a090cfb5e7623907c8951c1507f48c861da98e80ef4e7c4d77e87895ba9dc97fdee505aeedea251dd59bb19963bb612b554aaef7bd4163b8e801aa1974fa500eadd90697f3210597503cd10f96a416401c88f94305d1216d1c31dd5c206c2b1085f17f3b809ec74b56d1140867d584aa06023cfbdb6ef4df49ed793053a452fd82544cf1f89faef5f6502b000000b011e2336f2300b4f2cdd3fb7bcfe2235e6c03125e31df0dd6cf2b185fbcf3e676d380ffd7d3cc86436bc7c8b8e0e9c3bd8b70cfd73ab4cd165cb37178cd0c68244e1fcaf04bfff30fd9e2c32d9a5ae6300a018d4ecabcdff19fbebfd30c21dbb54f55b7d2ac42d168439efa107c5b33be25cce7d3840ff1b323ea7c9008a1f68b67331c6233752924678af87ed20cbd581f657f556efdf23ae999ab4a608b0c8904556b61148d6678823baf0456d63e8f000000b00740203b4ecfa9f45d04aee98b1ef65aa1c58c52f19b272b779682148728d50428a73419edfbf099928c2d7eea1c508ce813cb5b8d85cad1b054f8074d17f8f9aa594c6101e7f931e0276ebea88e75c070005f10b0c672c38566a3282762758ce96469f8fc41fe63c671ea6dc679caba0b4d8b022fc6b478ec940f4f0ebc221a8d6c6fa5ff13eca06030fdeb1abaa152110d623e1938961b6626e1dec2279e315e731ceb10e96e24a114502f0e6512ab0000021c000000b026a7db2826b933d2451fa8e178fa90f048fd12a26b17e93076990146721db3a2d98cbec7ae26d8623d90345a45c9dc7ee9a7ed4621f9cea96df7b81ccc1104cd78ba8a6b9bafaeb2e52ce1ae39cde83caa36f7be721e2f4f00783ac644268a18c280365c6b448f19a609d84218e2a10618cdc7bdfae31c72db3bf61b09378412808dcae3febf5cd01918819cea4df3940785a01b4dd7edb95cb664ea9260b1f26e8ebe2b1a781be3f02309ccd2c2e3aa000000b020f31ce0d64bc9858566f9aa4be385a416c781ebb9530c6a08b46aab0bf26fbf20d6f0cb4a82e7232135e5830a6ca4d35fadd7482e012ce14fa9e2942d59c2d34911fe6bcb3a626f2f1fd95cfd5e5a1f867199757960e9004c9b2aa36ab84f05b2e8576d4ef786e96e5598fc4fd6fcb92607e25b993a7cf028e0c654cb0934a5e4274f71f720f3ef94771f5b5902ecf72ab5e377978b5755004b9802401cf1f923b09341288fee7b95018a387426fe36000000b0010330f3d0c969b395bd5ebba7f6791d98b7149348039a08d4b796047a7edd3ca424ca22c0398578ee99b96181419d63630cdd7fcba9e4312681ea3cfcf13b44eb4b025e73fe1448bef66dfe721c39270387b0bc06f93a03988181f3c8f758fd358462a365344399d99426b8f5972e5f161de687215cb1faeba6b8062fc02bdacfa061e39c7358360094a628b792003523ea6ada2f69f6d0f36dddb50b75a6232f080c8791f9eaab4b10926f062a4e240000021c000000b004abfacd392462db23bb3f101900f29f2c8cfc55a93d90ff020b610390c8ae45f35d8d6affe08599a09a3b6ccb7d5151800f93b665da0d295f656863f0f349feb3a3f1b1d6fcdeedf5f48805bb845f66cd653e62928a1889cfd7b6399fa9510e93dd0e363b822c167c5ae8d6a28d3065048da30242414796b7473545b30012906aca492baa2c1dc33d90208469517e6117e0ebcdb3fe501ac861923696d6396b1783614b3d3e05a979dde3cf1c6c1446000000b0170849d0016faf70007aaa134d0b6e907d93e75bf239eeacb1928039beb6a82014d767f1f6ef334e7c4fc3423d09f39e596b3a5dae68f383bfc3778dc40a64e67eee1416b84fdb0afcae7a08136d73da75ac671c196cd957fd159a075571e0e3e26586af1193a4f5b09b5f5b409f0fc71aff06e99a7138dbc8fd11212e705b1a3e84c90f84d934f891d9f9ee78c7a31b10bb4881a62c9d5df6f5e8066d6d3d42eeecef9b09de5ed7fcd914b6fc3dffbb000000b005e85bd67698869c80016c8a51a11ced3e346000d335181534003acd572827559791cff1048bc8408f53395c8a5d835119d3788cb32f2afd75539feea9b703fe6ca11ccaec411c8eb696a0f56a5b315ac97689022d61085585d178f03d255c442c364dc39694536534867ddd8ab159c01e58788dabd6bb3f099b81fed94c4303beb1f5f63797f2b1679c55b0245cd53a1469695f27ec08d737042c53892271f8687da2599950c46ed1a273f865c2c80d0000021c000000b00a655a3d720b4f1cbf931f03195456e851007e0abe280a33e898c8e30790db0a079f0d659684776be752490050d693bb1a47645e48d9db616cb40ffc7053f2aa91d4e5f5a903be7b50367bc42e90c14609edfda67e71ed510049d7abf87992d0918a4ffa2ddb6615407a9788dd30ca8e1aaf761003625e3e2ca13e71fc5d1a6c25b6c06df3d25b2d15c479c4504fe4c62b3ab913a2b6182c8dd4acde76d5cbb1c2c6fb9570010aef6bdc16b21a371511000000b01930622bab6c635e5e47efb54d918f4f75318b1cb143c75d9f59b0e02ae661d473c5d595ef079ec960ec39bc3fce086c17de18ff7c5869a4d8c62020648f7aae53905873c8d9a7173f245aa47a0f0c32c151ddb440e25e78012cb2fb60cd99d8ec01e87146aaf387cf7597ac120544c51b40c747a5352d7f0667de4014e981cc43e4e58b8a32e655b35bff0073fb78ee1e2f0865819fcc1cba03ee6b71effc6a5db87a2b17a0a217a96e6f0b20785d85000000b0286406756bb3b496752af09125aa69709b4c671f674ee989acd65c756a86922eacc98e891e7c564bffa5266f8fb46e1200c3175d2f152ae2174eaf266789804528b60b8896d427c3856ca5cd163a3893ed9e6a66186080c9bd74d131a2d56f95d0f93f69e496ed37fbc2d54a51321243197e9c7a6edac9cbd612bc0793ba31a11690965dfaed5f6207f1634a7814dd3e0810a9810e179100e02ac4b5a4c21eb46c72241807dd78663922233701d54f720000021c000000b00e7851a30c5df4843d1825fb8c1f84a944c83c95891f3082050d908099c810f3e5a94cf6d6d5f88376994e0dc1ec3855b18a0a59c11efd4667ee06bbd5ea0db6f08305bbcad504504d2a2d45b820b49d184a0ce4a9a4f4e5bea4e94c097b4871ea8c4a0dec116127556babc0f095d2a72202989f184373b97972097492995cb97635800f4892c1a52b9878d8c1e14c522dccfaa06d2d6d2a5dcab0f2d0302acb6b7956a3bb7574e38c4d8b67e3edec81000000b00d03125c4326064dc0c38e73e760c078ef5b9c7d7268ec55aeea295af91fd73558ec3f321a912c5f840dc9ebab7f8aefde4f1005cc60018c1f004cd4e4b9e1402a8f2c1cf54844b9542de0b248c66a5f1c0b7c39209773268839e2fac461dd7034629d75a62e47e67925028c5a598e501ba15b29d8d4a2d02bde204088fc874c427d640e6a594613aa810b21de377808090c603b906483214c3c49b491269ad2b1a82b31bb3904593eedc2c959be182e000000b02b0fa1b3e7fe82052c4b23dce49e312f829f280338af6d7de984c010628f435f7ef83a5e69a8c42a2c0e8167e118a51d0a1a58d0b767b9e2556e8b3b692b34e15676824628df734cada6908c406586af5d76a68f85e08693d6834aca208fd4215077ba448a375f02e736fc6856bb92e00b57f78a7a131c5d32ba5775bcc6327b22a9c1fb8ede126d44284c0a9bc6157a130bc6a16f60ac1dbd46c02804a2ea10afd119503976825eccb47a3075b7495b0000021c000000b02b33ca3da334232c699cc2c3b7c36e303c1ba26d95d4d882782ff8d5ce4481230ed9f2b9957628105ff7943ded1f0afa4de6a14325f930f88003dab53438d7dfc44f1182aa1d7f0b39de5a546a4063c0e0c22e941ba1b022bfeb9075b729619f38101acb20d429516a0bbe0e620d702815e5be792147c29f7547ba9d3854b77fae4639ae2838840458effed9e17559a926ce21730f1adf08f8244fe81a159e8340f04700fdfafdef9fda3049b6eec965000000b016a2930b52f799fe37c98b8e516d8325f20c0c9ae18ed0b6902e54276c316d240c48bdec8eeb4c40c29c1591d143fc4b0b542c291eff23ca5069347700c1a6207227da661b5aceca7a3b350aed704746f3835e8b0577a41da025aef1babebb2d76dade3299c2bc7d984509e621088af0033fd53ff4efb4ad84749470fdd6725584dc32e23d1e95c1572c5854b00b59ed01f367fa8de039a314ac972cded9cbf85b41b45965e57d3ad50d32e2f9099cdb000000b00fce360518978af03b69e845144f48bb57516e370ff20c2f3dec35c6a17d8c3dba621ff5d661e1525bb3f856eaf83b1c17e7e00e6625bad34587779af64e948892e31b4e84cffbb086472f9406d580559c48da2f190638922bcb304534f774eac64b73e386bcc32366c6a54d7691ce6105175b8a490b1688bb6efa2bf26d7260baf446cf53edfb108130cd3f734fd6e72a98735cdaf7963751793368188829ab3ff005b3436ab069d876ffd343ea19550000021c000000b007333879c08c38d0c8b993e886e7b74e54bb8e9a544b20fea7af00fde3153d03af4b17b45bb423a02934b4d65afb85bcea2abd5733220fc532d456e7465ca4bef79cf4edf8dfbd22f216e019f23a2bb8cafbf58c7cdc68c3078eb8536a81fb359df072cca462749a39d9a5803d4cdc7d0d61e5bcb8d76b948d279b02dac70cc4f4cfb3d3a7cabe07a5093ed205d955e4248ab7b98dfb8b4b058723a9f446487a238b589afcb55a93c059f669e48142d5000000b00bcf182143974eeacf533abe31ec56377d31aabee3c30364e68788d87bf6f8f19c7c2ec43e488ad3c6c63c242080b0ecbfabf7d04b8581909fbc232b01405d37bbfb4df976bee57cee875869a68ca76c91550b8f437c789dd1b5173b0cc3aa990063faf9d4c600b0d75fb7fd500240e7030046fad7e4cdb82f7c8c5dbd8dcf88a03aa35610c07888d9fa84a38a726d021b3b4b8cc87312be8ac32187269c83eab65576133a7735a364b086d87abfd3a4000000b01707e297f4d0fb1ea74d149c2c77566a96d926f2479d289784b25045683d440cc4b8711a39c6f48d03bdd717b2d42fe5ec4af1f8f5262852d6e00f0deb23c76bf2afb0cf137c46ca69b1c95f67a903309ea61484cc223d82e75ee9e6d9ecb27d0d2f01efaed2769989ff95fbfa66c76d0b078b48453e610d00f3d2391395264846ba8cc80e7618dfdbec09a0bdeaca492726e57349b64f0fbdf05478dd9a3ad1f829cf7374eb4be7f10391e01c8384e800000fa400000168000000b029990b18c36a22ebc3172ecd92d6aa7d04771a3aec27b5512c1300d1f52c8005561e4353b5bd24431ff0f6dce91533f6bcb796ff89db2ef2fe691bdaf358ea6362eca862806a43444b1e0e4c3aa35deea28542ffe239fb4d77fc098c8ac906d9f540f10a0bd3f7a9c852bbc3fdfa72dc25f520bf0d4651d15cdbbf8d791d8be63ec5a01aed79694143caf82e7273d4651689d9ba3c9b727789fd5f7f6ba0e1e9ae13ee5d4a616dd3dc5a912a9306dc4c000000b02da23d9588ff6610d4cf962c758109a320d31422bdd1ce0ac8cb048783da38466b149bcd4eebc46e40aeed893b5ce0c1c60d56fb4a3438a61be49898ed0d8c6d423ce6c74d8fbd1247c5dde41ff5b84b1c1522eb801cbadb7d8dded420aba8255ad17ba28aef70051bebfc42e762761f14b48a7e7bd003ee8a258c3dc04286703df628d3438b2e7056725be4340420d9259499195a9939a6b13eaaaa036bcf62584f039648276dab8b29573cff7f359300000168000000b003ef05cbe9576ae8d0d28bbb3da292e4c3eca3fcd25e0c767dd0d66f97fb7f3bde147b8b04b699224a1309abfca7750240683dc0adf0fecfb1c4d6a6270aa4c266280d4090b3a22ba8ade7849ecdb4b6b75dec6ce74cb14a38e4caf57d1f832f82a55ffca78f742020f4cd2f54d3146e14ecfb0ed2240432e65bda7bdce1592d59c2c41da5dabee977f1dfc2236baa46053b601e083397c0ed3fe1107f988ff307d85f77ce2ed9aa9d921c9fc920c5dc000000b002e8b105ea38122af6149ac49e489d3d8540ce84f0e79522d59d532a4bb34b2ce3b94ec9e1f55c251e12378ed75b9c5de179293af284389b154c3ecbe09a388825b06522a6e6ab9a11bbe31dfd5bd0e41c83d8cb2229c94d5f05385e9eee7ffe6d7f24d757def186cbcf7cd5a6efafcc0170dcaa1152f9228f509ad4e45e7c436a3ec9eff15ca7f94930e7b0baaac9f71d74a0d3eab03cdb9dd78b251534d9588f66c29cfcc7ed04c664064058fc590500000168000000b02e49041ab15d87e4ae513949ae9e5a0d995d97a6a751f2d7454c20640eb86d1599057590ad148ab9898a99f668270594ad54305f4e3aa2c7dc3f16ddfd3b0a1b4487893e4c5ee0ee8c984d7014930ab968d29612d21a8d00d4a783c4bf7aa8307e43554a3436bb4318adf37062559c342d9f40db1ea02c35493d140c704c3b0699812ec0cb42fdd74d151372e22ad113223ec09e2262de38c6b78e5cb340697fd8dafa68cb0ff250ae6e5b17499ef6f6000000b0182528092432c4038815d3d3bd1a8addaeb66bd5c188b3ec2034d07b3617393a5fa70cb6d923a3e0b9187a0c6dc8466793e7cfbbaf84b3cffa380dccdffbaa9bc3c973282c3de2de83663e241cebb0798bef34ca4bcaafad25ae531ba4ba2012b470ea0f69ebc61bc02e0e8af10b204f0f04bcd6084c1421f5d1cbd598edfcf8ec10abb8f7c2c7f78f149d1c545e48e10059e6d4a009ed513e4f7ba52869ad8a58ed7ce2a9e4fb28762cc90f4649528900000168000000b0100e754328b8341e566a0f86ba3bdf564149d7c09ff66e223f1ca42943477405e621ed2c8828aa16fd16ffaa1453cc4759c4666419ae5fcf204097819bdb8f75f55421f9e2a2397e9615e11372dc571bdc0f14d5483d2eb937e4bf285ce2c2b01b7f405d08fd9bfe6a3780d07fc431521deeddd956e394c499569bcb5a14478188c3665a2aa4281a37bf629577db83ae2667414959474b92fe42f199d44fd78be0ba29abda4278e26de3d51933a24cbb000000b00b5ff9a0f1c02bfc5ba27848dde697e527dd8e9e4ca0eeb3f6e2708cbc6f9d23f70823752c6781e4d24259ebabef09c7a3cd7ec14ee2e795ad102031da4a58dcd32de9fe1ce9a025d8cb12ee7ffbdd84a949e816bba13cb7a2bf0f8bcc8602fdfdfa79c8ee4c4fb1eb27b9ec06e5c0fb186cbd9459a115dd5f6a29c8010b7f3aae05f0d1b6cdbaf41c582855557612cd023b293a02ccf54c4a684b949e88a67bb9ee90a5803e26b01a75da8bdadbf03500000168000000b0150ab893fd2bbdf4641a8b7b4fd47c6b07145658a9af9afe4866d96df241dd473ceaff133b833d1979e31f84b0833aadff180a84281f1074f6e8445c259a588f658a369de31145ba42879356ee9105de9314642383fc371a2b92e0b57be2061797e3a384782cd5819d2e92e28f2a6ab61ef32c414c28c574f05a13cd8db76b6203dfd316c2422ec0458bcdc1253df7971845d5244962312b14da04c0ee12ed45a2cd6ff6f3b3c3f11b98d31b2165a9ca000000b01cf36d2c8fdd332b349e60a28e916cd99454fe3e18d6caf663b8fbe399d1ba6d37106c338f28234bbe58206679226aa7c5d688e36d27e28285f106aa0a6841d720584905ea0486a4152a7dd4b71bb7615a1be806e6b59830bc03560ae3a059089f4fed1eca387267f2030c67fe3b9971111e437e5feb8f02eb390f7b3989dd364aae9b46c77f51c62acc811c7ce236fd281fe4e6837a03e64b6b518f6564b73308e076d6c6aecc1538a29dcdf831a4ba00000168000000b026fe52c9cda50d4c01f946a3da967d2647650ef4c5cc85c861303fa82bf087a28265768e5d0b120f489f464d3b04d9247ccfc9c7afab8269168c6f8b3c22d34ebb024d4959fa8a182e853bb4b71c6000bf01f44eca2bda266bdcdb6becf7c6149b3d1d3688c66ac578aaae91047a82b924aeeddc3d2d0a7118423e2d07ce99ac51c5f6886ddea1b9bb2b88b841b1f37028370f5c301c5d07d6e7c869effb3cd6789c0e47c1c7df4692eded6082f5488c000000b02b6b49f15b7b6b73de700853c0e3fdd14f40412b791e19921d17e546e0d204cf3212c3819d4b920601039ae5c58386993fc4447792c108e7e58d886b8f4e875a86c74c1f5acd6f37bef6e40f5459c988c430d0b37141f3bdf281ea8bc9097327368349f8526dc3fc760ae3f0ffff784011bb24a231486bb24f1aafb1ec08efd01cc87f0edb37d060f8ac5cfb0c0f022825bb3385209fc149f427fea710cd2c1f8d1c409518451ae6d1d20fb83b55943c00000168000000b0156288b5bcd11a259e4b5924859e3ff6885ce38cb04756f5dbd8bd7b47c012c91eb730a294707ca88f920a2fdfff2b97807050a11cce8c1a0784c27f0a039e28820d58daaf88b80c8a6bc5905e0e342bb9d62f911ffa63ca3e7b8dc6f692c596e0427205fc7578e68608371bfbbdd8471686fc18303f81cbde6fe6a5162f1605f76f060e6321867b07d9610faf8d215315bb4fd3c83026b577c31918a023582f5235a86bac7047a0e7ce65f728c0ff4e000000b004a13a8ed647b8ff3e92dc75a39b82bba3e85c7d6183786b19ba60a3ebfba171ef48ccfabb6792891f2a47e2e7165e4ff0c52989ce7451492bd8674f810b2d434de4547bd762100f5abfd0271d826cbfc81f338b6b06d1601fc4ad58d33574b097479598f554700297764e47619d735e17ba85f76810efd87beb3eb60d395311776514324f4e5b8e9a2df0781f8b197b15a27198347f55f6a5bf694900d4c60e8fccb62147ef5b81bc0785374edd292200000168000000b02193b1007c56869fb1a2346afc28d97611e4b0271add94b4db565a73bb187fa8598b509db7309e58896ec8ee7cf8a87429cda9c13320c7fd30fba6c53178711bc43bb7d5afbdacd752edf92855a67989d0c9178a1338238cae06969be76fc04368120c9e4b23f40280433f85ef8610c014acc881e8398430bf19638b07af445dc5cd2ed99c292c03bcfbcfae9ec5a5402eea686fa533cc17199eed6cbbe4d8dda70818120202839698d3f3a3d179a026000000b02032df390e29f1c6b8614e58092f1722963b5f23e789aabe1e1afd66d02e852d0d9694d74ee55091a63559b2ba0f0ccf8332b6a895f2ba1d3b561b9fd61e285db40eb02765ec972e00b11d484c9379693d6d87196cd31bdab29dc2dcad804fb81ad74912db0ba044fd52346bdcd8716112bd02be4fa09f41765469d55ffd77e4c6ee56aa88ebcd4b3fed9b7d1dac07fb209e71643a723ca3ebcdcff710ea7764b11b22faed302cbf4afdbda943cddba000000168000000b00faaa02dc57603825bd5f12fff2921afc735e98bc0159d99794677c263792ddd9375b94a053e683b22be906c80c872db10c9139617a68320f0f6f40c62663a5fe0fd2bb4407b4dce4c966054366d8003fd866ca44442c2019b7546d2419e59029f2e95cbed5246932499d1a9699e484023fae61ee1112bf276821c3690f334dd6b2a33ce50a2c4fa1f6280dc8e65e22b29e05b6f12f3b9118aa2b883949100caa6019255cbce4082d7ac8e067175a671000000b00bd33bf9d97d98b3331c43087c03f197ed645699250840f55c0b8b3759423127378fb0aeee60e67a9c8903e9a3376a507292712190a48744d80ca6e0f06ab6d7df60798d96f10fbd20d02d5472006da363e0e6fae3824a60120f734aaddc9903b877de9191b823a4d5a833bd5f33739407f06f3f7afa800c3532fb8d629e0e519461449a84a1ad4eb2096c3ca30c35c82570848135c0f7e410c81665709d6585e63868da01924bdb1f30542d738fc3c000000168000000b001acce755e1f887088e8590097efc785d541537ebbf15599059a676205d4847800e7a5797e12714ea5e407c0baa6c856e03640205163a23f4d9f59d25e105cab465cc683cfbdf1c9c38a3869769a5266f3e998920b9a0fd12b3b79a84fb0cc06fc5de40e1a3bce677d614da30f89fc5e21615872f7e38af72c62b831b166495ad408a490cb63f8db3745d346da092a4915b8a17c4c47db0dc671611210a33c8e4f0933c204157373bccec050914c1c5f000000b00caffa7993bcc9450f489d12f0662b74517be8164c9f56674da22bbb254c52026c4799769934b93f89d115e220f2ad7a323b6f65d4b1cabb4aa019160b0ca8b6daf44874b7d37b66477879e379705d38003c4bd3e9b57a0037f19a956be3629568a288a2253fd0c0806b015c09a7de211dc55441ffbb64fba69a46d4aaa87dd2967a2a6ebe4ebc8dbc59ea44352f52702e96fa6680fdd0985900f342e183a84f2a8068f55a61ac835dd78a1bb508e5cc00000168000000b0031765163bd977018ef88e8a8903b30581a8e7464fc522c2b131a6d4b2d30caf82fb219505f9439d9011384eaa66a3b22dc7f532f578fb18dd2195e3225b7c9ed494fddbcea225fc6919b9341350dd726242034ae68103642bfbade49881a4026dfe03fb00e012c77fa99aa1716fd519252263d042f2d5d92817f9af2f4e5dcb285490bd0a0cc1c793d7e700fa21087c1f8116df5f466e6552b26a2f97fa4ac4ff319c6da49b219c2be2964360dcfb5f000000b00c5b7a2ca497e0f89fb4ce1b9fae8d0f7c598104f79467e39d923ce9981fa2456f39215160af5c6efe5bf85c63169f18f31c3035f236a6140719756a824f703e9cf5fe38e25be71b46664da7bd0740d95398109dc9a8828d7bb4a02b9b8f7b4884c19bf07359a5011a56b85001b27b352d47b23140d97b0f377276820a24e3adcacf9733a476edeb46aa054e802f5b521b9dbc0a7396ebcbba54db250bfd919c14f3446e986f83f3f5ecc36494556cda00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00479c1be9323601bc381cfb4bb5cd436733fe4af5565330a111ff97894cff2e1ffe51c9943c20077a5cbcb69194778c034aea9c992b62f5926c173229f669fa67c60d9d78478c578a823fd2654fdfefc0df1ec683664cfeffd38effaccfef418e9a2bd7dc7672bdabdaacb04bce2a6060553aaa0f0f4d554a123ea12ccc64adc82f4653bcd46447e9abad8c84d3b984b291aa322e76d2e821f4fab6493b9998a028745bbc8368f691d666d3c014b4f3d000000b01cbf564972cb1064fa04725bf92a227078cb3ea77fee629248bb2fde5d28d9f1b060e288ec50f1ef93e4f4593cc0eca5f506ac9db008fc312a0c93fc56419fb8ce69627cf47c7b8a9013a46d4d5b05cd078d0e89a9917f28023d618c2951420fcd9a5f1fdaae492496285bf301888efa1170a94cb7d5b7de62a4265ecb7983402277fab6b13634782ea3398daa0d66021f1180320cb0b459dec37bc6dfb0f6b5f2208cc3792200eb2dfa94cf37d9d364000000b000e513084ffb2b09c17815c886fba848d4ab2b13a4ead5e046bfce4fd240786c482b002b02a1165845f134e934f69e36fb09169ce5aee3e37ba8d111ca7ea9533e38bcd2b82af9caf741602e777c43c6a1fef58e186cb3760d21432951372cda53d10255a87125114e36e3e17875b166171bf01d1c1ceb9183aa0d5824fadebe29994392c53a083f30d0797c1c4604911bf2ecad029881544e6f32872cdfb1b699f4d057dacea56650a4a8f5ab10d70a0000021c000000b02c83920dc7f2eed6d9eba1abd9b70b2f3e06ae70f2fc5cd54e3b7407ed26b18168ef855ab7a4a4452e9e13c9eb3ee22d40c12d8a74fdeb16d373c6496603e8f997247f9b7aa19e2da0ff28e0d61ef722267e29525b4297c7bcae3e4d667c1c6c4d4d10e37a5f786d626909bdc214eab2062c59dac9e6116ab4d0bcfb7ce497a57bd5c8f6998f226505fe5a6017fa28ae29d5593ba0b419f8294c0c1f9b271524b262c5ed5734b87c5b7794e03d9bb595000000b0025c058250c6dff33adde16af89440353311c4e689a83feb957dd6fe31f9332b19b0501e8dff196cf5d4ce722063fdcdd3f6d71b9e506a0532e81d958da9a7445ba7c0adef93af6b85cb3889a3c81f9954a5930df0a71b683d75a2874beb65723f59287ccaf373ad8107b812506488a12797e1903534620e4bf07b5ddbc2c04f0186e4f2950e9c8c89999cb183e2c0f30f3e9019e442e4091ba4cc3241cfcff0ea873c8abfa6ac938a7a9414349908e6000000b00d91a6fafc512462293ce98aafb4d776d304961ea8e62224c20610ac7ec2f3320072a538f97f96a300f400050d81d1c8316ae226436e12921ef9b73e69e0bda7b4d30f33bdeab3d3a370b781c2eb0ac530b0be1b1577a5217c0b3cbc66cfcfb09d0c3abfad5afa1a5cb14edcbe193ffa05a399498d6157604792bc1d866f75635db89b1c1d38b7926534e2d2122aa4741f60999b10a551fa42447e3b789c5547efcb97ef893b9779a44d2ec9c250dc710000021c000000b0257eaa42923689583543b0137c78f7d41c0e5421516436bfe8dadf3c5218845d9ec30ec0011867779daca30f6cbba29098cd1c6f827fc6aa770def70ad5dee165cfc932e127b4b28fc824b20719e5e7f72f1ffb50fa9a0caea1732dd887942698254e1502615c89b6adc25f88945451405d0381241e3a3229f07999cf829cc13a60a3b3602ab5b09e04d1232cf48c6620117819352d289346a17a791e4ccf16b927fe46228b03a300baf99f84624e6f1000000b00b68b9b703cba726932aa1a52e87671bc24fd5441a72b8d2e7094ab56dcddad3c2d0156fb10ec15e7796a92dac4c2b8d37b36fe2d2e4cdd77fbf571bc51f8d5384f0aab5ed924a13f2de201434058f87bf74614da2d806a662bd1dbcd9a0bfaa2e7540703e7e724057afa6a9ee91dfa808d28290e91c2c4aceb199f1a5b8eb264b6dfc8b09949b7c50532f8168fcb70b03024ce43541638cb3e203016d315f94baa2b65c0903a060b5dca2845a3300e2000000b0211735a86a4c2f0a0aec0d42d867fc94e8b242e9cee59cccac7a38ca860f05bcc59a537d4a9262fac5100d147cc0c86f275be70bcf7ff74b363f7f2056d307465ea1c6d6c67fc85fcad555157e5efadbdd9b4ee79ed7736549ddcf492567499f4a9f322d8319edee89feb93bee1e21e80fad38f0cb9d17a69d95e4a521aaa00b04f3e8761a09b4a0a84eb1e2789128cf06d9ff671fbe0edb673a996e6376bfd41cf703ea63ec2e47971ed23422846fbc0000021c000000b00ef2508e4a60d89bcd4ca31afa8c6ff06d72fe6ed0316f9185db23b849e09fc431373f04d8827b033ca231028e2f51a16e74000b37af7e4715cd490efc475c512a4bb2f065896e1621f2a7951bdc3f106bd94d4d9c28af1fba1b4a8f53aa84ea336912454eb412950683f4b0e6a01af7103244711a93accbb0105865b638be7f481829340ad4a5eb36a25de21b7e927c003bd42089b2b135bae5c3f778b822c0746d0c4491b8ac3eef7be5b174c1c2d9000000b0114357a742b09cf8ba18269f929ba3eed9d5ab5224c616dad40188e9ca819f7266093a2afb044363efe17d354d92518514c655f1c1c23fdabea9dfc0f822c20dc03d8f96dc1538cd513d01d2f58f1e887aa5d7f0606474e23f5c9571734bdc0109fac4ab9321d3ec49492bb0b56b3e7628a42c241acab6d2f5a7ed0bbf8db439da95505bb11ecb89c95ed113daea89ab16dba6473ee02ee006098c3fdd75a525595993c74d5d20be31137a71c5e62d21000000b006285b593f99d01d5c7fffa5a5d659c3a29a2074f77d386bedea159183ee0b95a2c997fc80b02130c5c8a3c85af4a8e9e30579a69117e28451099a9541b0b86aacbb4de828e04d2f6acb2ad2c04366a3279918257bbf608871ae846a032e45dc5efee18d78e9ee4f1dccd742e09b80b12ddb9e7eaebc8560ef990f8b5e5622dab1c305e68496e73ead4919d8d94a63d00d1dad4796e68cfc62f185d24de4f05ffe3f4ec0b8c29d4d767bc5cfa52aa1650000021c000000b01db54de7e2178c1300b8101a404856482669dd5367bfca4e657071bc08051133addace29d6ff3c55b252f97d195f533d63d4005abcf4084c2320603d527b794e5ef119f785c87f56f732eb4eb055898154bed02adfb6c93ebb5f4d77f28bf953b7a8c7536d6449cf2995fb705d9b78cb2cd3fe4bca615d12995c7f4c4055acaaf18bc422f0c07a9af4fa20058782f3680bbb75488247e448c6cbb939b061500af2ab9a4164430d701295285dcc2c75b9000000b015b852352dee308df1348fe95011b261e97a9ba57c2f68531a089b95df7b7c96fac5859f1a54be60dc41413112d3568dab1dedeaab5c40ec3e5ce17169e421d48e81417bdda6f3a9b492e6e21547e1c86080b2a90301ad732732f41386076bb8c76a6ae8dd592657a66fef958fc78e111ae68ded247155b31ea26d6273fb1765efaa1ebf8dfcb4474404842243446f35124992d551426a327482c2fe225e2e9ce7e4bc5781b7c47f0cee2d73c8aa773d000000b0034cb617a0125391aa2602a4abece6148ac2fde8bac440717e0fa0a50031435b1df9a4a88f1796bbd2f2f62d4d4a0f3fa55ed7c3d5ac104c6d1a5f692eb818211e8e4c2be6844930b63bd5a01a73dc2214cfb82503f01ae83b9fcb347623eb496a1e4be96f9f0d60ecd2456d44a8ce76108233a3b5883e8650234ae81efa9d4ac18ac486975a110970a86cad63f9fe2f2d202172e34ac1c8ea62e9d2b3674314a556cad88a0efdbbdad2f51cfade77c90000021c000000b02bbeffa581bca906775bda3a296f1e0212178751435c37b6a5613fd602bc54dfe34f05019f886b1e9f5f616294a9ab8358356ca8e46da50190af411349c65d0c8a9bcf3abd2cd35c508ec724c17a1b193bdd3ea827fb917c0c9d29b719b89f804226b928f0506baeb550480315268d3b1fd7bb5f80e7e9acd40ba4168db2972c3fbe3a17eef02a37a359772687c94a1310aa5729febfd6c382b81ec37b8fa76f2e45848ff571e1b651c9cb46bb1fc842000000b00b7b2bfb00e1a2419532ff16e3ef8baa1900fe5f76e26a3854509063a6f71c417ed492f1eb912e9c2faa7f2a3dcb6dda87e48d298fda41c840ec23257d6b75825ecb22aa663bb7b36efb26caaff964f3eb2fb1683fded171c95a91276e22554e42e3e495864a2e8ef9cdd230944f31c708175306de378308dc28b502bef2b8f9c90f48a7b848279456715ca4f2bbebcd260e227e60feed18c25473b4fd23227b36944c7888e5862f2736ffa740a611f4000000b01979e57a329fb2c27eabf25ca7d2331dfe8a1088b7fce07d59a8d572e8caa4966595f33865fa1266defb20b694377e1d7adf85b472d73eda71a640cd47dc0344082801f8ef871cc7cf7da14316de66ba0c0a09bf7c1474eb42b1a28a94a91efb7cc0b38126aebc7d42f260bb3809401f165036f9b128529d6fb2247450e0ef08abf543cb27d714fa7ca1062c50acfab82d63971374222472ec174ad69a66278bea1eb68f3fa1d501d7fb8e25b91d9cd60000021c000000b001b1774e6a6b48325e120ac971d414f090cd2115c44327055b7e4c329c60326dc4f9377d8a28a1791672c37a0cc730eb47724384a527e215e261aad49bae9beb7b51d9ded63043f2f2ff2139bc3517b228157faa0af61b468b0eb5474149701b195de54214dd2ee5b7c164feeaffb1ab091e44909b8cf164abb10bf8ec0b8d50ae4af3be7c7174b458a47bc435bc130c3059509095ff7f22cfd231373809a0210361efdfba9039b38aeeda6cc8055945000000b02d45818bebc1e112df1fff5fe709fec62c66aac1ba2ac1fca72b2a3ed73e48772b2f439ab8d7f90f8385e721dfddc3556d366509a118e67dbf44c0a416fd350c641aac466edb2af3441bc8cd40eb294f85fe18d954ff2555b963c9d80672426e79a20f61601454b63fce8cad41f005eb0864a7901c060b4374ce3d73225b19971595ce0c3b0d8db338eb79e50a1f3f8f20cfc822e916d10d5c2b67c95cc994645149e571cf0643d705649cf95ed981cb000000b02b72ba7fddfd1c5a9a1fce8edbf91cf0800e24d836426220c13f7bfbe83ad3751ece1d2d2a5574cf364a745c947e8f36f86986cadd5d2515e1b42018f9420d109ad2025478b341a2009f86c90d52d6f32d086ab2ab0a0ff483301e952624108621a74b05d285d0455c4ce0a0c05ec387101dfc356706bc419897c01e3cc76b6f8976170ef04bb883c5e33dcaee9c695709ab7348f30c85a2a582f3e2085e0b3b3944442adce966f7d9f5dbddc1b428bf0000021c000000b02d44eec53a1f2a7e0aab0d73e82ea1779d90914f4689ee3c2fbd207d62c98a3565f1aa56344ad48eaa3c95e5e6b9525d6e03ae24892080eba79cea8c92cb7744147435933400233bc01e40dbaa1678fc7fe05c82de5a2f4b695bbee9642b76b39b794dfb5cde392bdf624f51c9ef6758155c5c8ea8c58b6e9252973356390a2ccb995833128c22aa6f015da14f9c1ce52aa331b4fea0f408bba510f7ce03735acbaafd7b1bed393e5be927c326a521fc000000b00d2a456536960ac7374b31b5e98bde005d2fb87fa293ec7fe97c1ea4faba7ff642e30f569e7ee770bd75a0fd84045cb3841af1f364584d1a8ab17fb4f69d69d7d336c524ecba7889a9f2b386ac0203bd51a90f2d4b587404ce1e7de320b0aa71cd064c2d1a9d0ca801824ee6c03cc16003646919829544d33644add55c51b408fb7410ab2690e175d87980ea8438547829d83f1669478a8d015f40d1d0ea43074eec4558728004d14bd3f032a56d9762000000b000b8880ac96a9184e80e0592155fca6d1b01e293bba979f5a759e948e8c736e587401858b8a70a6ded8812981c03df3f23ae31d7f31acdd996cf9a413665b12bb5fc234a07c29bb218eddfd5ce266d262cedbd0212332859d83c81e34e88e331da9f2c929dcdd7ff0e021493feea411016de15280428046422f8aaf74c4715a98fdefdc7ef6c8f7272d7fac7684101f51aaf10e9ab4f560503365a77e54e92974299fe250a96b20838177c5b6b487fe200000fa400000168000000b02040751d62b87bd98d2713bcb358524cb2ec5c813bf2c1cc71818e147f36b3e9ba61f1c6f2f2d2601ee131ebc8bb9c6287a80d360b3f4fa85a74ec10a12baa9b1fadc503ea33fc1fdb75965f31e61ecfa19ad4b92e48154c951f0c9b67190c19aa4f2bd793cff17bdd6355cffc082b27285aa7c457dbeb055f35c11a23ec2744ca0439c020f6c173f538f472128524bf2d2274a14765ea0216f3dd87d6ffd02de631131c90c48f38efa3d210f393680f000000b027b70fb8fbaf57ed4cf5bd233d2d5e9e038fcea8b0362660d3a2838b71d3aa0ed8ef67e9df996d998ebe1d5a94186ce68683443ce8d84306d710b632a5e22bc51ebb3e1f41f480a24efe159f700e8e22ac87b4c9b32bd1cbebe3ca3d66ca3f2cbe7f3e9a6837a9711be3a3a6d99e04c115586ad90c0e40dbf1a507b56648e647eee76cd9df3f63224c989ac92f2083790ccd64a6bf67a789b47955bc910b5f51e3e9924db928f94977d4900b92968ef300000168000000b023abd9ca0e4cca827fb59eb012474fac62f137202c679383477de63052a50125b3f640a0143b904bda5c99a222168e6523c8de339bf1ae6c8d424548fa6b354627be9c72c3dd73817e4e3a9176b571a3a65b1cddc0eb8d8f1363e9067f63eac7cf2dd48a18cf89e1fa55d75bc1616cfc29dbf81615e4bf528b2b4b7fba97850ce929feb63730b3230eaab9ec574864802fe055d6d95f03fd87dfb85da0ba2ce4b92080258d3391c8936de60415c5572a000000b01d4dcb52850927f5d168fa63eae6f3c30deab53c2224a38360f2a797e5c3aaaae17ff78f79a1c43929bc17bf58173c84f45a5ba08e8b72b71059a7f0fb8998cbfb07220be6bc4ff1c3f817e3956ae5b8781e0c27ee207451bf7360db418d3f627fef00e9f5a34e193c6d30fc605cc15028465ec8e4827efe7f660ab00384209bd2e41587d038975d14c1b29af1c06bad1a6484ba4326f6dd2c727da18c770a5178f951b75fae47e1011ee626ee421a1c00000168000000b003b49fb3abcc14372f256da63030edea6e2c34ff2b8f4929093cbd9d593ec40082f9a63456524640678f57f3eb1c397148c4d5422eab07c57b36e213fecad63b2629a9d519829ac6a10cb554aa7ef8df17885008b3132bd21f1105c5587dc90eeb82adb18e3218015a5b0bc2fe764b30272546220c63e890bf36f02a18a360b3885098fe256f241634bcdbb7c212902710eee4f8ffe8eba12f424070c018327f16e53308569e500988b11b9cee1ebf38000000b000b06aad91932ab08849f3311e131ff8f54dbfa59c0e5de6d702cee806bd3a63da81a6f7ca28ff1ec14be1a050b923f1964d3db5ee69ac58ece6883bb8b0f77e18988aa9ba996bbdc3208597471c9e59a5948b5f74cb6f276462d6b08c3c45f4439190d19c33674cfcfe427292aee00f1e1fa471cd95314f77d3778a19ba1d6fccd8ab8d69b14123c7c02f361484083d045fb1bdaa114e0ab0c40a979a7a3d998d1b753fda2d7a484a968283738c2c3800000168000000b022bd82350cdcbcda2793ad19a3c28ab7378e5bf6021b99dc6da8dc04fba44e5ab41a966ffd5ea573c758fbe0ab3cdcbf0b764040847fad005714cd1047276acb43b1c9a866e1e2932ab5e7293d4d68c52a85ff58b393b6ba0fbf94a3ea132c957728c96b11fb79fe45313e4d835221db1d6a34d535e7968a98fcf1019d5749598487d9d15dbe0a53da241d110e53e91402b84e50e1e40ca2b79078b035b8559622d74d7316897d450a161fc8595088e0000000b00eb7eeb7509ed3ea471d85caf02476a875a99fab2046b3801bb89acd7687f44039ed1c2bb2bd29f4624e7ce7379167ceddc4710481949655cbb37840f64d6396c09deb528ac6bd939646eadfcf3f25fb0328e42a69408ae31b1ed680c8c1d010fe716c0dd0fcd73f17e91d7a14446cff1b4047a5e40dfc94af482a65587ca88b00df1516e0fc427e3ff3b6446afac0610d522d82a98a0239f333d9da4436aa988570e60c38c3a24065365efe44ea17ec00000168000000b01906575d77cf7333395067f309b7b137c88482478e3e44f240a847f052d3ab19a55bff8e95f97ba5c9f5a092f49d437100b268a2ce49d2298a8dd4b449a8c372af4ab30121c7e768e9a3c4ce1ba38fd3e8c5537a5b57894b4eae9b9377b55bdb8e1e8fa45e8fcbe44481103d8b95a1822be8e790cc76943d083617629655383e88352e638b3c6d7d25edea8bbcc3a0120f32909021d1c79b96576bee489ef1ba5c2d39e3b5abb12810b1b805b4581dab000000b02a0d7abb0cbe256dc2f13ad435566dbb26512e191351ae5be0ec20b4db4995563c77aa8ecfd8260de5743c788687018ed54a8aefeefc515b4d564b6980376721e057896f2b6535ae3708d8fcbb859b5cf57a7ec03e952febdbfaf8b004d5883a82f57bec69e6a4d8f916285082ddde242ca9ed4cd696cf43c8d37e0d0676c6f36b6e12dafd4e6e8ecaf1ef683608775a20768901d3f0ba616d514b85d5383e6ee5a21fae928dfe9f12357504388a938b00000168000000b01de131b1776552a0b946c0317cd1ee5205ad03f350183305bd4852914ac0bf107b64b1c7043ebd5539876e3031527f5f3308aabe1588a98e60e76ef14989dfdf42103ac566e2d31ce4417ff69e2a7da9c03e18599feef53f477feeb59f871ed202ba72cab0cdd89e8fcdd312b41144992bf210839c120fe5fae5d591859817d3ade23a79fc7e8975e6ad8a4784bfe1991c4a0ac5d7117c4a4da6d1e4d228ff84753773991c64475844731ef43a5ffb6b000000b028e4ef7cb76d35b66c5207df39cf2fdd2ce1b55c82570de2d3c930064648546d1add13e8aea834c319069755ff2ed1b7ad1a40e2f046a7bea3be48616cd63d775799c11510edb60f8be590ea9d139add98bf7b17b4cc4f2f56a1c30e88a57436b69599bb6042252ef535ea0533d6286f10da0acca0df2cb29a28618685b9cde1a0aae97cb1afa292aacaa1dcbceb8b85233ecfb94a8a9e39a303eb7d3f889397be2f50873c21650e903e9e248d88361f00000168000000b00b16c4fe42bb9f6c881c83546915c589db9aef6724096575b4f71ff23b11f84703fa423abcb18ad9b435ef819fdd8a6bdf6f742b52248067564fb94816672a73a4614bdf26638652d9f0923a88158e35032f02e6375b05b91eaf24b3a76a2e518507f89116292e87e0d3bc97bdac489422f21d36db62d65fd337122cdaf83ba935ec4b5d0c95731957e82a17702ff7a41ee4fd22a79c51893680191ab038fa3da13deec7a33547f50d2ed27753d5e711000000b000d6e8c7416079f484a74604b80be94ac98a0d0672efa30b07a147529bab718880904fe81043eb7a16dafa4a450118d7a04442f8fffbee3a4ad08d540f9d79da62bc1d2484afb9e63980b57a386d2328dc833026b4e41899a3de77334325869d232e68ac06528bc349caf63f82b19673287d0fa2a9683a7750de4d2f211662aded9521f7b7216cdcd403983e977fc07d166abad8bc1d0430a35365c0f3406fe5e86387fc911fa5a707f87d3b51c07a4100000168000000b01f74815ea6117f90a3e0731d92d39cd6e6697a973367697904d0b37defd377bf8485a700cf7101e73bebd7b4f44c78b4967b857b60f424738043748ff35fc438b6953bcc343d5503635dfd6295c9e91645ec39b3d5748f9bcd3e5c3b91effded52cec1354ae2e877025f6304788010681a6afa97b036965801a3baf7cc1d830562692733c13e713e78842aa1d853faf9126f945882ffb5b6ba532537f229a4894df0732b034a8c127a83dec8abe9642b000000b01ed715efda5495421af3dec214d4a7994c7d47e693025bf70a1e8c91e27589bee889d0aad91c585d90e8ba6517be9fa3f10c96ec1846196357decc6904866e8e14105a44cba9cb395eb081a0128886bdf12eac1a16b43c3fd5eebfae318a14bcd301874f325320bae951b88a789f11ab02f510f8c420258f08899b7a6277cab9fe6bb18e4fabcdba8a4635fb7050eeff23e9fa5153cee0b355b4357a3b37dfd1435caae2f13baa3b3539ba239c65a60500000168000000b02562512a85bef00476abf2498c1720c7e3ee4acf81edcfac888cf527deb86216dfa23dff14daeef49315155db4e9075782ebf14ba4aace3308ab6fca9ad96fdf6dfda4476eec983cb88f824054a6f1e2a65d1fd611a99860725fdea7719c7f93ebdee5b5cd2d9e4a0793fb846134cdfa1627f873e7c11c8cf5e8c41cd8c7323535f758a2129b6d498c6b867a3d5f1ba71148836b75c76012b333ef786421f4c8d0dfa4da6a6248b8934ad5699a56a855000000b00e49fe37e3380cc6e036850efa8cd0f80f1d778d0168cb3bf367d331400fa6cf9be2d750f4bfa3f79b119c4b5c4b881cdd4697af764146422406789f0b9a57edeb32891a1cb45eb000333708e56ee3de863bba7b57f2662d7c354c86f90d200069598fe582b917d9161d70339cb8282f0def25d6aaae8192dc22befc6a129a73c428c6a4095812ef3bc787bb2cb547b9071678db16b1717b43ce6b2d6bf8a2f85d9caab75e848435d32bc857341f6ec700000168000000b016bc244a65c120bf5e833c0611245d6c68393ec6e707d2fa72164b8e680fa2e2f1dac4ded9a4acdba9a72492d012eec16feb1ce0e10e6eb11a9e4b313bff1e270f4c03e6952b00a84cc5605855f10d87ada4294a9c5b5a9703bfcd55f023d2fd3cc9aaa6cdb31bd0fc11c10055caf3ca0128d420c49577e255c155a6c148742175e549341dcd83645a22b641d09470c40983691524624cc2f467959f78f659481336ee3aa2aae365ca690e562f2989bd000000b01dfcdffcc9a4c8d09586e578e549900e7104f87b2c64c2403c475c0d9a6c63ef7f5a003bd4eb628e5846bb6a6cb95803b5ddbf15c176bf4b858c7af0eea8f7991c7e75c440b0b10ad1d19917daba90d10c63036482c0cd6a606d6ad137d0b9737e222480231b55fbbef2f274d8ce8c57093dfdade3d73716e37cfb43b95a84c37dd57b14cb019ab245e1f960f8df12fc1aca4a10a419a744c4aaabb3b697984f0eb9bd518c02fa5bac911c5e6224410e00000168000000b02b4b6d83d1d9e14e9565dc3f09963572338007c7e6d3d729b7af39a274800e81b3f52dc39f9235ae3ea81c52c7e26b5049485cdf304edd9beaec3ec0b2186d5fdbb53e75cf950953d3c3e8bcc03028c4a656b7ce0551cc2d5482a758c420bb6f1b43f3f6279b2d3e6c1b07f73483222620df3c2e6a0464e6a7e40e89e558cbb6b0675b1e7a5a1d84c005fcecb06b3779142983f238f4b0a1921604338cc5860d2d651b5a83e98743d439ed211a208253000000b0186bfcb5115255107e585e3f8ceb5a98345442bdf44a29a5f88b5469ac6fa5200093f33fe1e532c3077c6309da17ea6338deb9de1436b6c3c455d621d07450fdae9de96cde038b9b507365ae366a8bbce296001ac7eae6e21accb8d4e9aca4ef02015c2c81e4b86fd80d63e971bc27c613964d8e259ed8e371f1a15567fcd3ee4c66c35934b50443700e256780dbb08c1f520718ff33349456c2add9cd81903d316298bfd102260fea361dca10516b3e", + "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x0056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e021011" + "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x632b334737f23eb073adf0bb99d5417f9161245c", - "feeRecipient": "0x2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524" + "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", + "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020056315d16c695b8ad252644f2eaa202fbf26d3e5cf8ac6d4053283d2e02101100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000632b334737f23eb073adf0bb99d5417f9161245c2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524", - "publicInputsHash": "0x00955d36618cabf31e481341b1cd8e781ffa1404d45b741405ea90cdcdc8e78d" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", + "publicInputsHash": "0x00baaab13a492808ff573674e84ff0b711f479e3b98da9764726a26648c30bc9" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index aaa6037cc5d..9786088eddc 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x21d1706fefcddd2901d7d00177fef49d80dbe804ce7a9f1fa354c64eca3532ef", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b00e1b92aeb4f6ff636d067cf963b506eb8daaaed4e3d4b547f3a59082a697964c5cd08bed62a98b809bbd6c4596e99364c34ee318c4282bde3ef2f12505443891621e8d79d16a3d31d8574bf15dfb27045b044c692aa5caae7c39f61ebe24fd353de711f388c13118ee426d2af2dae60011d899159433bef9f74095806a87f51e7ad427a89736bb4b28a4a75118d742a00a1f2a2963e35e51b454006974f9bdb3d4e45334527db5ef6d0f55d68129219f000000b018ee93db05aaeca0bc438f79accb60da3e1a79d735d8881f02ff358b3aac5cd2a42a8be3b6984058f351d88224101fd8b49d254b26e14746cb9142b8997b492b6287a0760d4d3439d034bf93639170bf4733c67cf40721e1963efd81e760a5fd33f5c79c633c7e73c21d0abb71b05e580b644ca05849ba962086f00957c3992a5411ab2b6e79d70e440134743b41d4810a675863fc64852388bef37e0de0ce676e9fae02f1c61deaab1e2ba0c56c83dd000000b022cd65d66e9efc3981584e75ae456bbe1f4f5ec8e65f0ebd24c807f79ce8297b13680e0e056dc0401a606f5155833cc726554656ff605f7c87653bbd165c7533ac86d7473b24e00f797609a872b22f8af5e95e6b10cd40ac63eb7bb750570cc79fdb75a7adf0d9af85aac1b97e0fd1b723d1be869767da16cb99cf81c6193b46aaa62cc8dcc9de66eb927500a3f17a3c27696d52f9c2f2a5a56228c528e2d16f2c6220483fe071250a41fc44eaa59bad0000021c000000b01a76d2eaef4cc75efde6f12acfa09122e500ecaa2f7ea798a7faac5bec90ae778931f6846add220f107528346ee6d069d169f389cb078cf31e298c622905a2ac0ef27097f773b415d18c67befccc19b2d2645a0d529077de773fb0511f405e42bba8f91f0d1bb288897972ed1a43d4b3071bebe327c68569cb16e155bed44a2aae7fd165e7f73e1519eeac5d482abf7525ef1409d2aedd2fe026fe044955bca93ba55108670d8a2809de9a058e485675000000b026c254c3555cbb962ef8b4b233d91d6df325963ddc4694474ba624f6dbeb1ea3ff213e0f8ca7dbbef2b7264998e30f8fc869b53468c3426f618b53c84a03f1254fe897da778980a7e205764d1961e5cbf645d3ad07226cde4baa102e7dab819f1ef43c7362571d1659e07825d83ec43f007b7ec45e11ae7718b8912b4222eca1db39da1718ddf5d9bd82a114fc883a151ca3ed46b7f558a36167435f70174703477e36461b32c3c4dd14e416dba903b2000000b01a09a06eb8594185b636f122cefa44599cd695fca44a8c785cb5f4bf35da8d6254e16a208f55e8fd73ba1325f304edf92545800f0596503654a7c2ae07ab8cf09c144b278a8e983d42532f897c7dd01515e9229656df3059dcf1c9c66dbc4385e9ce831fa3e2398dbe9f2a000e37da5425e87d234fc430c146e89306d600563d1d24a589807fba8d396fbd3e5459460d0d62fff778168f27e7c2ebfe8bdd21213ebd17fc05ea98242f368189d3825ecd0000021c000000b0197994dc73e77f90be3fe6b7c11e3c5685148ae9d22248ece8039c34e418ab3aca58c786751573e2f7a6931428762f19988a2a67f19ab9a681c6a9ac1c107d8b58367998b5181e69f39e593d22621d35b152038d733ad2f8a1516a9a4ab1cc44440194380d79f29b6f2dc9cfc2684c3922339a7a38efd0d99b2d240dabc547af57d99d95fa7eaa6236d0091b2c369e8714a4751c94b608635619e4ed186934248b56c23dac5c23b45540902e715a17dc000000b0163a195706cdba88cf31b047c8bbc7f9d6dab339df5c7c38a2fd9be63f0f5127a147854a838c1879bf2c06ec50486cc2b95feb6dd5c320a1b4b7399869072a8e3a4dcc0d5b7b4dd561e3745e305466159fadd485e33e227f7cd888f2ba834d98b031ca0eb3a2e2cc95c64314e1c887dd0b514f7ac3a42b413c3f2780507f9e0efb0d375266cd87053ab3a7f53c04925804750fdb4aaadb3432df2256de2e0e34a755a661be66a849759f39caf8dd4431000000b0068115bd5c3c619100a4fe48b9c81824a869e131307e4fa4a86060fccaae342d22caa0df8fa1e39293ad539a1ae8bc0794d4e70e8eef042850379ad045ac48930d403c9baac629e25f394292b99ac6778922d9e2f5ec0afeedf9842b7f198c30ce8fb63eca47d1929d394593ccb0e6811e4b712a9d33082aae0d023660d255e4464247ceeffdcab53406a5691c148712255da5fbe9995ac208b6e3144737be75bea5a1aa1bcf3a6be2f7707a7e9ed2740000021c000000b0214303cbe328a01b94b52aa0874dcb7df502d0e3f68f4e458eb24ef323c3440a4b68def5b9f35647f1354dd8aba1dca47fc9320a95b369c10455d22a87fdba35436b6dc013092e1dd91592e9d69fb8dbe79a7fa60371fbe519c37c9f340fd57da6a0c718a4847ed278ae9458c92c47c71303eeca0c3b4fc9c431428634b14c2efccaad802c5da52a0fbc6cb5890fa9d00ff5bd6ddc4c78b1c250d139f5d42763d69cbf476ec3b3101cb24b98e51d8a86000000b0276c5eac3ea7134ad9f3e84ab4abefb0ae862f5c6ca094cba177b97b541c3c2160212b5490f747bd9032c77ffab89a177d173981f5f254910289777b9c9abe19048526483e0a38a21cc34923aa2d138e5d9deba564df9e8f1241180771a2593b3c2ed5bc1ef94740320df370be7414481cfcd310d2086c3e5144d24bc52256988c3c213749ac1de717984940b2175cf426cd05d53464b8cf364efc9e12fa0c80b5c8afe140f6ab3e65c754110c4ff187000000b0168e23f374486d9550ebd5beba2e549ececc8eddd64ae304e3e459783e19244e7aad6d0692c92d38c8554b57c80ff2a176c6d62a91371b9420bf913bea0596ddf8850589df123ac61232340a5989196430fa14551770e1b5cbfc8dd3c0e204b69fe50cdb829445615a52fb532957b313222f369fd353f145db37c104685e94fb0ebcd4761b1e13c0134b3c66f48987ff1203564a2d68fea17c45ab39c36695309fed32eed51d159a8e2e25084b6d86d40000021c000000b008f43d0b4669ab3f424b951fe6675b618dcdeffd57e4d24d08e9142aeba8e0559989d2cb35b6d9b1e3434a3c28381982753ecd3edf522238402b2b5bee9e59b0bab2c3a4f185a2071c4e4e2bfe4171b90da03bd00ae1ab13f3d043f4a82ba86a458533fce4820f17597431bc0a1f06aa2ff8c24f51505f6d3554bff055a3d5e904cbab179460be57438df9f38ea196c4014a0492ea0d632d7c8cb0da47801dd98c4291fad143d7b92efda7f79cca615c000000b02b8f6ba943adb735e25829c7c912da203797d85d1049b81184c757b90e9663dfabcd3362bc49b91e2bcc27b010b8eed83262b0fad73ebba425722a7fe1a5a446a99090884affeaf9f22d9c4f0ec6a0a5255b80d28640fa32447b7fcaa9f7e4c0f3bf3656d984b11d6c580d3273261329285ba585b185c4901d5aa189a5a486d844a78b8cc6739d59d58b6e435ce7e4772b8de0a5292fff086fbc75e9234993d18ea74fb55383639cbee9201ea0575117000000b025bf483f7ef17379795be2ac775f071e0f7aba14541dc01fb688f0e3d437783d7cea1c4facd24302f9114ccb101fa8694a80d1cadadc472cf7201b2365169be9e67927386b510f85fa40c005ce0848f1156f6d25934eb46b10138b38b19e511068be65b49bbe93d20a780072738ec2750fb80acafad408d215f0c8dc7ceff769319edd61880d9f2e6b8ca96e6a738c1b1a38666f228813635f44e8e580fa191eaf1eb001149a7d25accd984cf4ba1e430000021c000000b02c841ba8cfe20283966b4a96f6f079bcd507a2be722b094ef9239dc47ece6e76fa554572ed46306a9abe76e0a065301d3bc3c491ad4849e487198b328014ec5902c91e8ce51a20a661308f4b6e83b65a4ee61b7047d0c73fe92b3c3c01e218cb06c32d62c41227a52eeaa54d4a295c2316407c88517ec4ed5bd92be6a77fcb3d46192107fe06e6ee784b3b4e59c2d3a604a3404b91e7c581fa8bb7921e2215d8348715123f1a66dc72a0ad96230939ec000000b0002b5d2bd70db6aa345245c1186c8492d219c0fd7440f8732676bb233fae3be4274424837db490fe4ab110b295a57090f54bb08b8dada51fd7712e7d816a6c220fa5185a2be4557848be25c1211fdfaf3116b635711bc85f307cc645ed7ca3c753d625aaa5bde74df5e2d6550475d34505bcbdce580b25328d749545529dc62b9fdddb5c233ce4b6d44d3cb0761dce78144d790ab8b2daea26a762288f5bc70c40d67782ebc96d91eeecd6f9cf6ef663000000b02e4f5866f023ad0a26890849ca5a596dcb9da0c2135602f17789f08423ce5eb20bce8c2581323d2ee6164a065f2bea40be3eeb2b34349904446fcda877d0481a4bb5671647a46edbff06ab057b04bcfd458bbaf02593f777d6d26fc4ca62c8c40d653ddef2b412dfbbd70010caa787201d56b9f052c4914641a00cfa1e3c509212ecba7e96f0dd6dc1ac4f12d5dab7f22a12fcf2f17b40e9403174abc652ecd936a92ce226fef6df7059b5deaa7f55a60000021c000000b020075c286a7175bf8cc691af46e7bee81aad4d089c907960e26ea13ff718f751ccd9cf7cb5c36ae3b6522c71b2446aabd1085c5245cd71184530778d1f8cb12cf91c97789dc3bdd975b43c946f60a3f202ef16026ff3a5086dce040db0b22534d190adc86040c95b56a296f06cf8c05c0fed0e35e2e39cf41b7d6eb0abe55a87905358a99e64b4233b05ffd9426382ed12478f351d3f267ad223060152d4579b9b716d3dc63974a13d3bf93eb0a4118a000000b01f3a898d993f72136276fda067a04900e835343c80c64cb458da48c187e2909cf42115be04e8a768545fdb91f7ce053f846d22756830f52c93ae27ecc1cbfeeac825ddaca844e62540186cfa29e762e657a63a05d6393ab3b0bcecc115a4a6489f1fbc03abaddaa78e8373f65c18a52e29c2a2519ff2ceb014341968879f8956ada4e291c8d8bc3c1f325aa742386fb2128c14ddb347ba0645bc1d8c2e9eb5bdb599909f959dde43fd93d70517221924000000b01dfa9b334d159449190e153a6ab03194bfe6f2cc281c9c7d41d21bc99494f805d585602cb73dc343d5525c708ba61656925d51f820f6975cac58beac81f98637335aea70445f7140a408696b6f2b28cfcbc33c0f8936b2fc966519ad37598274187f16d0220e688effe0bd7e0c0075a50022f0a6155995f334bc3bb1b326db60d3990cc1edc18642420716b6bceee22d094d60dfc2a265e8dcd81bf3c60deb9e32a0c735b1a895e74a46689e0b271fe70000021c000000b020f865e4efd08b0f979cdc2ee2b8e1af9bfd79b07ced81ac6cfba5d49d97feb1863f1a2eeb3bb04aa31a7d5cb0358cfb8e3352831c2f565a32f5aeccc0e66c2b4b7ca08a0b5ef4a8f35cd6a91174375089656048dfefee1de7ff1464ae6cde136ef617033a9ee7921b9088ecbdb349a42ae76c922c6e0f56dc4402061880fe70fd7954fa1e495bd1118447f62e192c630495aabdbfbdfc981afead608bfc96e6936fcadea3fe1a0ad6a5d8d57d55f56b000000b02731600559966c1b6fc07c595bd0c2025ecf94b9f7d8bd14fafda8b713cedb0a33c46f5c395cea4127abed3d322af814c19d77b9f18b2e22359ce8ee64befd392d5ff2e61a48cc9fe810f52fa9d96ae6fcb81ebba7fc3e7634cc9fc59135c8198f451c23d10939bfb0fe53c34ec79b470ac5082e433ef66104a873a129e0ceb95ab1e6da0c491776b81a23b173a963421d1cfa9b6db47dbfb3df051cf875e66e19bfada7d33af03c1c69786686477094000000b025fd3297c0ffb6ddc613828afaa29e09b58cc9c8c305afdbf79e97ea2a31e2a070d785f058533f2c84bf6435acdeefb31d134b4b69644de8b852d74d33a8bc5a021c15b5722075d63cd8a45dc9ae2136afee62c723cf56f689e94fb62900db4a9efc22bf43dacd5c5e19c1f2d787ab0f0acc97866657b1a25ce575469113633f42fbdf98a6ed3b0473bc201b7901da552f5dc128a674a2f5bd83c93659e7b2a0de6e76c388eab46e592eb5bb76a8c4a600000fa400000168000000b006bcee580f4040597de276d77dce32064e23552e9525aecfce12d3d2fe14104438de19c1a5f9d17c564cbf903387f904b5209d36ae2a138d13a6cbd023c9aba35df0520f64988f2b12fd16f198e6e5a26f829ccb6fe1bf346b31b012296579e6e18426cac7e576357b72208ca48e52a61d78c8adacd06467cc3b233f4b5f34392513d9bc6063074ed81f6b2f7471430a14575d27a89a5d80430866c290f91d935f0c0af96534c1c03d06230412818520000000b00313430b17fa00bcdb2805f7541d8586bd3d3c5385ed2c4b93e77c47a486470fe30de63bb73b3034c3ca824795e1a5f266897ad7084884ab66e001f85ee2dc38fb8c10630632bdf4bc331bf14fe5828124a4a5a7941149aae883a3f16bef0ffbe5ff48adbdca09d6409f9bd6c18613332a6eccbf3380042c42a47ddf7bb3c63c1ff23e00e9f24029d448c683f6d6724c22b816ca4746d4deebc58cef1d22359a03adefd4ea540ae0aed190212cb217c500000168000000b01386884e2489cd245877c8e2928ed3a584dd9081e500cc629d566b537920ceef6aa11c74badcbdd61857e4709120b61a4aa1a8270423e451aa0295d9915588ed1406ae02a1a5891a12cbf473b1935ce66ab9cdc0e2f87e28d398c1fcd4e0995b2f4141fcaabfeacaaaf206e501448161088ed875cc0ec776283502e85160ebf7a38f5d374d7f58508fa8db9ef8c5566c2f1e05b66856da83d9ef0668bea6cb9825e01de77b16d8f06cd10a1871227a08000000b02969e0f011a3e81a1bd519d86084ebac3170d64fe3f1af62d9c60e794443b585cfd6e5c03967eed673a7449f8639d6cd996b7adf944553b980bc7e114c5d4d34e96eb495c8bae3d1c910f7b05ea1563cdd889dad3911e5053ae784e1d9760d7f2b3f8934a756def296205119fa5209cc08552919af8a4d6f2b8840022d0d978fabbd4ccf23dc9af74a17d6ead62a764715ad79890ef9100c10522d255f9d0e679373656ad1166056653a4d6e9f9fc8a300000168000000b0285ee030b4dbd4afa454db170b49862d8a73d23a4ed8174fa34e53b73903c90cf63e314ec296990ca61e2a5a3a624335a6f8c2d9af04a73a9de5ad30baabe05138c904b01192fb0ccc05231bd7756192ba9d8f642862aa21a98ac20226253289be31efb62ed3a0af2b8c6d565c06327e0b496acab32ea01777e537abe5d2eefb30d1fa7ecf94e5e5cf98840b38e31ed721a9dd584689303d97ba59e007493e7e5dfce78e92879e9b808a78ad288cdd76000000b01a9252e836673d550ff6fc64e23f9a092faf27e21eea3dc0582e56b05d2d9ab5eeecfeaec3f0f95a49b801b07130627c52d63116f8475d163b379d70818c000d7cfb8c6b362d27163d65886372a88f2345d305c27f1a1e9cfaf3aff6a2304a67b4562d83fef1f784837a0bd154c214b501994a6624b0eac7da7571642f7245d7afcc7edb441d0b84108179d4250372a027d28b78f1fad65f59ade05f6dd2fa20fb3eb9b4ec8e528c3117dc735865deae00000168000000b007dd66c72ff18cde2300cc2f333abcd45e91f6796cdaad9440fc1cfbdd64daaa720efc767ec7a5d416deb70b20a1e5e81c0d732e9679653230190cfe20d2e3cc6c4bab0c5245d7a48f59dd6004212d017c5170cff12789d4033aaeed4dc49a52d4e65ad2423f18fcab59ed76593deab8117f7f8c13400d266461700a0957432c552051a8768472c1e9f4dbea9b28b3d3149e30db2c43eaca0f0726e7ab2ef8d0b9e6aea1bc0cfb05f7bf4ec19e0a320a000000b02be64f5ad7cbd16d0a841634eed44b88855d6788f7a56a17aa0825751008cc0587a6a87b8a4bd52c3d244877a9dec10268df67da983789deeb67c71a71a9ed1894ee82205e27ab6c5eca1d2719749fde4e3d53d0bdeee9eec979cac6bfed81cf2724f75ac02f34218a78c70c782444872aa79882079b428b5c2d35446365d5f6de0c3c748a2ef196e7db8b714ef4ef472b41437fe6c60e4423b218bf6c229a372530fc5dba445531cdbd08ffc0d64ed500000168000000b01acf79bcc0fcfa2b4e0a4fdf9356ec4067e0bb35bb9e1f701b9678f0288b1efe981423e20d961a0e611103a81359b2ae9e240e253c4f6533239311fa9cab7ac0e54a560448a54f89ac40897b3a5fd67552e706f1e7b5eabc990d5405990a4b639e2582cbb512485ecdcb6b53858200670c494f8b95ff92e8326febeec6e92a32633350d8c35385b20c0f6a8737e603661b787dd7c01fc00e80e7c8e798cda8b6cc5023a927e1cc871f07e0fd298db27f000000b01c5ed0d0da47b9939560715258710888cdeb0ebf88df3d7e929a104a84e73c6efabea8747494b0ea2080809b1025f780a1f4fa4dfedf9288561d2ddfaa1eb0a92ecc3c7395d8592b4a61e2c5d0f00e813aa4700424a220ce7bf9ee90f3ef6fd6931f53a765f7b8aa6b6fbba66a5dfdfc10c7ea658742eb8aa24e9f072edd971a92b0673057819a735b5b0028ac20726e18baf1c732038217a9b59aec6b54a7f8d150e26f5de88b446fe8f896c0d166fa00000168000000b019678c4a079e1f8d4ca5596243940a49d97eee603b8cb27d81be0b5c2b36434d0c9cba359f4e33b2b6c9873c2c7d9a72d9417bad9f019f97c4d68e83e8701cb1838cb7d148371b5a0af0ead795756b1fc867794a9a7d94e6a8b57fc31b0feda677a93ee2832699fa1b83df39a66f85ad12457f28ca3c91ba764fd91226980bb78b106a8613382cd4a9fae438decb8a992c501982b594aa28c81f336dad8e94bdf9deef400f3a723b5303be7548165c29000000b00c49bed8fc3ac5fddb47405bfaa9551105252783843f2efc95670165f1beab01c46abd95c112a5f232fda173d521e88ea959ec4bb9560eb980b0ea57eca3b8eefec8b5273fceaf3ebc083d37804d812db01c026b2a785fddf82fa3947ba61b7713f079c25020516928025d758aeb9e9c02452a6eaa91c633806003cea3569e6ec1588bf65b0c670c6973b660f8c39c591a2437e0ceb6689b6c1e2a4d43c663777ed8d4b1772acfdd637aca57e7fb9e1200000168000000b010713bc0e54b8b45d9278fd7497b34c0011dab04765840a08cf9c5ecef3077655acb257931a0458ddd56c3ce97400c385ee3a3f19d703a490cee1758ce5049e719357bbf5ca9582b689d958fc65d305c008c7cd1bb134801cd143478f5236d437ed2dbf70775d372b76420bb061c4ef525a7066e22ce388785b5cc6d0191f4f74f5f39fd08852bad874a0dda5fa5dca82bbfc7ab3c64e00ec4b51be95be96e9569034fba466767f916393917d38ae59a000000b01f7f07136bccd28fd7335c4928388122c24412c0e9ccdd171494b314806e591091b1258e917b7bead3844c32d00f46563f25ab06f9cb37193058884d55a0672c9e27ebdeff46bca26b2bf58b2eb596eacb9eceb158f24d879585729ef604a09f4c2464c7c7c4881e924e917853051e2a1ccc8dd4f9ccf2bf48a192365f181b80d0076a9a89e585941c30536868c0179603adde2ad7e3326ebc8f819985fbf8b4ee17078675f2729276edd1ee86370e7f00000168000000b019bd34d84fd814b4bafcf995a5929b34f5e7c443fa56e9d7b443c50782afa63aa002c982c87028341a7a9bb6fd2fdf7b3ac020789f0aaf2d971b0f6a443067474d52b4cb3140bdb5f259cb35bc642b9a4e8e6ca3ea2e5942b9800d54976cad627cd5879bdd4ff1af3b7130a9d8252229125030bd4225e7d3aab0aa1a99b9786573908473fa8db7e4466d1354a3ced8631d35ed159a3738ec8b1798df4681d530a908fcb317d4a31e3e4f92d099aa117d000000b008d9c0cb8decd40aa78e9908548ab6e3eb3ecdcf8739cd4f8a4885665b5f08c0bd3914eff923600dcd45b4d7d3feae38a0873cea6e6e1cbb6f6fec7949c0d664cade1abd1afce913e1fcca12e34292b2cec8da143b570b7d8eb50dde424edb63523f4310ef70effa096a89ce7cd8041f26d971a5856d8c854ab23ecfd3c695d077baa8912877a55db866ae6f1ad30013187791b96f726f8371aaae688e772865797c6e21ee05d3701c73dfa31d54d3c100000168000000b00da0d70ec22c48d28a2bc9982afd44fbeb644a28ac6fd3ba3c4e14bf65d32825458af6b63dc14db86a9d00e9d1538e32c878c5317c60b0d83bff85d448f0fe5b9eb181510a66b1b77c9506227116268c6518d276c269c8396749a87709127b1aa58a7b63803b0c98a960e1d94991a1e804ac6db7c6f2dde49d1832990b03443e44ef1ad81b0ee36f82202242061988df17cf4efe6393b916123dc8ae5316146e5944943a03ffe73ec8fdb69054d35bb7000000b0168432ba31093eede51052be7619524f355042ae8b8a861a87cc953f221af9871f56bdea642133222ab762723260dd5465af99377e28ed8d769ca7c9033400f7a65202400c1e5e243497b64520c5eadb247d609c4dee69d3aa2742ceb8abd8a93ec327a4e8af0b8257e0f4a332ff9f34303d86c376c4c259d8cca910e079220cc36c1de150dfb03b0c0352e90e35e15006653e0401840815f3d1ebf55b9fa17c48bc35cf61b0a9c35f7c0e53101d9ed000000168000000b01c400eb5b05ce2392d1cec335ff49edf25a9cec5690f7e26478cfc319c4ceaf25e27b49bcbd4cc4b6c1d5f132916880e27b59cdae652d3712be9cf12b2c63799d525545d8df9f607613aecb5bc8506293812734fa0140792e6064ac9c9bada4003cfbfb1970f42657fa7ea43f21521f72debbc738f79b8f6009da59c99d6aa5e8d96fcbb8146ce2fd6d9232a9289c5b423d97bcef3f15e1a92c43932ffcafa7b71f6e8b2d418cf3a523226c9ae73ab29000000b03039b91be76dc18db6ba5b28659dfd018f06f8acb36a8f52f4739306be361d9f6a0ffc370025e7a52f2af7c77507f40089d3dc46e4f33dbd2ffe993e3042dcead25a15ffb87d8d55a8897bb17031f22f18bf4e6b0e1167de07e01fd2eab9fbbfc1d04c05e89c2938aa78c759fdedfe962d1a7b3125e749623b0db3630f22bef524a8209b5b8f0d267c4488c3067d8a221fa0cc9224d8f4d1e8266d20267d1f0a9a63fa4da77440e34b59e4bf9a0655a700000168000000b0022512b8bf6b08d47747b7662a9aaa6c58132407ae7caf275b6bf5953157b77220fd76c4d77a390c11815f72d7d4e3c1555b44f8d8dd0dd20b94fc8fa9d74c2711e25bc73835001ae8ce1f389cf0318902f464a97189419873e859bfa8a6e51b90630a38face5ecaf379c8d6a6747a362c22df41d0442b2db4c476e4491780d94dd413bd9049a65f8e3565bcd24800df097c4449b1f5aec71f7d06ce595406e47988180094a282c632b00debb88dca6c000000b0092812ae18eda16c4029c60ecba2b9a7f0e6b428cdb12c2249cb9044e572843b808021e1fa37283a7db97a02b82ad61ac438b4561de65c26ff4041a5a8ed9e8eaf6172667d503cd008f6832b788f1d6f6a870aa5db99294b92ddabc2418dfc88bc02838a39145f8b444ced270d8ba4960f7405a559738cfeae8bb1d3bbc9d78796fb6d91154d3d8fe79ce754b14c11fd14376a26352deed079818b00dc4fa7c61a6a9c05bf666aa007effd3fecc7fbb900380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b0010f56f3f33b4653df681cdc308df73d5da306d2b2f41e3fb5164d19dd2ac7cd08fb7e160deaa6e191b1e4161ffd526edd32e1ff77e9de498bfea9a7db704f5073a0b689da91b9f2cb11d29fba463ff272600721c4f8623640ed04e8eafd07645a3122f51f97a0ae00face5fab50f77c0aa8e26ec3869c860dc17c09691fa100fbdd940366ebeb32034e0626ea81b7ac0b023aec48bdea5ccc37c97392b8cf3e88ead80498fc36b1d231b18769a54804000000b01c481d58b39e1219928429c6dcffb011c23357a9e3e0ddf4441a6bcba8fd85a7989509b23f7e8392e117bc186001eac759f0057b55a515528e79a3416458e598ea02b1f013b6e10b536b71d455a3d332a8678cb712bbe5f548fb5eedb81be558bf153577e6dc9f444b6740ed1ddd66622eca92e5e3ae9b55258271f58480aa0aff121370c6ed1388a5d129080f81298b021872d536c022556169933b8d10ffcdee441b8d8ce32078476e6eaf4f4997c0000000b028945254a37bef9f20a4821f2b8e5b1341ac0156c39b3a27f6a4590c06f1f2c7f800f6413c1232972c4834d266c22121d41dbe053da8b1523a642e6277a3c17132fbaccfeedfc76a1ff187b5d218006d0b608dbdf3466a4d3f62e9b4ed2ab32102c37bdbf45fe83670fde95fef958b7c1d441a4b058bf9938c201f8a94d36841f7b691761f29ab0c1c5bee78217e3be502413d504e83e65d8e8c629a1d378933a23d1adacb34efd96d483fa439e9ead60000021c000000b02d61a74d6e63674642615306439f126d066301eb2bf77908551a747d24168daec98f550712db5bdbcb11fce3c729a40cc8bbd414c70bdcc457ed49f197caa76b770b237266eeab9c95dff27f06a4ebdd6f0da047058f5a773d804672a5fad14338d1ad833e013dadeb2c24a62e4a859b2414a654f51aef1eaccaa2b080f1e908b9be5b39720cc1867a9c1de4eff8d8ef215a92869e6268add31b342322b5fe382d0bde22974297a7756ca4ad30ddb6fb000000b00bbd121b4cbdc2fa39c275996d1c38bc46f40f3a5ebede6717502bb1e31c97f75eebc11a6a7701f67a26b185cbaf5615ef4d60c00f9cd53c316a43dea2eb65dfd2931f3dd14a8bb4e423a15c3fdd3068a728b656774dd4d83dc9fee7da17b671b105f6145a64a87a4a582833d5c8943c2501e547511be02f8e4813465a2a2096648402b449870de59550b4f0b10a05ce20b8f157a72c3db5b072b53a04f0edc5b5b7232688e9a22bde593358c9198363000000b020e156f7765bf1b5e2b635f43f3c75860b73516a1dee8c2e092eea6cc9ce3dc84c83a787d0e0d75ae66312e68d73994f462b9d06677d1e38397e0ea9759e168909df2d9ce095ecf8be88ae5f3f4f97e4f20fde7d42eef76d14766d072a191b40d42923f1d318f1578dc7fa5f308146b40dd6f6ebcf70617bcce7c55cc02daab6d60183845d82bed2abeb294945e98e092380aae6d61f7761a79a14a87b655557f10d132d09609d056325db1593038ca30000021c000000b016e041519fc09b69c67e1888df6dc098d533de9553705dbd744b85fc9f394ad82dfd10ad58995a3afb43890b27d3115226d291243ec7fb6586ab81e89f0a0b116f955df93a71acbe11e3cb669d4e163169527308e0573c7f1ddb427e41e1aa23ecbc6fa75ad2408aa2650926eb92d8e024c2ef323bf457cf0ab2f45a56eee9e37403bece577e05da32bbfb8ce0b38a8030261916f22ec66f3f301d8ca350552f7ea03dc7710b5f493564765e76a00314000000b02002b9dc81ebb18431f14973062e6d4b8e67f3bcfa29a540f447c578a0cd9944b8b7fbf65e118e5aebd92275eaf1ebe9346257040f5597b6af6b59cb7525618bb108a87e2956232e47dfc487dc738e7277f4bcd9b8224123e8d93fab3f8cf2e26b91cefdc7f6e6ddc3ecfc6400f4e50616038decfc76c4df9ddc7b183152cbf14e14cc547b46a177c81f9e1cd3e722de17ae01d3d3b6567d4eef8884f151b22e6f5d688a63bde272b8f1830c821b44af000000b02911f032db35d86a2e74c41f0753d0231c508e476428b2b315a95174f746e155f0bee2560932e9cbd4b2ab0420830b31e194c3d438ed2ce83b234357c96cfdd411e7fe8c6d0d956e75ab8f809be31713ea19cb4e79fc2ec6cd29073114029bda226c9a8d016269d9a860dfb9a908509a2eab97ac92ffe1a808ea83e4405fb7ed247556a906c0ea96f6d6679f2a8e2e582300a6d60808242a36e5328ebafb742273ae4b6afbddcb399f83a1c9b256ac3c0000021c000000b0080a6b9aaebc4ca81f00b23e6e3b12281dcdca6c7cd2b084422ec2bdab5e4562f671b2bfe0b0be48de7f0ea19cf9c41ecfd18605b4401cbbdda5c1fb35ba9241c55f10db0bb32a2d5b751ac321bdc9ee1e61235b7ffded3fd6e0c356655b29531b907338555a169d828f344d4201f8031573f24ecc80608de466c7f8cd3573d149cf3e468a9dba9a410bc2a998dc5cb7190516a918850c4998cad33da28d050ffd660eb9c3f7edaf0f0d2b7d0e1c5044000000b00c98e2987dd40a8aabfeb0bb2a47de12886a6a6bdd385b38e9bee32f1cfd856e7292ba57faa8a52a8e010217752f5fc8c8b6c685624484113d34bcab1749bd0fdbc22fe9df5c8cf98a033b35568542f3d254755ef0f947ee3d18b5f9931efba4e0a7521727dd971d3a074c52ab86dbd914c2d77e230ab3e356c78e2cb53c663d1a0f47133e07ff122af90b76703184590785903c281935b9668162a57197d9c219bfa0879ca32a82707f74106b255590000000b0096404b01f51c729e13f9b95965d98e653dec863e5be1bd4a8a782fbec2e218fda4a93ed93e0f98fdaa8158bad66d6e524cdaa908f1d736700bc0532f29bba86d878f6babdc65564c4a3c4836f9630ade47109a87b68b874edf8d5019742de654847ec0f7f1737dd0ce0f4308b58c27c0d5aabbe470a8308b53b4d04553c72b492cfbd92c5cf38ccf4a505887cd9b84e030f5fcbb105d4dd9fefa29f7100d82f944ee624827848ab2da60561e1ea65220000021c000000b02e472be79cdda0d1376b936ad542776422024211f572f33cc8dbe09c6aa608f890022e2063bc3090b17b1f8e830e0808bd9e48732257c5642dcc5d31ef39c154186fdb26246912f322b25f5e74dcca59bcd442f9be8f491d730bd58e7e099cc0dbba6109fe5eb6cc58488e979bb5709515b9f19b56c7adc7aed10d537f4aec7f1c5ac817e4b682a79cd8f341a7db043f1dd3a691ac10ff8ee15f05dff769d084925e49894bb1f39a5c124854aa8080c5000000b02c352797d080dce903943c97eff4faf2f569d4d9321b6ca7abf7c069628fb9c4791dafae863f177933ce8e0487f19d3a872e928cdd0645c826be84c86dd2b7df1d3c264b35d943495929b98867b20dfa86b913626e2f9af47b087e05aa8f29c330028f0f32a91652d432a434ff9c06f62d1da5875a2590a3758e18be257c202b28918464dadeb371fd97d045bb5526f406a6abd63660b043d23f6c6ce034df82dbd03b6039f7ca80178285f5f5ff8013000000b02b5817de543b4d31d0f089e662708d4986ebc05442e3e7e371db7b659f5c8b0b81c9fc4aa74d90b8901f87bb30b507cf761116f1460df421c0df2949dbea53ef991dd7a93fc158ca5eea706615736b1a5fe2cf91ac8c02841ec0afa0b2229b7c0e19e9def8a4aeee956dc0b0604119500a3aec9b9b97315378993bebbb50b1bcd1646a8fb1d06e150adddd982e9b4332230532356ed13906eff0611ddb4f81167a1a0502eb78960eb8c19998a59ac79d0000021c000000b028864e6374cd4db4a79e87a0919a9455ad0883980053afd2506c27ee7c10fc1df7c983d4669740f0188bf7d94676c8bdf9b22dffde5a4aee1cbe7f5c687689f5d8a9041d35a6fa0d86fd0288fcf9275d2947d16ef464ca0ca702a504aedd1bd1e5f09a39c1fc43d0dd5b7039d4ec4dc011a76c6b8d49c981fa2ad386eb84e477b378a581c4cb0f64b499e02b1a1d506a2b4aafb55a2431bb66b23bdd6deeceed68e11f5162933fc6d7f81e4a2dea835e000000b009dd1bfa522f4e8d639194098e5c01902c947968a930ac02618127ed813aa59f2b4f8212d5a993b7893847ff4ebd1823b83f7fa10bc789ab76a82702d0ee677b1de4860360f7aecd5b881fa6f29e6202d72ee7a7a667cb0e82d3bc0d39f7559563627c9fa18f2f9a8cce68b664ae39cc1e2948bb277da3bcfa275a41b669e2a18b8ac07d04455a17fb0759e21561e731252b5da7d0fbe7f40765c433ed08ee4d46a8d21e0f7245c0c8af4223a0dbd154000000b025544a5ac31d28adc8ca56e1a3c45994754e1d5bcb9576ae8c579f1a051e41374d45817264c61d1a32758577807e2e661b767c466d5b48ec73ef711fbfb32da12ed0583a8f48188c3c68b0a8e5ae00d1d751e9c24520392f61bf1ae9b2c67ccaf0f885959d23580b76140073c9690b862468b2d15afc48ff66f7eb8b2b5700cbe964215afcfe09743b652a19ed0420ee2bf7dbffa232d16db26ee6d1e4a5b0a0758a4ac490e1e6570bc487578525abfc0000021c000000b0127740f7224a0c8b412186d4d493b8a1d05d7c7520ca92fcdc044b0fb7dfacdf54aa781a3d0a69f177e5d3d34a9d46835c2f724be739ca01524f5dcd9200729c8789cd8852060c609c156dd9a1373beef99c0b36e8a02e9ed1365fcf504be113761ac383bffbff8d3c5c2a8ed091220216beda3d0219d16fdbec0660c92eb97c16b705a5ea7958ce5c49d23f70a5bc5d19b475a425efe8e96188505b9a1c83e98915c1ce0e8ae4a9933058023ae3eea5000000b0169822ca0c4606833952b08a957331e11fd20343e762b03d88f13e4aced2fa74d6ba7678c0707e4b19b167273d4c0cd142bd932dc9e8d9357aa4d02aa620e28346df49d2655b4094f7c54fd48da436cc5bd73ff6ca708e5330d52bf4da801dad73e51d104c27bf057fe66d7e30c472b3269c3188e25571717ca399b5efde1092045de110ddf61b3227144115faf4e8c312495227b7c1b10c20ac66e7b04a75eca8ba0657f11ed7490b1e98f0ff3902ec000000b0208cf391af80571a5f885b38e660098fdf329dcfb558ad86dee8e9e39faf677b1875bdf05b1faa165baea48563981608db83d2bd938adc2f38d8455f9e6e7293362e55c28707dce1456ff8c7a4d72da4ec02f09ef5ceafcf902041234953780ca7b26f2c93914d63caed1ff284fb95d11038e3db46b3cea2a48fd700038e33119bd67a9a49e17698c591adb3ae199de70c358ff1773cec940c2ef106e6533d282d6b10fce9ddb1e25b8e54ce817ca7550000021c000000b01409b3413b1e60d7b5e51fa92d6936a33f2654f9112f3a36384f2c20ad6c5eceb98fe4d32ca58e1192a276e03f0f67e4e5181fa99c114790e15a0f2b1b58e82b4f55250556b587e0d7972a05ccadefbbb27e8bd4e2fbbef0640cd2811217651c18bfab3eab220d11398de7c7988c958919bfeaf73f630c7bf06dcb4872494cd330f037609cfb2870e33fd3690c1152a423b47c327502e0648e45a9400370aec1365b4fe30ef301147dae0ce12150ee79000000b01d26fbbdaa25fd83700d3f37ef4545b10004eea1b4c0de66f6082bbc81553294ecf6362725760a59a2684482bd206ef49dc1b350fde9a7c1191c2e502c5989f90b3531a140ecd37d9ecb44f5e80823a417d721b6fe185271c9a68636866ed48aef22e8c719ddd1d2aa0d06357ecc4dce0f3535001b029b856c0c5afef21e9dffbb036626ea2fbd17112a999138f49185066809c0f14331e8fd83ff9cc6d5d962d6ff71ad6261a9fbc62a76e2fb34d320000000b02c1e18d012849d276857ca21e7b8f72ec94b169de1a3f886be3df604f603f9544721c8f715cd39c0e27a698b224ae5444aa8e1fb69494d60d98fae355a7c2e607746f4951dbf2093648c148eaed4d5dc2960614189f6eb392bc87c9872790204502fe8d501823381ca6ad38b66e7d431008b956f3feedc226f7494b86632033493c145b56e601b1c8081071263811d15102c27c136d9da0675d7ef96bb0c0018e3325b926e3c182a39f729fdb8e97d0700000fa400000168000000b00993056e413cc581930b99e309f6de023b037428756d097804539435b0383d5395f48c8d67d73d5a6876124d78ca108dfab15f083ef47336d7c5b11ecdd1e6c005c1f57e4d14583431af797c5db851132106d870f8cd1d4f19f1b3f9a2408f477a4922cbd33244319a1fc31535d669032c07f2e8a79a33f878691bbb57aa5a54661e2c76bbdc8cd24968c5894707054a30143679554661c658b6994e9dcc6515eb14578d4a4cd13d93a058820958177d000000b007f0bf7ae23a28b4f83df38a9164137166848e0b4f2e4f9033f9029cdec26241d167ecc138c1daa3656b0b1917ba293bfdbf2a0fd7c08224da09a538d4b58127e5d99a535cda3c954f914a58a6f32d08a856ec7c4a772c36d3aae1bd30e6373732e1019810a90e46cb9d223bb2c8a42b29666de586f8b1192e8ccaadb9a69859939e16e3b8b1f49b031c83abb91f7ee4152087741b4d794d100d710f73889c922770ac6136a8d44a68abb5ce9fa2df1400000168000000b02ef44d3a2a14f687a3798ff63e03f7638c327e5a7a9911f4deb837cf01e6cabd96a509463c7e5e9755d0519c3d10c8dec386d989c5e7089710ce0484faed0525a232ce3c344f075e951a3f31e71e794cd8341f8b0e226ea53400be591f4cb8d33f734301023dc3195e236985c9042d400c747c8b354b5973198ca6623e717bc27336ef4539b30d82cebc1abb24ec616f11da87cda13459610fba38626f44d068ebd9a76371b202594552b2d39c37c3e7000000b01e82753f67a28c70daee732d0bd8f6084cd98cfcf2bfec52a486affba1646290d7b0c0e1756c131498b987fbb5920b529a680b00955997e551b6ebf7fcf3a2b5f6ac386fbe9406d3c42670e738d8fa2c0492b57328902cc3ffab62b161f8a70dbdce7a3f00b36bffbb968df1e3e281230da3ebcaaca043370236c8c02be23ed6e8c73725ec9815aa816879f11919d8931bd6a6eae6dabd5bc0c83b15bfa2a432f78c2a7efa21bf3487c59149bbdfd07e00000168000000b0166b836dda2128c014934b4f49989ebb8762e8e18fe11933781fd327c6fbe1cd44dfc92d910eff3ae58d60870bb13f84378ade9a9efe3cf3a775b7271efe04c791e46522e04cad67aa4a27538a9c0575f0faf70c5b25f40d1c29056d0777a8507737ff28f1af15b78ad8a0216656547d24aaa2f777e625232a5a2b2ac157a4c159071c4104a8ccb4d029981a0597cc0e08dbc1b5dc34ab9ae12f32d7efb8bb930c8992dffbcefdfd51c596457eb93f89000000b01c3bf6ddb521acf8dd933e25e25e7e917480ebf1d3c25fdba2bd5a5f6d772b2d37ef73e6cb74a258b264ad27eaffec4042d1bd73b2c935f2781df7c7383e5d3a39eb47a33e36c4fbda739e182408050b319a5686a7b7c7d4a85ebe9c9a917502414cdd36d4be758f665b4757415dfc580b2f74ef51ce99437b4d2b0eccbef540f80a66ab9edd4f84baa1acaa9024729216bfc3313f268fea0e6139fac2a14d94a686b3b13a24e5e3806d1ed73e75b2b900000168000000b019ba6d9ce6cee3bf907674558b13fe54e0aad303ab56142391192e84291eddb6eba4703f22f1a5a1870e70bdf52e2cc7310258b428749751bf56e31f621d406d04107633861fc7e767cb451bfd9f0fbd10cba830438c7711e3c2a21a67b306bd803c020bba56a6b96393f7c431fd2fa524793ad9b47e54fa17c60b6291e2f7fd177fe9dbd79277011b49306eb2dbffc31c486d4ab1ba7ee66f7531850147468dbe8c927a3e379082362e47bc4737031a000000b00b958a65e96f17c4f0cef6901b33464efe3aa4251fdf802a3ad6ecb75e63d296ecec10c68ad025a93e76e543169333da7706de5dd0c689ab9a225bec3fffff69e368a929ea4cc49ea4b182081a6ee1d89980da467f4dc210bb601142702cf4d604fcf60f9bb5ad154701c8a0827dce08194c332f94b4ca15b7364466de62568de8b708c74ddb1abf3b0152c20e38f4e12386ccb4f462b3ea5bcf5c441a191611b5866f5d00f014ec14cff131b896d3dd00000168000000b02beb493e30731ae29cb3a3b149703d6580b5f7e4b78a13ec7d186ec1de5a577c41843b8bd85125062ed23bf81886473d6184d870847f8604fd7bb79b36f8f659492767dd82d822ae94aaf40b8e91edd4495c338a61203519b498bd8b319c752bc4b543bee5f7bbbf4ce76f38c41c17b225f068db6546bdfba698ab52763de2f462f605914ce7309dbd31dd5df02d919a09d5bdfa3fb28de3ca9f6d454a3eaa3f617605276b194b66a3cbab49ca31d9a9000000b006941eaa81b91b05588400b17ffd8d3eba759c9bd4a3779157bff83a535a189ff1f0da1e833050caf22653ee962634ea6ae530a60753e7fe8214937318f614d20d5965a62cc7363c998163c1da96036e8e2d0cb941e136e2178cd0fba85e6e653bd9f7e2c7299553bed0fd488126031128b03cace6084d2f33da686ff32d45612c63755e23172405824c02ff77516e1b09a4fae5dcf69be5ce55fea8e7d485c59d9cd808c169ecb210845ad2dcba5c4400000168000000b017f61cffbf2abe12f5e0c76aa59c6771810a3c3f53027c615eeb8f26ff6a3c9370aadda6970eb3b4323f39014ba9bd9d81c9461d92d28b94ad985e21618494d55efe2bf4f34bfb843c44f418a05db90ce2cbc887f010de700fa7ad60d167b09eca518ca798cc3cc18b76535df79d207621e7bb900d77a558f847e20ca6b2bac4513047582f698087bd06beb2470eefc81b97eb5358232b732f4e212baddd5743ce661665f0aa2c6580fc9f7bce06dd25000000b00d6ade0d7b2aba1dc2fb025a3d24613f70e29a6aa5e4ce17a6a73099df5d819ed3244c6ff6f0b5e3e648fbe0ad42a3acbff05d194905a101cc0c0e6866c0ca7ffffe6888079b8f1d97e19c6dd2f75886f183e2ea68b40b5081c4dcc4bf98dd3d89e801b9efbdfe76fe5f4520afd025dc13051c7f1971e6443f3234b70c5d310a8122f96a384e832326fed78b02c5b4110dcd5b9765ad430871802086a56d9242f7d4793e0ed297c48c93d2cdd9630eab00000168000000b00724a46f1c182187fa3b0bc3b144d302996633d819ddf632fca42b384073c5e19dc6d895715faa5952f7f9910709e197d5963c8af0cb9fa06038df15b3bb6f277ee74f488c8d9f7cfe0b43f2b1ffc08fd3b79367348a29aef78db3a28c511ccc5461b8d6e3cc1c2a8b5302a2a2873c190cb30a58fbf61bc8bb5737c6163cfbc73a64c2ede95174693013f4c3482763a51cfa929ec46f606a06d7795f2612f628f27ec731c18c1301b572da041a7fd113000000b023e302bfd96a3e038b6e7fd180946bbf7858c1aec17fb07b9b4cb9f18fc18cd94ded0dacf5cd55427034084e18707adf60e692735c6ef39f7429cf8bfd84f2073b2849fe11c3fdda778731c47ee00b6ad1183db3f6ced5916280e4981509589725f5b97ba837e59371131c6b392b3c41292914dd2cc94cc7112556aca7a86b876642bef370fe54d6d176583865a09c121949ccaf9512c73253990558e31247f65e9059a255dc2ed505bb770c643f524900000168000000b0216e4678e3aba87c4962c17a3af9d9e8dbd097a881f96a9fc0128339617b09532ab51e03b836c5b65a83ea2308637362244a80a09116e329d8f5fdfafa54fd84d589a9c393582f263a423867da11c779ba47c175835717660d67ad6bb9166b1e96eacd8998a077a3c83553417062c6602a717cf56dc23dcee582da2fe64002d6e0cd8928815ae76b9a4a39f976d940f4262a288922213c9c5f747d9e9065099a1872e919029127d5ff457721d408ae84000000b0216341e7ea74904a9b0113ef8371a302e654801ff47def644c5e21ac24ad35f9f28c2618ed49f3287fe1ef5999823692691ec006ac98128cbef83c28bdbd3992aea95511d5bc2237cde1c72271e50d0b04210d5ec5dacf04f19fbe3c7ac27634895fbc2067a4a87b3d580f6d1e1c5bb42b7212c0d8e939b1abcbb510d3f957a346ee34a6e64d0e57628a9ec47f4f930d1daefede4985470d8aeeb91f198764ec4d8c4c1925a3be32bb0983c38d8f3c8900000168000000b0222b4478424685e8b324ae255ac4a2b7d678bcdd8126b3d0c697be8e4d901071df30c6840beda54d0e4b4da5f65182a287e6212a09e181411d4a5b99f7309e9f126f2428748d9bca6ff46e8ce189d5ed6aec6459c8342688b697b4d36260390a7d791b8805c63c0b7d8be6b46018112c12ccb95deba07882edd2c384127054f548d0777c0e405f94f15014e3554dc7c801293d6017e13d6f89f063edf2e1e862972cff5baa410d50540da071cae67210000000b01cb66b11288e071b14408dbc1c0c421b5dbb312532a48d4e1a6e06746e6fabbbc50da00227db832c60f11b2c20b8fc6c02a9fb6ed1c033aec7fd3043a94b53f17e92f497edf8c29b24f28ed76eb56a173d8c568304934465f668b8dd58241b110c8f1bea959d52d60351be371926e3532df9dcbb5d6b12b1b6ac74788ecd55cf8f35a3a7d68cbf89f1dea6d7d30605560f2f6f1da432f117fc947bc4cf5e6736410cec288742d9580c4dcfbe4c422ebf00000168000000b00364f34c8b3608f4b96b3bc33d84e6aebfc23e0fe148ab3f564a663e1d4135896977fac0b44d3bf549a25421cbdd5713c81cfd948c6b9c4551e06595c090782a658e3f60c4f61178e81077871f44d91caa9cfc71b8d528f3b4df29a4590cb36c11362578f671d4b01f32161555038e4c195b970e10e1fbe4b83bba98a2b9db3e9b6692f4a309b2d288395a9f7ffa3af207f94d46bcb5d6e90fc4095d9f2021848640b95c3bf5d3c681e8e5c7514f91ca000000b012882564d47eaaa2f21d5df0c4f543b5c0ee5a5c54182866f7d48f4b7e9a85beb4ee981f36e26b3eb6cad58925c95076c3e177ca09f166a7f93405163ae53578aa611b75cef89d3f54c1bde06aa041da4bb085a2f830e737546486ea1eb988ef216a80b59d385b8406a568b3adb0c0dc166b2fbc7e43483de47efdb641193604e28434f5a9b9231bce4245a1663d80360845720b9b2b3bca2c9ced059b1cdec2313dcd6c0217b4c0edd09ac70594106300000168000000b01960b810de349607c3c41f7f7d3d4ab8b64e75dfafa398efa48e8dce92282de1c4db242f15a2520fa00fd25b6f427c3da36bf14f101efd4cdc3c817f000481f908bcb8fae4fb15744a114bdf97701ba72a3fc95b4aae58b9545ca459e9e8cdab93e009b47a2a126c18a808eb9e4d9cd51cac51d7543765fa9bc8abf594f70cad461ff4d661f5fdde70e852ba6ef7e6f708358fcebc7a4719dc1a5e0c9ebc3f32f2eaf63431a4ac54c611278bed5c2b5b000000b009ccfa3e368ef2c3390831479c2e0558c1ced4ee1603c0a16fa274b706712d0e01a1e5f9d8065df0e32db25d920582666ddb59f840c3d4ce012977e62f58dba29549af0a3679c92e871c60613dacdd39e78a248b6199d014143f2e6fc84795c37d7bcc38b90aed8f3f7d88b945e23a6e2b14514d02e1b09ddd1bb71d7a8563bb3c6ce155c92ef750b838a3c99d80eb5f0a93daeddf2f14578fed88785f5ae2ab2dfc93f6921d078f7baa78842b9fe2cf003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b0241845b555fc0b13833d757e6f14788240023116cfb27ae76bfd5c78e9bd8c723a02c76c035bf77cbd3948e3688b535999ee50f95e7734facb1c2c9e815bb5a08184c78961c5387ddf042548a960c54f3ed9d39615c7e74c4f71d3b6a9edc68419af95e5c77383fab7d0fe6866712de923311786749c5fada572538b14fe37c91b73f69e3afb61df76a2b1d05c340f1b2ecbb461f8f43e558230de290d296c82b2d3f49d00f67800f48ed8b0d0f9ced3000000b01491edec9a7a784fdacfd0266462c336bb8ba29c42b49579df5444b286760948c760923f94af2ec66777c8b4b77667f39a0ec9e7fc3ec3c0a5ff0c9bd7d40c7ce2b267ae214a99a453b0b6a0fddbd5cf00aa26e8e665cd82386aafeb285b9916ea96b3d8e774a0d0a245dce8ad8c8cf1171942b0dcfeb0ce3af2c3675280c3812cf4b40901de953999bcb3824a7a5b312c2049a9e015f24e025a3f32e7b7717335bacbd02fd7d00a22a56191ec6c887d000000b02c0ce92b3f4f5365055675e438b46742d902df737b50f92cadb1dc727ef185da409a5fb7f1a3dd96aa67860b628ff9d2f90aeb72dafc90b35468837fcb739a99f1e64fe2983f31dedd07df76a237c4700767f25ee784aaf8bf54b36d60068a37cf9dadacb47409afafc07746b9efded4230da7d1de4b0f2b54eea0640b71e69bacfa0f720b4169d46d7fc8a2ecefcb2227adafa074ae1996f381603b9c7801c8d903e6c331e510a20107b41a8f51b0690000021c000000b000987f3e014886412334b8bca274a590b93c7e270b69cfe88b47b738ba7e5e6a8eb0e4efca926881e00abedd26b945bbfbe6159d2b3476e84d9ca5ecacb225e9ec0eb9e6122f39eaf15656261c919ec5934f2d34df36b04d4127ce37a7067c473ad9bbfb0ab6e8d79f232ca653eb40b5019a8d1ff4344ff3bd97d35db9380650be3c6c14ddeaf79a5b417df286cc6fb61cdea16b717fd3e071f22aab8b60dcff529720753ec5128d4875ef9215dca818000000b002ce7e549c4add11ad91cdfe26aea3894417b9dbb6c7b35af38cb22ee018711bfbb17b2f4267a52eddb219e112620332d5ef0ca8b6817c96f46d5a5ffe8ab00a993fafc0b866e7f595cb39445ff91445a282b0051b2ec64a45d457670ee36be9f5b93b31d9fd52b8b2bb51a3e6eace820b8fcde5c080ebda117031144750b7699291089a6e0a9a768e07d5c07c2f518400df9953b863a66b37220a76c15ea9ad7fec1b541065832dbb81fa0ebbb9a57a000000b0097f6cd358674a91538a5b9674234547f120da125e106fdaa1b3b39016a4846a044c4991ecb9a006afc503b1d3eba6bd2cc002d34f6b566365d069d5ce0a0f9f95278aed7f12d03c718ca9fbf208372dfae26ca72a7462549a6d65daa625b68979343a8a4249f537e71cbc910b4a069721d0e822fc8feedd60cdcf1010f3b12bb7bcf7db3e72512d9bc9fc729231b78f1083d55f889a272d8b415cffff5612fee8154a55f2202087267c07d0d38a8f130000021c000000b012822690b61a8e6d40b284069a78ecaffb5f702d19bc629fe33166caa16af34cf3a8f299771c86d5d106db7f7583b0452e3e07a381679bb57a15618569be784c8f07ea47e084e6c6534338743469be888d9a3fdf1c343acac71e83d4325ca86babe05f73dac02d1556366964f5da415d1a08bdc38360687ecf797d03ffaa0a5442e915767263e31ba23a23cf31049eb216493b7daa4cc6b0621cb799c245f2eeb00a48c10685f3e1afbbd6374d397261000000b0167524aa3fbe2a156a8147f7bf619c8d73aa8b96fed3f57abd45e0ea5d6fc3ce01cfd65ccadd101da9dfb3ad6d2e81c59e69e06cc60963f99caaf2b13cb8c0d33d65b08fa57f83f4c5e8d059dd8cc33422adcc5caaddad63eb27e13fe8f66f3fe6f5d9b5dddf408907f66cb7d4a7474117e2203db33a581c88c62fac3b7595b45df67a6a44d87686e6bd94e5587cb1be28977c629259527c09b8d39bbdcc4b7d82518116146bb4094a3bf889aba9ac44000000b028f0d2b4e420d1a88259c1659fae20ed6991b1e156ff0702bd98959a68adfe0ee2bc9df4726550fc792882f39ace8160a17b8b26c1201353634d8a8158136680af19f51762593cb046e716b1a9cfb9dbbe1c0ca664c9fc56b44aa42113784cc5be2da1f101310a8e3ed08095654b8bd5237ce33e377f0963b5639a32875fdeb8407aa028fa90cc7e5e17b514bc7190010287bf5d98849b9f95ed76c0a193b1f167b8369616cd0bc433ddd8887fc271990000021c000000b00c6b76efc3eaddf16b81c13b44f4daa52534463284b4c1eb1e73f89d60f44f75cbfd0da4bd722c94b0e27f90fd922f41abec246ca44323e70eadeed0ba72e4e047e01aaa14837c95d8f5ffbbb6fa2925bb0897937295d4ffd790aa53386c7294980f5993785c5835e41c16a95ac1c8ea05ecd9b9c0a96d96c346d4b687bb8c17f9acbe74e37d8304652889d248d87d7025b3558325d48670fa02a40bbb935bd412224dc4a0e58a63df5afffe12a7c6e4000000b009505c49ad3903e58b5529adce7ac95edadca6900f8fa6c785e950b4946cd0caaf513cb91bf4f2af9557bcfbc09156e908fbb852d85fb95060a2890bb48fc140e903aee2df3b12e49d3375191503ca47e8325ae1833af14c3ab35155cfcef5d45c794ad5d20e23c3a6d074f9850f03f92bd63b718cdb66f126b1a3d9495779b7f815f34c53c0f41a5a717d48e50d6b8105a006440bbfa4cb36649bf2e095f92d20ec57729c706af5ce61d0c0783259a5000000b0113ced5c31767caf1ac88dfc558d9d69181812f469e5a1c8e7fdca1512d4475ace713d67f922caf428501cb58d8b2e9af42b5ab45a72a870c1f966b7f578f67f50a487f34a4860a5a811c19a927676964bea8677489df7d417d5584eeab6dc1cbc71205bc838279d496a6bf6676a2f670c9cb59b636df6b2a767eece57ecefe581973cdd2ee1705e02fb86a1965441da179e4bab3d5cba642b61f37e0c2c4cf2c96a6b56f2c21005c4f251a8d501d1c50000021c000000b02b9cc5f95ac2d99324681cf339ecb0344bb93403b703c3103045221e828278d747fe737d0d04cd2a5330610cd660133362eb301dfbc8135a09f95088b783ca17218a47d0a11e823f65ebe0ccd345fd24809d1d1d85e8faf91111e82e409aa5413c3f0cd55b1dd81b73b39eea58ff045809240948b2ca0499aa8e390ae910058cb71eb106fc280bd40e024d39faed63a126a622d38ec7357194573445c09af9b39856df585439892674a25dcc4b69b2be000000b02087ad59e58f9222a97b5e144ef8e0ef2181e0d956368dd477c6882d789dec2d78afa81688c9f7d431ff9cc9aac532bcbc17ec078e567fb734a8b0ae484702cacd08a1f6a3aefc91c9edaa2e635860ca6c59e3b97ebda408b3decc97a96866db4e335d37743c572cf309afe953e292ae10fe4ea9d2fee3c0f890c9d540822ee41223b2c2e9606c26e7d7ae4c615e126c140e2e50593116f3152f80a229f3837c39d3f601f000870932c7b9ed6e2f306e000000b0065e45ff65e2f3eb7bbee24314951cea7b83a399dde9825f8ee1eb4f665d3702c90dbca611ebf0f2f2f88099283bab16e30e8f9ca2b3bd338477b6bc9f58b1e8c3af2a46742ab9458f744d0201191cec3369a054cf816c74bf54df5a68f3d52291da79b40b25e7515950565d0e2d44930996e208848586ac7408cf71aac4d8d394ea90fefe4a2b25c0ea82934ab23530226afabd5f84cd4bb294c0cc32073942fb07f09a406b681654f92b66e1325cd50000021c000000b0133109232fe525b9ca0e6f2f56162c4595770da0715c1dab1982fade7bd69b503a7a2eb472a0fadaab6b7335312b520c47b857842e4b85f4492ec1ffe0cc5e4514a135d4d5364ed25157b250f9fc71c5e44dc1c1fad96c0147bdf5379fa7d78e1bf60d6862d5cf2c265946086a2e2b67113dccbd57d03d39b31a6b3f724546eb059d2608c0b963ccd4dd48c48b2391f81e0ad1da1ae27bdbc0fd9b682e96b97cf4f62fa2c626322d02c3c79e2a52fecf000000b02ce41887481e5a7dfb76edaadb4d40ca4c0a6d24fbf952bee48e6dd0404ea52fee175c687be792aed8163f558c877af3d9e81912b870da098893dda8068e5db85d94331e31349e4646739f2be43124e43e19dd5043536d6c4e89ad81f8105f2e78bea5d0f0882d40d32c6d87d4d7fc062f5a84e0f121e86e8338681b5aba98c65f745319925772ac6a9e6805972b4d1104176f2692a10a1bb62e6e4d97e0b1bd058e614a4d3b87a463becfe0f616d135000000b004326c86c88e0ce6e0b7374b6b726d2bea4bfc148e5db623ec09eed90edf471a5fe66f78d8ac7ae9e628fd0eee5eb8f4b6d880d07d03d980e3916d186f8381d32c5ad928898395cc66b42c28a025e3d09ae2adc8f62aa644d2b0c3d9a5c870d4b08cfd5c6676a92a31e1a4398cbe409306fab078467b3b819387805a2b472da57faf0835f2335f22f2975ad2c69f21d717371b641ac2f222f320c1023478673bf494fc70cfbedbc51e11293a0d7a51400000021c000000b01d20cac7cbdd24d79a38b4b49a06d35ed0334df5523fd474ff64a1f93a839f2731a099ca95a91b579b50c42ffe288c4067d9245b9d1ce79205ccdc482fd50c93d825bfbd063a268231376dbc79fd32eb78cccc1da00f67ec15db6cd9bd054762b88503e63974c81c559ea7efcc341999025869bd30702326ed0d5964eb92ac7dd550df2721b312f6affeb46bfa6f5c092d9168564356018ade9cf9f4f1c2077102a4de4c304b0f84fa2b54c37f5f83c6000000b0151388d5e57dcbc2c3d4fc56b267c5ae2402b4d9634a5252f8ccf5524f98e3c6e9ee4a85ee35261012d2385bcd420bfc93f3dc7322ce6c7a98c1978338bc9a2e4663bfbf2c63c0a02ebefe898123cb8b48ad1b061f28504e93e955157ae961cffde12a17231941809c6724f170c218321efe4a88bc45b2aae115c1f130ecac19c902637885e5062c4f21e3a3b244570f1e2267beb4adeb7cc90ca84320b4e746e999ee797d13681e0aa272b267a4d9c1000000b0160c822bee2943c87d33c0eb3fa5816cce0f12891ab40bd8fe63ed07510be17eec5a2005003fec0b741ce9792268d7c8646f906ec448cf9fde0c67352988dc017b608d7849fbec963b178fe6e4cc5dcbf544fa7810c284a23928c3ab1c43da2f0ec2b396bdc33e3a7f821f1a103bc1bb2a62cfb0b69967cd7bfa01f9fcab2460f939d893ebd39ea73155d2500aacaee611cf3ebac479bb7c0e98d47a06e905020caea32d0b970b580825f4bfb8e7e3560000021c000000b0216e61a9db37aaea6b1d43869fb145bea5992376f51ba59bf70e38105bafdaf5f5f2debb4424e482e9b6931c4a11b3bba403551063e355fe1be635d297c21071b3bf2b77b5158fdfdeb79cf99e93bbcea437fc6df2af5983c80930c30604cf15bca2c8fc4aa3591c8ae0b932fdfe91f71fffc8368ce30008b9c10bc29d292aab147afd5f4dcb65a1de74aa87f11155471c2bebae1eb0fca99e23e6c23ba142306cea0df30c25894af44bcc943ae23f17000000b00bafb9bd27decdd6b8647f2c299c5a7343d2739d2fb0bfe5b0b90b84955a0ab9d23434c32f8f0b58ba6c7bbec3d4abbac777cc4877117298d56ab1e8cc8b45f4c1718424322fd1e88dc14a33bf332767e14c40a0534d966a0ba0eaf5fb38c2ac7d6d740800fbf91dd0a242326170073420d6bd85835704340ee644dd665030767947b94d9f6d7cfb00a71ffccd5030ed275abdd1fb467acb74b1150c186f717ff5c4afcbbdaed9011280b6438fd443b6000000b02208c4c30828e865e44f9ea6dab505c76b24f61e9700b9765474e2ee0c53af03a7305f81d6e724fa1db9ae19a463d0c09e44825e779a9b889e333861e9c25ef34c3b9604c20ecdf1290fb287dbc1925a24c69149d05b3c8a736518261e3d338f5f80a7ed7863c26b3df2688a0ad760db2fd6619e637bb343f398d1c8110033c7e41da0587dc38c8d476039b4efc3a9f128da05f16298a92cee4219778a58897b7d0b97827556bd898b947bd35811b71900000fa400000168000000b00d8a999289273bc3c3914a47600a34810bc0d9220cca82094812fdd9533881925abadd17e8de1ccbe43d762121d85cfaa5bff81ca8ce3c25dcf67469799060019041f7efb94c4ae2a2dfbc04d82c82ca969026c4b79f69435252baa3591e7fca4f471c5d306ebef82e5269dc062704e80abed79dc3685afe0f3919cdf0389800557d37738cd1e30d10e94a8e855481c10cd3e7b066388fdb0d3f18241ecb35d8e79a7826fd7926d36af3259d8ea4d4f5000000b027d3017c5c57d4e16b44d5d0b765f6c952a17af6192793d7cf33bba21ca76ef59fd76808422f53d458b71c0a2a5e1a27d4bc65ca98fecbf4770f919827d4ceba9b3784fa17c5b5f6bed63380fb87da386ae4d26b4234b97227159f20e3025480186dcf7e4c2f3a2f68e7cb101a3275cf1159ea491f3ba02353f8b910b88fc90ca792f4fd961739e2d33ae35ede2d40de109c4ed1aa33c6ded9075a6f8c58b736b3c9aacd10e5f2691ef91bca06fddc3a00000168000000b00df25022c3a060ead6be1911e2197ddd3c9356482aace67ffb3f76558175727915e429141e28f5fc3fb2b5f022dcb1c713294dc7be9255ec21fd50d25534e6210bcec4c84c8069091ded35eeb70ad285a9b3147bca2477ad1df78dcb1814028010ec6c70332cfbbb17b0b7e0041e4950096a136efda587968771ea393c45883e1f435979b9e04e924987f26ac3301fe22384bd6ccabdf8a594801552ef8b99058819c17894b6f7141f78bf2d53ee39f7000000b00d73314ba238fa8c8d98fb96f0ca9755dc05599d91f39780f059066c3f0e221dbddb8394fdb72cb16f1cae7f5adabfa281b17e8ec8165bf914d833b3287ec901a9b41f15e7878f9e13715cf98895b525918092668bda1bed28a184060fde611963ba660f5ed167ce6e3c15781e175589241899f7c239f869b19b0126a35d6a8422791c6fd5f03a699c84da8a53f4e5800f3e2821cd8736e603df9bc6e741debd01e86f86f8aaaeb04f8d4cf24019a39700000168000000b02959fa6f0f8ae27418f5bfa16781e2d63d8714b8b2f282ecff0f64d1edc77f86b5cde927148cd059e4a085c5e321af796c794a0cd8aadc8af12fd14aee65e90e07a8b62212392ee29035590f2817d481cb30f03c4363a258c2c71fcd6386d86fd62e970d2bf49252cbaf04095c86ae0f039d7b079e62bf923819a1543ff3abe94b2d3755601a094fd6aaa976cbd24fec2e604569c23c78b379678f661db7c29076b100490867a7434e257bda6ab6affb000000b02ca3d29d88dadc3a1e711cbc116802d0d967f7613b8c32d0b2435b3d0f5e077fac848f6c2f6b106b4300631ed180bdebcd5eb0a7aa8aea295c4a18adbf26afc7c4da4c8f626fc06aa46ee94aa459c30b83200a896bf75ffc7ff058bb30b4df3295efeeb8c625ee4f4bc69551b51cf84219da82fd89f7c123bc83e4d93a3e4999d5fee4c46961176988128acdfab9bf250164a9d93fec653b0ee8df175e7db65de7fa70cc0c01655d6e93500b709421f800000168000000b02067aa3ec55e19be4afc9dc68afd3b966afd3fd0cf7059be05bfd37e179b32dda86ca57f70f0e329eb874da07ab772c6eb5380efa39dc22df19a3bc973391f5083d11f4619baf54fee0a66c7bf6a2b6d4890045edfba11c3964fd595b18a2dc502fea1eb6374afd7a3c922a21ad9edf12ee8721e8fc05fbbabd8f66919b242b7ae80f1bd20239068311804d45c49ee401059a969ed50c76c2ae3e5a02bd9ab57b5a8035dc9d9ba255fe6d86aadbda5be000000b02bd51e5ef268c5042e98fce584db3e8e601a9e4194f07d3ea2d11c035ac50a667f1180220bc84f3a9becda759531c138905bdc4ecade1567470ca9d3293f7dc09992d70b5e6121df04ea18002b64c67e615bc50507c4a2c68f0626ea22fd2440190a8a0b1ab8c196b26df8069ef19a63031702749d67eae08998109a0fcdf59fe0716daf6789b3d61e331b18887887571e12d979575f8ef864b874d237103c5cd0d7515769ef4dc037a7a9ba3ae887f700000168000000b0191588d846d396218afd27d3c75e8ce377fa3d44a36995c5337f042a1e8eb0529332c45d645a4c58c04b5f41613ad4a720ebbe7f6049217c1c2dd14ee1e4bf72e62a0b58ab13641fd7d77b32053e8498573aee5dc24702c535bf8f4948b430cb89d8430d822f3fe5f128c234f5f4efbf1f5547b7b53c5cf3d47d2b8c68e32c2cdb5213586f6bd57dd70131ab70de15fc1d6d7199d7b9af9939a434f6fb6507bb7b702147b76227c73bdab5fc8f639500000000b02ca1ff3a7c747e86c57c6a7a61410dac070461bab4759ca6955c940fbad6c6bf0a1661ec04c44dcc4a5357229de68934bdee546352352bd73cdfc3ad144eec493089caa3c03cffe8512dc8ec855d172e21a3543b06cef048b9d97c952a6c1523f5fe81783ad2d3a37d1cff8c9284bc792dd206ffbf687612674b170c5a5c983bd8c787db6e6b573b5e5b2097c1607e6e06863d2cbbeff947a0ff05c51e2a2c08bdc1372a63fd07eb9e497d2e79add86000000168000000b025cfd25796b63acbedd3035c18d2730121bba7221cbc84afefe7ab1f323e105f1a1c5f6b51120b7493a6576614139ffc587337872d577c7573974d55f75e0794215fbfd62a1b92b931730dd1d6883d2dac5c4a284ee8bdb56f5812b708159d48504bd255528f9d739b1bf19ce3f01a762766071802b20934fbe843951e0baadeed91924d347bc029d88bec044dd83f2e0ec98dba4d34897afb7ad76ff3100b00e56b03ae4ae08185b2c018e4507d926f000000b029e718099f1d4c6b997c7b6535717bdadcaba4827cc83db513f72ce3a11e6e2223c275a9c9c7824df243a98a44f161c9d8a11b47f57e710dcb435a2000de08b12a3117e6b3701723fddc69ac1d83c37840535bb454e2b40f5d6409cf6abc969624534ae34bc98db275257c220ca12a931f6b1c5136bd3393c0f38de3463bc28b97845453303c94fdb42dca4c0309f4d10e0b507a900c04baa785e8e8cb7f44b8b3bfd3f172e015ed0d3256afcf6c8e8500000168000000b017127bc5c00d762bbc861aeda9d63e443479426af613af0b8f6663201eb221dd203ef99491d011659c8fa79ee1515a23ce3b357ecc46175ef41aea1d5de7fdb61dcbae8795eb64ca1b5ac7542d3419d80433a4031a1df5e22c74c3defe15525a40d033b0283035150ec971e06ef5a91c294f41fe372b9cf333ab0654c5e03926049ac51f987ab7a4aa1f6e6a35b059d22f646d6a15c4c5755bad5b45e5bf85bd148bb514369c4c79fb7482e28fde89b7000000b013f86f4032375c28b638e20f8a9e0ec037e9b756a90e9a4f6ed078716d4dbad2ae506207e5a77e5fc736602af32512614bdd0b379fd82e8774199eea5a9e0e4311440c2c1c26f73ed4abc020e3d30e4b81a4769d0109cbe55da52ec2915d9dc1392a0aea7ada6b100e545b91eb627026012d18c6ac79d272aa7f7962d50ce09324a8a34f6fe728fd5865f3dd5dea75dd27b54bc35de5aee548ee74b513a1150f88882ea2c19cce5d45b4a9059138328400000168000000b0003b2be1d6e6f78848d9ed2c6d2de9f67be09eb1a53bc5481fa97364881bff787836538e1de69993820472221e07864a5a70764a64bb8ef1d9933547d548ba3c50482e5028e63ceb2138ea5cda6f1db59ce01678ea806e57af8f7863808f354717b2a87f9ff3ed72ab4fc1ce94c445192e18f2b9ac1d6a0134118d452cd74db7f7e6c8798f3ed8a280614aff5eee29eb0ebeddf363605971956b1919375aa0d86511bb78697fe3ae2816936f572a9d54000000b01d879559f6b2d9dee6a42e4a8c4d51b4aab427aaff00f565fec9653daac92d1da22db9c87bad67fedf7f047ee9853e553ec26a56ea77d1af58ccb2ce1940ba1d8c647fe091a415cf751ebd093ce2ab434fdbd33f9b48d2fe3b890a8c20e719d03dccf6597eae645d6a4bf0a04cb81c5209f0b9a9a768f713f551707bac98f7c31a67e82a6654520b3472f60f148643ea0264092f0ab01adcbf32c369eb3ea217827665615b0894122a86759c40a6fbf600000168000000b01255811a133976bd1dc5c48dca323f86ba0548a31a58b7c9899612a0fdf6b6b3415de5ea715d4c895b1cfc3bc543f1f4a977235e565a994b11ed59cb04c99058a6e132a6a77055053df3575daa9318741129503fea3f120ab9e0380a50be2ed55db18411e0e923b981aecb5fbf1d6efc018060def4f6bb2ecfe1ab7c22f87d42e412a7b41543129a8878ff8990b63d5727f578800e2630eed6d4bbe699770659312688421c682203497aada549c943b8000000b01ee615a9e2d3ed09342e2e1bc46a9ccbae64f7b5f4891097ef9d776734d4b4c2118c2f1a6eb78cf3b913c3063ef2e6b530970631333c70b5660677196ac8eaf303b82d95a816f21e9b737f67a6de69072eaa2613eaf90dbedfd62a7beab66454d68815f82f0b8607c7341c7c60d3f2f30974cd85d3846ff05dd69ff8e5cd5ef90edd43fbb432710dd1accb882ccb11f219c9041e8b12cdb767cc0da3f2a376541bd0aef276ad8ad38906bf648830b14c00000168000000b01025064125d09ba9bcf8545d811c936c3abe5ef8a452f12304bf27d7834d876f740b6e23326c3773292c2ba4b6ec8eb8a83b4c038d311126d753499943047a04a522b89bd8fb394b1dae561cc3f846f3a1f7ba76301301929095d0e512f0f9dad211313086fb0c30308927aea9d74e7b19a7f1f161c429588514a64b0ff26cc36840f3d74112cb346306a03444b421531d949c7f2b712c938dff4ca6a10970d7e81a0d136140f9a317552e33e5f2351a000000b015fef05a91ba6e079ccc22a55e38f92f5ebbb6ff4f50ff07991013a89418cb1503a0afe427394a49c6ea69470af355f34564f45a4cb453b6acf654a100d739b025e1795b8576597716887c5b6b8c13ad55a760184f2701506d32c2634545d751e2b1ae279606f0a425a2b985c3bbf4ba0664baf6242490cd5e8b20f2fb6e808a0b1918ec5a15288cffa0c3c114c55171238d154de8d6aef7175c8c5a2708218b64118857c05561004bfa46d32e5586d400000168000000b016b97c4e7d242d2a25960efc0a6628bf6aa320fc0e870da76517d925115a61fed1afb152d78e0e1910448c48bcba2ee601286c0a1a67861c5453cfb2b8aa550398b005f5624709dee083b992860c8c08000054242885f7b28151519b5d64da00199c68ceab331f3e0330cc7cf966fd492c6915457e0fd584ccdacbfa6b506645578b4887f3670f43caa4693563d42c332b47814849209809e832159eaf1c22fb95682f0ef416f6986e43550064e50be1000000b010988cb4617109a4414d795f6e00b91c7deb01d9e1787aa6021f430c7868b7ecbccfb248a474371b50c508daa3f55744ea8b7a8fd58e68c581ded93392019dbac648eb8dbc0890a2487b27336a6f29c945b325131daa9cd7512d720e20ad1025295287b6f22f8572867929aa5d68f8a61247123948915c38234d3afbcfd1d62e5940a55ab10306a540fe858103f8b74d1fb4c44e42f8b761f29493a6f7f8d26f1e0a8b9136641d23c0a04b02dedddf8400380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b0019d87060d00d2cb53c7c7de12abe9e56d46fd2997f09edd82b66b1b2e0eb3c9c8edd3d41bd5d1ae04b5107e3d2aa7bfc7b3fd0a057d2745de4f70a8c3d8a7110e903c41653f84191792fdc9f4d76fb0d896c189416841c05756852501a4bcf13f0b33cf1ee219c9bb3dcbc512e542321aab874bcd3fbb693de572aa43c955e1ca6795dc529bb5a86c3f4484c0da83b205b7198869b07f422933edada3acf0c2678546acb414dad8890adb6ce3f54de5000000b008b2bcda62daf86e4c86ba41a92b0dfafda711f8243ce29d54e83332194839df6d7f813086657e0e69f76b2f6a730190b9839110bacfb75fe3237c5c54bc225312f6b2141ffefffa40cb54672d5930b02fb000a4795683c8be559b80813e4cbbb891a87d48b47104a3dc149750785a6d1b9d0ae5cc838bb9f59c24bd5c82b7435d1845db72bcb2bf5540ba98f5e37f2126ea0839e710d7110d251b1a92b3d7b03aed45127aebbf78a39d71e43d96002d000000b026ddd2f6d7ed7736d7b7b8fb46b515a219eb585c5700de9be10980578cc779a33367f9ff80f0783b466f90572f7a55b3ec697ab26a94e017e2bde544138c82da948ff431fb20ce46b49eaeb20daa617d2af3c6459af67a862baffac2f22de9a9d4eb1900f9599c9511364521d1d122ad2a3a9d495a8ae48ea17bd8f1d0cc1befa995da1bc1bfd8d33e20c78f284158121f2cb7ef1dd3b3aae24959548af66673badd1a59a20c17875c26a112d1971d090000021c000000b02a73de79f17e70e1e968d023315bad044c8f520aea0cc12541e658465d9cd15187e7fd5b06ef3ddb48854230471832cd9de41e353ed4503d61d22d34817db0e61dd7bf45b604ba9556e3d6fea225efc064610d41525e3b6c319f4f64b4de6d466752759f78b2ff3846646b6910742d19097833932a05491d93678f3f5cae59351357b5ed9fd7ffe2ea3130fcf0b857cb2e724e0712131fc04e323d874411f5beaef08641bc511090283e285c74f2c3bb000000b00b0cbdd316ed82263065f8759e240cfc70facb3089cff7ba858e32e657406fd1c1386d3b5cddd71a528332f3c0d7552410afd049318c63721cd4818deabde06adeff7be3ffe539c4dc82fa0652ab9aaff4ca9fe732ab97851160261679b05e5f322fb680a53e440c7b9ac6fb4633fb1c2880855c5830b0b8a32c9d55ed2212b45cf63b67dca4d8887bbc52c5c308f63800549702dcc3f6308ffc712b5fec11c4c59bfe345de84ba5246d815877c7dc3b000000b01a975da369103f6cc29b296aa7d1d14441fec6895a460218f5461dc6d564fe5822351b7fe7bded98cea345198a2c7fc04f5e8f022f842bd0b4a411d88be682a770820f0555468117242148c371ea195bc1ec2d66980989f4daefc8d6eb415020515831af8dc935d49c3d002ca3530a7301d2f54e643fbd5d252acc06bab9a7203b18c357c0773165d00962fd2a8a74221430b10e9eb13e29d85ac4e3fb6fc93aed60d5c45374df2d769a7c6edbdcb5940000021c000000b013c03321e53136e4112cc2035558f60aeea8598d9de65d25036725b0a66848bebda4960bb42b440fe8be6fa17a76f513c2740186e91e08d19b1d36831360219a0aa0ac5e8d7eecebab06bf30042c616d0ce27db36b68fa2570dbbab86e207b7dc860d425e38cfa17b4d3c44582dde7e424915a0f346a005c889d93570eca8c3e80043a3bcd1802933b3efd0a9bcd4f1e175c3b139c74d8fe467871477193b38d65216159c874dc5145878222e6f8d0ae000000b024c6930ab21745e218abd1d1bd035b87bade5ed881bc2cd4dfd62b9926fbc3d5e288224fdc61bd76762fd353c74db587554308c28a591d3da328f382521cd0277a10d8cba2540cb713b9ddb93ea6f642f451e675169335a720a134acf7df01a7577003c73b536a67e18260df0540dcc41022b2c3891f2c9138c3364a287e0f0872e4e82717428467ed6b4d414b651e090ed3c2d6a21aff030f7ac9f41963b2da8b5846f6fd7ee218e5047543d256dc8b000000b009fd369a0f794ae4b3ed33b8df93ecf01c9805eea1a9a54ce4f717276788048e2c0b7cab7595a6482221a56c35fefded0e9326f7010e62bb9bc24d6be08eb728e241ece56423e145eb05c41512b8b707e420b63fe4c14779e7abef462d3ca1f9445ed3a5df57ac2fa1668405f113198b26b32d8ff5049b42fa53c91808a94062d0f0c6b65667099effeb8005d96f9e3a145a83c42e88cbeac58b77219ca3c12fc76754f06e1bfe2c0c028cfa6ad16d240000021c000000b01cb13d8bae7a3f15253bca3eef739e06d547942b3f652ba2771c4a3662335678dab91ad8884a529656e43158f6b13b0d40d13f38d22e658e786b9141ee5b972424e8c850441e6ca3857c5ab5ee76912ae5f6e3025eb3b06e9965339a61584837994803bae699b2e152a1b716c7027c8c09200138fd9ddcc20cfdef76ad321f1e7d6cbb604137d2f7c6563e6e54ef81f40c2075825d698d1ebe3e38e62d2a7ca7717c5741ed5aa20fcebe6d036894c4cf000000b00e1e67bad8b886e55c428c1918cd4d6645d30020dd8bda03e58d332e8172129226af7e50d2d6fd31aeb46621a919359ddc46f7956afd62e5190e071e65f5e29d0478fd010791ce800f4d6907ea4c218205d31ffc7eac846261e5cddd0c324744778c2f68ccafba155665a72e0e275c4b02dcb39c061f66b8bacca0c261603defe8db5fbb40d125dd126444758d97a0911725f074ec485eb3ddbae1318063805811fbd7fe780770fe4319365d06d081f8000000b00ff95992669408b11d11b0c714a87523f062768363851b17f72f269e72064e97596d022146d7b53de3e7cedf37072d18553326b32ed976c3e418c994dc0a93f397e31b6bdda63a6ea480f6193e1b96d9a857f5cb67abcb99dc4d9703ec668bec6286ee827eef768a9e53b0b8cb1b665428ec4c73fecf87480cf8bcf4384b9d09b5cb4fb53ed9fd1e8f200ca066931ab62cecf537be1f9e69b55f045327fa6e228198849de3b449eaa649d8e5d95813fd0000021c000000b0258583a4b4dee2104eed40e47b21ee84ab393fe4776a1962ac8a61dfbc25a1401f26e3a5f2d700902a17540abb83aa578d2b91eb2c10a76f762a4240d53c6ea3559de63271baeea039affeb50575dcb8982e1cd1abea64f320b8a3fffe0c68bb3fd8d4b537d3eaf6d65fb4d216ab152f1065707cd5a4d4c866fc85432bd622bb1fb14c645d890720f86e50d04c0a6277084b8f73869d85556bf2c929a3b928f5e2b10d4058d02fdc53ce175ff589ae0c000000b0038383d698f57506d35ea1200f5dfd62950799af3b39c13d6eb6b2a318af99cbd5ac26edeccfa1291a58f8cb47e9494c78be935f61e9243dbca339a6a8e165401f25423c525d3fe79022feec6cdfd9011cfceeb27f69b0464b187413e3c889e3b3d1063d3fae02e6ef5afdb35e2f8c430d71f13e2c3f97d346135f0ebe63f71af72338a960e45f4ecf6e0e5a0dbdb161053d16d93706b5e208017e5614ae9b139cf9c69de67e275024f8f3e8ee811840000000b01ddb36a91889e8baad061a62ea52656b9c5517be0760c9beac40cdfba671e1b9d52df9fd518d805beeb1b2e43e17f1b59a3b4e5774e323b51256515b85122d6a8cf9b1ba2b38e386254ba0e9957d52c901e66c86eda778142f3cdb57b6c9f8b4f3991c06da59487d09c98b9cc424fcb802767e44610334df982990ad57ef24e0d1460958263075516a1baf35b1abbc651ba70e143205e1dcb71c040c442ace719552fd319a98ac02a9f3be81a5e6a0080000021c000000b02141c4d436f08ea34c65e3784660a523d97a73fc28a7a8b08a53ae2bc1dc284182c278a77e1e96f00ce50af271a526e5adf284f752cb309b7848f409d49ca4ef2a6a44021369cce015f798999dac62f6aea4369ed501eca6493fd146c1a05e8fdaadb76799bb52e31bcce77fda2367a915ebcadb81b298254ad70ed755d9e61999f844f5662f6bf8b382e0239c10ace80b7703d0c3f07bd6fe54338d35e6ee5fc474e4352273a6e2f993eb169000e0e2000000b02b8fa47a2d1f9aaac714dbe57fb9735b22b08801d375c441003e580502e0b1e820e92a7f36dd22a9be4637bf6fe93c45e33e0bdc9203b9714e71614aa4ebd7c41587cac687a5b69e0d675b815fbc15b3a43510894e69eb493b9070c706530196d994a074e28fa1854ad4765bba71aae60273ecddbe657fad75b97302d3a5cd0647b4f4df04f45f4844b2cd404d162bae29bf80ea3cb8afca00c509be22a5041af6f24d376f165339fdc908c22cbd0c9f000000b01cf4aeb416180086c113e20912299611d84b25ed911218da0a99fa28e86a19da5d27615c1da55e3bf0d6e8da45456ea1c5f266f2414d182421b3a4a908884565cc39843d6dbd457e7acd32d92bf6c82bc89304166b98649bf004f8b7ecbc374e469a34537fe94996aeb7c7c18607d1cb0a3f1b73da26894f450d7435fbbb03bed71efb26d629e411318344154ad1d91f0f99824b1622f856ebf269f559b6dfb3496f1b56387943b9bed54b359aabab8c0000021c000000b0131aceec8d369ebe35b8b7932dfe7b17534b6e4ad6fb85281d22e543e796f814322474efd5eb85c3503b4aff841577f2ae6a5e65ea849c06d4432fe50e05fdf098bd9c699cde3353418f28b84f4764c157c5e96f5b247c9aab16bc595ca9d0f16a9634e1fc8e84211de7fc0c49c3adf810325104003949e390aeb5fcfdf2e71687e30aad4e544658fea6e74bbb6fb6c01c87989721f18fa47ec49719ba099587236df762ddcb90ba7adc6538d8ecc1fb000000b012613f0f1725d74117752b4b06dcb36b619e508b6b20dc71137b7fc46fe68ba8565c25c8dc62fdc45e09888d06c2033ba1607cb65b3a0eaf42ff5e7c889b2e65dee9e4ce76dfba125ba3c9686f8a36a93713fa01c102b1de65517b880b5a6bc3338051a4f40fdcb1d22bb394128dccde288e7a9ee0350ed02f836cc8ef818640db562ba05f9a48184161ca73dad648700c58b7e1a1d336be1e6fd9d316337e632d24911226a4781c9fd984a174736e38000000b021f3915e8978ea1ea6cb60dc322dc190b9b2ceda42f58a20ac1c858af5d3a8677cb13641af6764700b4f7af927288b3e984fe8cd14246d4f1bdad77855de1fdcad226f2f20a6be73560123b63eae804f4ea48eb084980cc1f9a98acf620f8c08517e4e164b94db9da0119741c6c220fe13c7e787b3a2408819bbbbbe063fe867ccf7edcd2a9424048d22f9deb8a6b26f2e1d179088930e5f7ed100d17aeaa34bf8f6198dbe444e5c82994657a7af2c3a0000021c000000b01c6eb29514dd89c1d9639dcc00bad0bc74c0eb9175d32f8db520d928ec7cb0e0cd36e9b588ed7374d810272db510cf62f8ca4a892b799771d09f50cf2a897ee33c046366c3013c161b0338c773c697b15303fd83700d66bcc053a17e5e6150251b59dc3033b7b7da0d70449967fc504a15c202f68ce391c6c755af4b6be56af9b32c3091d1d71a4c86f201f9047028350688c714404bf35ad9c7c3d0ef6b77bf60b3316d8e8cdb1e8d6410add698a285000000b0231c09d4ae56203294710aa28a6c4cc61bb609b6aab288abe177f1f975770c2e70e9c268b8738fc70a91953921671fcf2c59d1e96c748ec66b1f12acf1f73ab3ab6b9bbf27f009c68c29a38e7161725088baa6fe54320327785fc14cbc610d4cd02af5b0b7bac2fa71197c8ba13e58662c3ff7a3f8f845d5b392518cd3634668051821d22165193019062033301a181420f5fa9896b525b281e4047b9d368b73ecfb44e19c2465e1c42fa1bd342690c5000000b00db4597d5cce2d126f7e7084cbcb24e641cd29e43a00bb7f445d53b705b7004d975016837b9bb0981d58af0089e9ac16197bbd8b4e6aa2b29238b785efac2ca76155d8b4771a44a5027e3b39ff69af5886bcb9cf78213e2873f80e5f453eae57439c45c17bda6a55fd4fd3cc648bd56b09985e4b6a9cbe1e72c6e8df6d60697df2cc4fae562f82a7b58cd77c248ab23b25c45f8745a0475f52a36eaae44a99f140944a2b96d9dd0ed44b374d070a5b6c00000fa400000168000000b02efd7be27e8cdcee73cb68a36432f328ed339e533647c8d2729f4dce6a5bb6d63d76aea7df4ee16ad4fa2c294a98752b392d7c674fba88d2ba7ff3d3b6fc635b38a5c8a968777dc653473cdcd1e0d2940c39c154d736e7853d9d1cf7c5e9a40440e6f39272153b157b2c89088ad108781e02cbc776e554ba80125d5cbdac15ade49c0ebc57236023e236de201cdcb750212535e0cd1ba81b4d5f95c8358a4fe6b3a21327c52c27e9762d002013c5fa61000000b02e01d9240508b56a19399b36b265824ed17b1580fdfb06d0f618035962a27289bd6435eec3ecd4839920064b71818ac6c544eb0d3034b5c260891b6ea065545d22ce3980bdc36e3c35a7595f29832836bbd034abc09fef0eec7127904369b2ff99d320532b8c0dc3714942a6c3cbd15b152d2a00c6c66501f3415f1cc67a2b7c0e9987a8fcf457788b29f55fcf61fdf71d41042e8daa44b070b7966f2e92efb7ccde48d52c25372d310d87b2e05a6e0f00000168000000b01934ec3fc6da0ec472c2e2f7a22edff222086795b5f35032598f0c0b5479dd6e70cc492c28da17ec25714adc10620bfe042438b3dfa45364c6113fae97d8bcc3e00db028c72af2ce8e7c3bc51d4c621934516e243d4aa1f3e5f66d8793efa71399be998eab58bf890e879b5942ead1b70a2ed8771c64a7772617c8baf0d492c3a17c430f7667ed0ac894fff65d24f19a18a70be6142e67c55173a2593eed2a64abeeaedc178f4494406a894b62eb70af000000b01c74c13c9f6064fd99f08d97404590fa68c06aaef5bf2c7a254d0732d8e85c67bc806ed42e2fbab9c828103adbeb5d18fbb78522068d4209f73efad058b3c710fec86731fe49217791b0f7cfc908bb64d23fbac33e4fb642005deb6821761316dfed9cfdad29b7834e6c1bad2e5b2d6e22cf778e25fdb5ffb1b6cdc38153407ea936f668aecf471bcd190d446a11f4b51da70e3f9ed95610cc3c87f88756016b0f685b8f77926613b22dd4b0c4b1910200000168000000b01454ab5839ccd5d48e562012cf9f473de0893e7efe6ec718742881aabbf7dc534d4d7bde54951224d3a8cc80edc859ce1fd71a1b312fb02a971e17ebf73d28f13c1b813772501afce4548d9b3955d95a0d5d3f1bc0d40f1a0dd2610cb8d0b1d6cbf7d750d5101ad05401eb2e8ee968c6084ffa3bd18c0f8c697b3ec2762ef57bd5e1129d3d5e1de28ae99a57f0aa71d9281cfe8c9f0ed16fa448b10a108e9359d4d40bc50f9948933335120937e60005000000b0159764e1eb6c50152ee65e2535788edb3acdd0331614f0b11e474bab0b19ed07713d5f42892420cdfbd24ddda39cfa4286b5bc16021ec9d99659ef64773ce6bd5beb99cb22ea3313341f7fc15032f5cdd062cd44802ee3757c60602e205c825f8d44adaa4ad18d9780c5f6ef89378e9313957415914ed788bf99fd5e1952d29d374b07f731dca6bb21f9cdfbb6187cd625cb640b47b591d8ef20e8a1b9f395eb1175db888e0195c75bac7114697955d800000168000000b021557440c7455230f6e5fee59d8f4f2d0baaf87e60075ad6ff872a5106339f030dbe53a47c69d83b6e12838763774db33751f943eb17ae10b9f89bc71043f177dbca618ec8b952c01ad3fac9c13e5bfddb9e5f5d483ad4a88cc184c5bbd242eba9844d9ecdfc7e3dfdc3151df09d09d922685cf6a737bb3107dae6c46f0fdb2aa35e8f3f8e000237c3d1efbc2631b1f61e3cd4c8953eb3c2992789aadeef1428d478f09dcc0aa43342b32a2d956ab394000000b005b258610cbc247cb32329b0d3373351f029cf25207a5473af540d236c68b89238f04c4a3a7926379464607be075f51af2e5e5e976ff6f5ba474182d7616e6ab7828307973bbfe3858ae0a6ef3291668568121eeb330a6a36c33edd1ad3f084f4e7ca34c379c31a6b105f4e07ba6a3560fe21d32f2f798a9e941ebf55351da2bf817bce7fe82177893ed10425b0fc25b08841e0f7991e88239b1372fbb31517df5fc85af292a5fe019694ea50bf7732100000168000000b015804de26f2e073242217ac878980070fabdc0a1db7f948d7043cf6f8380565299b774987703f8ea4edd62b57e6aa0710c72577d752730db3707b6b81af9905cb46f8bf7637c9243a15aa37a15d1e492f270b8269f8025c9cc58daf2ed2d7f236d0569e2e7bf9f7b98bc9cc08d6ade221412559ffa59da9f6f258f98f2afc31cecf7b6873b03ccb35904e547fc2937742595c92bb9381806c267233c025ccb2489db225d727bb8861d7ee63dd9426f73000000b02e0b0618ffc41e8db251e847986177790546ec8d9ac7b20d1c085bfd11b54c4c2a5bb548030ed3d78a1a5a067e316cc3d3354db99e7dfaab079e5cc6ba1311723c47419bf52a03f2c144db6689808b19d9a561d2abf6e40c431e81a4270972e8e5e1f2f25040290a455c06a9082d59a71ca84e7cb36c5f26e5812c73b90f19f32f8db0babb1b23429afc90e4d9a43b5d2d0a8e97893c844fde5a21bf9da97afa5d87f073a9ed1430df2d452fab8bd63100000168000000b02dd1253430ae27c49838d6212f3dba007b5cebbc12eadfc73fe40792d9a8f08c78c12b81f78bd478594944c131e17b8e197291df68edfaa75dae06c707151f84a607bf63e962667ae9599435ac68ce99dd0ed7d02169615b252d17ef20dc178edcb7f42ed875362d617ddbb03f1bb5040ab6ace11c31c6bc8ec3e47a0a6dfaaddeb364125840a27eeb343101e8a315e21d2fd6707ca1f113ac436de6742e65bf3141ced66f745f434ff7fb2a393ae3e7000000b013f9b36f974bd004b8d6408ed33d04b3575334d99b9bd3031f07166b2564c95e01b77903f659983622101a78be1557974c4c914371738f59163e987aea95bea3f7392122ba771b71c2d21835e064bae7d1a556468c2786432a0afa082792923fa76e20e0b16ea4bb60af728c6a0f2fd62cf7407b6b0e52c8c41bd52823da3256954ebee116ff48e513c316f5db19eff51d258094b89cbcb00e0bc7709c465c5cba6c90a9b09ec69958fb266124ac3eb200000168000000b0185a39e63e9995f0a4d2889818d093cff05565727fcea3bc95bb622aaeb14659dab568c215c165b400c5492ca9f27843c4b73870a175a43b5579191176dff02220226fc58976ae0922e84d56da653f036332cdd5d8cbcc626bdd46aaba9bcda3f9aea71fd9af3f1751f104acd5b714b51650a52967ce1c6d34b47e2363ddf9493aed5a5e44bbb1c74621011c12e8542d069dd83d7b27ee08498f50743badb48b8e474813766d4afbc8bfc08b7f624709000000b00f38f42ab2439cc34fe084bf4b16de18175331b3ddcf418501d2bc8749a5dd146c516c2a4d987ebdef118e3ea65499885c3ca98a384e068d8f8a8840b06baa350a344846f6ac81e8c2669668028f2da42938aa4d5175c30b090a13b8b09a3136d7d45a6ea4658a9db6977d2084b782751618e0acba63b3ed2673856c9363c06d0b7366064437926df105a80b858fbded11bd8c9fe423c4f2026f53e8a280e5e11e5ea58f5d69ce9e410fa52295c170a300000168000000b01d85284fface431e6ceba046dd40ff46ce917bae9a003e806d71d1f73ff64ecd5aa487d0c68aa0421c591818c4036138ad09d590f7fbe42a4eae0ac065329eb25fd06c6d48a2bf63008911b2c28b1ef8780f9a4bf7d5951e22dcb4be03874627b664ad40f77f10e3ac9ed4c4b7c873a31e18112cfd96c4f8b96556b6d30c1a8b06f69b7c30448d61bea7b538d2b2347f14a9590b3334f4b94d82d8cc55582708343a5264eb4a9d7356b5db62ba72fb55000000b00fe3d5641a7757cb3fd7197b9c71e00421941f4fc71d50f6a9aa45af24af6b8bdab55b59d20b9c7d40358c1f6336e89052b5cb26e52fd86c041b65336093a9caff66a472b48565dfe89d9fe18167168cce7572c2d45e4c47ba7690bc730b80864d901734200cab311748729ef30f934713bc8b6a993f5c65f9d2e5e327342d699df05527b5ed19f4c2502eb3335c533a03b8c2e85c05b68ab4cd2bf4f226c25d22c9bf7ebd12bf306d1a9859ef42a72e00000168000000b0254b974066e7ce1262ce9dbf27fc0c5b59a386cf1fe50f0b3c31446fe41d2763bb4270e4e162ea6c8fef13c7015d92d250ebd05ef50a04318ad3fc06e7f51246f7c60666ff298127cec08bf2e95e1ea15fc31ea92631c1014c5c377326a3101c6bb66b287b643483e4427c930d6cb7292187f7fc3b3702760d074ada85da295d8742a26019c379b3969a44f3cfd7f2a90ec3727c8e9db92fe5bdd86a2a8e1e118f6cdcf58cc626e3cac88eb56566a92b000000b02637059839b160723bce86e01fe93bcca27a0c8f63d61b85085ed99f5c383b3f8ea592d5ae6529e0987460cfbe0c0292c3df941e76d527aac42685c9f6e4ba655b6218d764d9b5de9fef87b0a8f4262f8f75add1ba6b1dd889c14d1fceb01d1e6a087c2dbf784a75145f5f280dcffca20c52911605cc234dbe86c4974e2f314a147fac3adf709f80db2fa5a6d70b98101b0c1f0e37a571136d715a50ed60bd1c21d846753bc3652c43c1413c49bd3bad00000168000000b00527c1520cac6bfbed00434627a2105f992d3d82af0866159afe71ecb7a0b97f11f3379201a5b039c9bccd95b0b13735be2b89d6559cd4b1cd5f8619038788d0a2715d2fd17f2e0613f368a801a153695a3b70ffd28bef038cc5a9548799b079b4d8fdfdc998f65579d0d8cf8c9d2060043446386e411f4e45011cfceac2406108c9d39b0fe41a2d3e9bdd546f785d6912b4d893f3b431927ae26d1a06f83b35ccf94b85aa26ab886148342dbe3c5197000000b00bbc58a54f543261391469d50ab865dc428a1ef0eff0b33ecef92efe59c984612dec1a13331244361fdbbdfb4a38603e14e8bbc32e977ca1dca62c001a70ead92fe20a80fea4eb2243eb0adbdfeb80dc15427b9691682eee89fa05336705c83c4293505d187d821c72080069de4273ba255ae9c85084c32cf076135366036a6da190c1c6bea11680b5c4b20038d505fc2edd17545684a4062d71ef14e612ab17ed0d96c2d2ea7037d26dee162def406900000168000000b0211f437cccd63c91c35106d4896afffc64f7cc40a2efbaf56d1df6d192d39032eebc57acb2e63bbd34217506bbd855d2a22546752da6f9e3027c3991ef152ebb5561fb7164ab71d6f25a91ec70d66b62f4f2f89f9816cd41bad3b977093b1ddbb2cd4e8316e1b2a45d371b873ccf61a51a117e3767564f9a6e8d6f93ccdd29c619fee8caa54d6324b97f3f4880e202f608d368b7439854d856999ec7f08af8523c5bd059d44f1def724892eb936efe90000000b0175bf999fc61d7188c6c6ed4cb8b0fb1aaed8d8b9ae2a3c56f1363d92046c7be6485c58c4747d4601363616b48cbf698c22f01302b106eac4896feaa09e34f11cf36c4156a3fd2272c53df18408c1fa0319f41d74d8dc5aaa8a81e89f372cbbfa4b4f3151ff781df39d92932c47c383d0036224be1a8573eec228abc967ab405d39349c5a6c25b450f100ca3551a4c2e048e3efb117c4d2df8f7bc0006703a0ae28c816d06f390ceb845ce946952eb2b", - "txsEffectsHash": "0x005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd6", + "archive": "0x106b13752302ad4124fcf104f9675f27c31c9e83e0b930d68b99520fc0ad2d79", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b0092e3f60b9708a5c8f0b0e38703247905f386f935784e41e1b5761e462796ac8345dc77bf6d25314c893bf34347d6096676878a7195aee857a509c3d2e010579ae9c4c069cc9f6871516495dbde8e61e75846aef1e643999237a5bb73286628ba9b9c40abb7d1c5c6782437e8c37fad121e389258f1fe7f8fce17b7e851439ced42dceb233d0785502e95bf6002e949a1ae8acc67fe4b2e33cd04de86ae58c2f764a433a1fb701dcb9ba69b3c4cddc21000000b02cfc998123ffff79022c63bfa695c53f1a71e492983a6eb3d42e3122dfc7982726d589c3d7db78592644ee23a60fc6b5d6c5ba5f888aee5f22a0305be6bf8e82eaa908f78ca88d4b16244ceb70a2fa9573e07d7142ba31c0016e4e49e743c45c55eafa26e712c7cdab86320b4023b1df15132a40642ddb502ad8985db280834fdc7ff9416f1d638bd05cbd02937ed0e6069a2ec413889367952775d8038dd5e374858504a2b281f4d14f17dfe2859eed000000b0188a7503bf441aca62d9d9b1761e8a612e5e7f02bf1e3e5ea970de3beec0874c96fd837a5722b23189fdcf95953c5f3067dfe0aca381c873128cfd9dda28e20eeca8ab9c1384c3b5a62ce79f101758edf2ae08207c0538f4b969db3e35c843aea44b1cca79b6b1ae71bcd0b10007bd890195fca649a53cdd0c98d176e4afd77f60587e42807fecb33a931bbff622231101c334c358302833c5f44a23cd61d6a70af67cceec733040b4bbe5956381c01e0000021c000000b01b88783f82543308ac39ed04aa7e6cf986c4751df927c17dff2f468fd5ff594756e35c38b9ed7b8084bd6897a977664190e3c4ec87cbf3d7e0fb094c6010676adcc51ef1964cff48cdc456625e184b54700bb5898f546912f8ce6830c5ac0facf7306382fc128441aac2a1c15f268e9103bd0dc8e943abbf8cf46ade81f6125e392bfb56df43d7e32c881fda29d42f0524cd5e9f13749ef6f729aed292164fa362edc59f35a395e79554b115848b580a000000b0157117d66a266934bee580e7f13a17d806d4750d8226775cc8e9df32b3a9707a6140bccc408893b919ba4efae827e3379ffca5268395d119bc2fcebcdbb75c304b0185103170db64322e43e8f54a7d16b492740377d9c75872a0daf2cef0f8d46171fd9dbbe9bb44fbaf6314d471f9f01a162b428df98788cf6723d32c77ba7cc2da73586a990f0c82ccaba812faa0770dc8da9b6b94b479ba4705e176c45eecc897d453218fe195581e063941792d33000000b00e8665ce3d21c817b78e1aad7e81ea4b060f906881de795a71257bc049bb3dd71a89a1a48b36ba1a5d92ceeffbbf171edc3d324292364159304840f8884926cdcca792d2a662e42a165e137446c9923512c2f6b0ba3a9bec6d32d81731841ee8527ba42ad1253ed1bd496038261457e22a9aa6d3e0f44a841a154ed1b1e134060d00a87f6ab592a69c9cc44e3ea87582153878ba1fa8752496f65c7baaaef65f56d874fae8938ea339845ef0baa10dfa0000021c000000b015c90254293c9a63ed340c7c88b9cc037a914571e9e4e1b096b9b2a0675b2a070ff47d6dfa06af9497bc3cd7c8ffcdbe34c1417d4a68587b5d35c32c238ddf0e436b1eb35eeb4bf9d3600a21d4de84c979dcc612834615b6b06cfac294168e1f4fbe353f3b18490e23242bcf14da218507234b22350b2ab1355e37b9068163dd70c1dc2e65b138d3e9b3fd3b9488bc292dc162dda34899aa4d1a02074ec85e04546da1d0935cd5e03f950df51a60852a000000b0214b7feecb2b2f5e0f7fb566b39b4f2802b4e3554ddc704bb606f686c7799c3f059f4db2696321bec232e52d5c361ee54a8d64c8aadb744cada3e5913e92d723d1d4109f0b5acba2f2ef3d0540f151e3104b87eea9b8746266f953eb8d69ae9e9f09023059e778cff4a085e4c04d5ed2187272d4f147b0d3ad5c665b995cfd44e9ff3a5ce0d8a02e5ece0e41a95bb4a41b8207a932e63a7066169dec4249f1a833e6a9125634ea21d53ebcb6bad14753000000b0124726405870ecbef8341aaa378a456764b3788626b965e36da06732008ccfb7990c10abf05d891876606ce127bcdbed1b360ceccd506948838fb39a555b85c167ab46833512f173ea766779bce6f4eca85e8d65056766d75538076d23bfecf61e982b044e4228d5de0c420e6756d7e70d7be99cadc9a626ffccea7de80f97886e9c1bc0416ef4569ca95d284e87d6ca07a0b3a7c54e0673efc151f5f6c4230fab67ef4a7f7c634c5047b19c22db427d0000021c000000b0123e8e19a3bb85a36956f58ea16d5c1901f35ddf86b72520d6808506697fb71bbd6a059df6e815a058ebbf74c5f6fe74f09a82a39bbd574c3f8f61e6f7cf0b5b626c51e9b49490f34d230c53f85baa4ae13f196eff31164de346ec4361047b8318d40ec4bb52a90d792e1e535b2054660189cda63e702f48403dc3e209a340bcd91ad1e297e3052a8e0803b21c08488e0666bacdad237383b56ce969473c639e8a778ef336c253ee2700dd2ddfbe1305000000b002df4eeddead89c893c671ef1f0a4993c9b9447148fee6754199a225d4d12fa492d720f2117daf5bd0896e8d175d21d6125217dc5ac29e5f2fed0e1ada672e92b9c10056deec81ccd30e7a116392706886b029cc55240898ed11cad0f0b07aade28856ae7edd167a80584f24a2d4516c2e812e9e8251410ab8dfa79a95be98991491df76ea0123525d9bde8d75d16739245ddd8b541b9faf96beadf5a05ef6d8ec8e0fa9e35d8e0cf9cd892a91a9bb06000000b01563d20718b012b6411f1ef8c2e5ba6a304d30e7ea4a2b751849058d07977abcbc3e1a7ba424c5527fc373d2ef0210abe63b0ebbc3bd52e72a07dc0a812d51938fa22afa7564afed9762c364f77c7d3fd4455a45bc3bbcefa863929c879ceb12032f484ec384a0db3eb905612287ddf602854bbb649e49cf8b609f1466187f6b7eb1f1c5c4e3eb5977275356883a68db268e81bebc17bb0eeee937997d0fb5f00eb99d18624fd7e2d55ce3958fec1c600000021c000000b01d8d450dabac323c913e3bd4ca5f1cfb277216deb6f8d872cb0061be5ddf61accd4dd6ef59015bc500be68e7a3225a56963ad0e37fc9c9b83fb2db66fd1b32a370d85f96c6845813d0f8de201e89569aecf1da9c7888992c17dc9f73c8b70285e52bb85147a1ea952ca662db7dd3b9ae06c9f9cd59d6face5abb45a246d1bc8e6f38e14a503de9c65f4e3934d1c6ffcc2cef6495b730fe87a262b4d2b0389dc981e9c1f569b5cdc0f0dc70d2a7f9ca2d000000b009f5a9c85f36cc483b4763d510d7a42145c5631ba6766dc6c125b7bde5a75c6fb43bac70bf6a5d8a83c2c36aae17782f481ad2ad55d3697b609dd960a0fad0e4224a21bc851f9639de0a0acfc2ba237e8dd99e96185d343c28ff62d9a5f9b1db8e1db8db9ff0c21e2c7ba6a43bcdcc38094d09095e053b276361edeed8f96e81c2bdd33ba777f7c9a3b4823e6c9fe3651a355861278ce7f98acad4de5de28eb44df7c2bd9eacbfcc69d7168f135c83f0000000b01bf626e96161e588235a5c2ca57dba3f8bdbe41a9893239acab4627db4b1b29fea1a0617629aaafb0a21def0d67bea68c159b8032352758f0ecff93706194a93fad7c164d8fdf9323b427b44ff0bec68b16f9f9b070258044393b305a85bd915f489d3b9953643127f56b4a17294729d0076e47b0e908b990f1fa759c3ff6ff9194a879ce8298ac6b9e868a83c16b7ef02d2ca3c5695ccc973bdf45347b515edb76d2a8621551aab4f81f30b9fa8cb5b0000021c000000b0084addb29d84f3e51c1efc57d7f93c2c409d49cedefea10709bc12bf3e81b4ce682779febd9891e7ea5c9a42a501bacab527e2fe75b1a3836c56173652a6e5c31f502d96026537138e8c9bc7a5fbd5682a18fb8b9f88e9437876e6575ff67aed3199764929324fc00de42389ccd743e509f8673aaafe29b780d7527ce28c476e88e623ce4cf2387475e8060eb4874d5b25071afa216fa508abe35cc310403ffdc7e94651a0d85cf621f427f93b1a20e5000000b01239a1a0d27f232db4642f1960cdc8dd3a359878116fac9be00a5c034dc8f0c864103c613246999f5f2e171d5baabc29e90a21eeb5978bf0d8c6e3cafca18d9a6c53e05c8676e3e42b1eeac71232cd30e1984f1626218030c47a7335be316b90205f5f8b014709385bf47a9eeda02893114657449f38254b1c8d4916fd5dd2b95271b16f266aa5e6e7b10d931e63c84a0f6375db67e95b49f465c60a7d319eec4888e4a41f8c822bda4786a2bec901bd000000b02ea772409114606622a167dfb9c47702ebb0d833ee12dd955c80b22b5ae32134e8eef2ce068ee64f7489706d2e7900a0a7b8d0630dfe8e23597850cc23798860f44637cfd2c9398f3b91686c5d131f5b5d4eac3a4606b614049098c7a6d50f8ad88abe56f6e637efea5debde7c46c2da280332c76fe9554ffa96e8f967ee160694c1a1da8b2f8de3494166209801c0e60ce961f7dfd8a682d9391e8f41ab1cdd76cf47e56a1d756b529d1871250031f60000021c000000b029b036af3dc2b399b5e02d39884ac5d62f619511b3abd9c76e349514969a30a5a9d581ca0d060dc9d4b248e03215f2cdab83c219dbc00f3d667b9f3d50e7edce546e45cdb30940fe2979daa9da0209b6cc44455164e0129fea856b140360aa70567781c322611fa68f53f46ab19872a71f802af1d7092a2161dc7d0dfe9cb3bff1480e2fff040841750be72c11ba40812cb81f14afe6b872a07df11721dcf23bbf6c9efa22875f8a45bb57e707bd820e000000b01dd0f04b3bd14e06859382c91ea0bd9441a329f2ac412a6ce16cc08e0610ce66d682e99588bcfa76e2b4765cd8688c866c0baabab9ff72486cbb2912fe2f71f882e25a85ca98d52d77654bd85494e23f854adb92e706f9f75aced2010b763ab0d4300951dcf79f95d796a0d067e93b3c11e6fa40c84b04c527718ad1e573a6a9e8d3a792558455d128691d6ad0cc07fa19847a7b21afc64f93c06898246f6f69fa7bce7d5240d32e20d613a492e49f51000000b00000e5d3b8939a51ddda10cb8c409a5f4c7bde9669dc5112028f87c41be8d240e6b3102965406dd772bb3ccc630bc46a84d12b8926eabead321b037e07da5a729a787bcc3c6c4005c82154acf7cd8df4adac3edb1fd7c74d46ac6788903438b6651ed8a80189140840ff16ab7bc994f70129b85e23659f173ff6c19a76bded0b1d336be090d92a41628e20a8430a6bd71d3285e4dd5a73391b85a5d728da952c8a39e7c8df9e336588a4321da14d0a4a0000021c000000b022f99482c232b00a85346db49c69a839d812ab53e728b46aff2fd28761af3902c5d6e07832097f1b97aa04e3e427c3340c3753def5f5174de892b5aaffdff978a36b3173a6c14f3c850a57dac47d087e795dd6ba10b944e934330091d6802e2a8d223ea6d76c03e28222947a5be12d8d2c20951c830d8d1cb496ac28c50d929fb8a2d6157911caad0dea1d5408215aec18ce95ff3035b23b5bd6e6c94a4fe40d0eac076ff0a477a02ddcdcb3d1211941000000b000d4663cded1a43667e69ee050a12cea1fd228fe908eb8e16a6f64a275504f787ab40ddc4b0a1aa7b11e397cd04d1777da0b0b6d1c741bc67c10457262dd62507aa73ccbcc22afadccb5a2ef908d85cebfcb6e8cf7508e2ced4f6e3fa54577e1c46caec0b83297f2f3d5662b7efd25e50b6ca736b6f79a0dc412f50a3ccdd1fe64a7ec1ee434aaf7fb82d21dce03861728cc92b1c88fc71b1fb894daf5ab8989dd1525d5b2f2e50d75be18cb9125492e000000b026dde6a9a175b2798c089853f138c38e542f07d4e3f600c08c93119ad40c96a85bc535b4f18b421f715e7fe2e67585946a9b25ef15db480b024cf55f600eb99832ecd42fff0ec0659971bc525bfcf0e1e73a2f32b77d9bdbe77b9bc0a9df841b77b04782b312f7716e0ede7a12e149692085e7b47a31880da43f81d4ca3a6aafdcbbfb9b6cef868ea02c904b247cfd2d246706b6a5954f0c1327bf002f4bf00f7837c8f753f14d1fe2cd834b29a53fa800000fa400000168000000b00ff5a4920b9aca2a95778cdf377a8c3731b496b5400a5b21468168752b2af6cfd967ec22b7fe292f4723919b7217ce57beaa3edf1cea44868649b913ff0241ecb6ee404a5c56f5e6fdfc7c6b2769181a3e420918b8d70dddf956c5ea9cf381d2099b92e7934e47ba11527531a28b1d0623346e92b3cdf8daf24a5155a5cab133c1eb82e365abf8af47b93b35b4476c62051e0b32e46499d64dbec6234ccbf95b74f00e77b99253404804873adea36bd8000000b01e96491e93fad07868b3c3341feef837a9fcdddf633fc4df4315c27a7e30f64dced6a09417d5a3e38f131a0303b453a5bc68f6fdc65a2061636f440a743656bc3b4cb2aaf347435173ad6438a97faf134f673f2d062851fd42c7ad0db4df95bbbd25d8fae628ff339c55cdda408943e32f6c256c1bf02fdaf66aef1462cfad5d15b7f879d617b8bf5b81920cf19e4d8c1889408500d7ba37c864b8dfb2f8a9783aac4b9af8963ae236e1805c4119003600000168000000b003cd1e637ff4b7d4a03c485864c3fa4cd77ddb20ac30b8374244b262c84d4489cbf42d4ccf532a67bbca0ca8de2b86265330db57033d7a302e204245b650e870cab6102dad608124bec6c99a50afedbb1071bd4b78008c7430e8d0d4b573e902b4fc939cccc737c1c6429673a8acc1dd0f728c29ca214ea9dce7adf59e9dd041a7e210ae507437c670dbeeb242a9a5e907b91b7eb1f52c4f08f114f2fc3da793ccb813dfb4ca8719a09690d8eaa7e84f000000b0006e93b0692b580a78f53407bbec29c72fa56eeeae26dac7fc643edc80060234ad64b4b03344e67f2ebb7ebff602fb7e0b8727d14505ab77e0b23b29b1eac7c7535788b9edb02a62cbb7876ce0649cfb861c3015fae7f24b787650fc20c68c5e8fa89fea132ffd95c1c725c86c2f1f23214104a6b3c1959994d7af1b082dd708d49298b651eea029a94caa653f318a0e1815cd5ef0dd2f86c2b9a6dd0110af8d0618bc0fd836a870727bdd94afbd92c100000168000000b02a90915422e648f10e6c4d3eba5cfafbb584c9c6e02b703e88f54fb6ce86882167a892101424b46d61a2505463bc50a77e07baa27252365b81ffbe76f4ecc042b951067b8352a5d73aa2978b252ff1fa50467f9bd867928d63277bf49d76b0281a80693f136da096cf39137ba8d1ae6f0f566ba461908b76eca33cf3b12ffec1728552a0c50ad73eecf735ece22914dd2ad0adb5e1b1a0c2d378b7baa9c3adfb6a7d9a5919b9d3bb21479c8877232f8f000000b024f3015aad861bed22754e843948e14ace0b2816545c4b96c7b276f475f8085fdf8840777012fbffa32d8cebc30d98ec417a70148be7c45bc6b3711178a76628715ec38e2d2caff6e3e5a30a8ea5a7cd375707a7631b030a6c0ac0f9a3f972546c8dd97145a76f352af07a24456d9ded2788483766e0e46023a06bc741a58331d35c4e2c27f2c2527b3501973006a49310d2b308d3b6b0cc00a10ebb34e2a2435594d0f642eb200e2f56c1a7fb732f4400000168000000b023366979727be42a6d41bcb0d2fda3dacebc551fee8ef87115caebf5ee7a9cbc2c666287d9b2faab766ff8ad9734757fd1a71d4476c928c10da7e5b044ff94fd9d819b237f84924d262bf168a1e8629f860eff1559f2770bb32f226e6ebebe6ee2adff7b6412c481d591b2a74450de1822b961086c73903ac31d113a7b056ff082fcf0becf17946a9c1681c87296b6a90d7d5d844c3770951b4dcaa4a57c4cd7299109302f79befd43f8fceb8b4033f1000000b0212896c3eba65f9206e320a43bab88703016d41279fce7fa789df648e56c30d72e1cbdb682de3ff2fbb5ddf1d17870f182e3086cf1e23d7ba73bd9d7a336b719c13804f2e1116a9729b19d2ee248e86ba0ca9837edff0b5f0661beb9aab8607756baefb7357f9719a023ced84ce8d9e101e0a69bf6bf0461baa747351e2a928071eff63c80bef20a51028dcc34b46ed10dfdd3098155ead02a0b8ca52229360ab7aaf7354a4a5cc70650c53d01baea7c00000168000000b0283e26bb553cd71bb0a508c23381ffc2bef86463837b03b0117142f9a96d7d316db50888cca7490e8c5cbd8e598c85f90fecaab1b3f1ef1a7d603d8e6e86b823eb105506e611bc5150bd0d38ba679b558b56e4663cadd7473c6305e04a7a7cac2290a9e9075c55a49080f7fcc602177227920a1db0932373f071b425c866d02828e30c05a030f7431d9d43a8624c7576297e12b71dd155529ec460bb7b5d8e9d560adda40323248c9b9271f5a9c5d292000000b0050e5bbaff623ece5185042bb63214cc0f53b73a75a5769c4f51274ac9dc4792081851b91bc6a45be3af07f339e32088ab523e188210ece64f0d5bd535ac78347d330552214fd1b9489acce37fbadc7def0272676f2837f086ce537d1395fef39a6b15ca710b8492d0b37818cc00e1fb1b0876458b71e9f413549ce19119f7361da9b64e9724c7a47df81d11201f87eb14a9d2d82df49df06e1fe1eb35f711a9e3e9e8a77fd52e69dda43f23fa39203e00000168000000b019dcd745800d7628d647f2338144df82f00bb0a7e9defbf157e634cbe3cea9848f06b1a2783e782c5d6d0e4f7638a0afefa1d6f7047b7385825714b606c50caf541aae5453163e1fbe3c2d13fae4f54dec6c89e01db90e1b4556d186ce1de75655da6e3aeec1b1f7804295555541ed9926a22f49ea3512c2fbf37c83cc8da17ff427ba6313e902efd02872a0db5a876f128647bd1411648e0bbb4f8e23a2c0ed82411941572fd21a28682b729f1e9b40000000b01c31f457ce5f94a74cb0711d96c51a3b13cc814c975731a8c7b909b3007616c097229089a3043df16d6743b61304b21ddb8c1978a5f78e9c7810b043713cab2cc46f321ad02f8213e83437e9f465590449d3d2ee704d3f9b7a19b898751c93f83efb3fb08771b76f876cf73e1eaa0deb1872072f3182020d5cf5d5abd45640567af8b569ad0100ebe0c1bf6b28ab4de2277adfd3e061ad17c2cfb645239b03940aa5b34aa452ba1a2dd087120c2cdab600000168000000b025bee25beabf5c6e1d6042be35f8793034826e6f892c704dd8766554ebc668c9b6b9fb3fedcb4205be20b8aad41877db88aea14680b9f2a0cedfc24e826da190577830376aa522a78e62516ad7fff179dc56632dcf32e4114143d93a4c8f5b5759417eb71d82af22138fcae9738a2bab07010c626850a323d5b96a68589c5c1dfbe0d04a23cb3480c46ab22629b88eb203259ee3de2a5c4d0a920fd63025dc7645cd7aeb39bf203c1d1db33c7af43543000000b0159ba2bf7908f5f7914a549b46cc9a8c105c904c1453a71d5b2b7c83ae21255ba8439cdc3791174bb5a6c52efc690bec06e55fe03ca77c94af85e7755518d21e38b16ca81138c0932e7b005c8470fd83d13a04ec5035e91e1e1ab26e6a65ccd1ef69f954018bdc8d87b96d65a4c9672f301c23aea342e687cbdf257cdbec3a64629ce0f14a7388ee35bd23c3f18de26029ed2d2054beaa82c45baf7d7777653864f5abcaace4a83a46fcad15f874251000000168000000b024b35b9f3911de63afb0b76e19331fb9f10b6a689e27991d68261620c0e0b9ce7622c6516115a8e598012fba1cfda1d01e2564c96d37058c143295751eb98a7d3d5a71efbb1d74dc838aa6c71f6a7a8115b08ad14b82912b776ccd54ea18f81112fbdeb4c7baa0f799cee3a8b219fcb21438d26e29073f6f292f01955137f261b8f71cbf7beb7aa081699a196ebcf09a2295e96ff00c5da9444e3cae0167c9ca38faf7f42b1fc28e684ee7e9861710b5000000b01c2c6118980f23988f6927e05147ea488c2def177883a4ee19482cafeffe1d7ea2ccb9e6f7cd7d6707d20ef2e838c9af1f80e3fadcc54d5549bea72226316a9534dec00e3a4477985392ec917562b7c13c4351f77516c705164fee42f02b4cc8286595c84484feacdf68d244eee9960b065ff54de6e331cf1504285b4b5ec274a1de437dd87543fd792188604007dbc4046c8e290771a671222f52b4cff4fb5577cf04f505e4c5a8a4b12a3486872f3e00000168000000b01b33cdb2f7005b46c6d5ed15237b28d4c824f5e8f23a9e8eac4634414a12c6b2ff12538717759da21db39bbfd89d4b832d131e33427af0a40b29fba10d82ffad7af26bcf24ab97a2e6b5dcfa339099362ce004789b108a84d446533a7dd52523bee4cd15d3bda29a87f304419ab2df4b013bba3d7915e274e3a5bd022fec27f1cdac87faf28a9fbb08878d9caf6708070313ed304f7ee2ad4b3b15062e51373f68e1d7388fb9a0c608c8df5d4273f980000000b0211334edc2663309882edd9fc69f002af678e566e36852ef232f4adf438e923f5d4ec7fa1107c827a2d4e03d7c00d9b2204f39f3658424d5ac4b33bedaaef8d84d62ffd0530208bf2b5e73ab0390a658f44e794f53dc46734e00114599cbf518f71847dd3ede328cfdde5eb181599c2000e6ba04e5e42a4baf86fca65e046985f7690c221f1a1d19ab78e5f652e335da1921bba4c3b9704eacdbc2f53a21f1e83afca08273f5e8870e09081595a3599c00000168000000b01bdca5f7308b656d74675c0ee8a16e7c3b8a10372f276fabf8a26044bb211e1c6af37afb9057100b3ca0c4c4a88f40de082f37fd49e0cbf3a46c0075212018cea9c67c096dd95f998ff8bacb928de8265a584768751000af330f9209dcce9757a00f887ea71283e5d66aa8f47c980d6b07e2c2806fceeca6f89621ece3c7775f6c21caeff91c31197e7d552f4bd84c8328613756bc9632187e943bfd8158c3f5e080efff1509ef1f19dd6a1b5dd7df49000000b02ee7b2abb9162dfd01a9fb29d25591512ed765f9a2cfa62660c6156b030dad35ba704d0529b670a32c18b7ff084fd4a68462ac8b85f1ede1dc895411d71f87542a5069e4ca96e6a68a42861e4c00b05213c0f4f5533da25b0b0d1b297972e6c4eb586eacbff503655da99c087a85a15d2111e24a23ed461776e8c3a72884e5dd1a3b947b77e53ef3a90575b93822a0c9012da1d40d3eca7c34bfd027ebcfe9c899be32e82e2b5db6520107585dfa677600000168000000b01c4dec64a5b82e5a50331f519edf923faa2f99daacd1d98e24b49b49c4686c100c41112eeae64411e5263af627c7822b04ea0fd95ce91c686dd563da44b7ee068c95fbda9ded65dbbf8cceb87fede49d751a4c77a58089bded8221851ad1b39f2437b5c9e1f31cacda0dea1c26318ad723d543dd20f851e4531679aad1f37b1724c1f11229a88d962b189890f21c8fa22ebfac7aeda48fd0b3f2e89a65e484aa78355152f981c4a7efb392f68185070f000000b02bd20c315f19c86900f9f9a8a5f5319cea40009f997f9cc4350aea1a60c823c9c9691246f3e737a0f2f7c9cda2aafb40fbd690b584234558c6668e0a19a138b2cd3a93d4e4db78a96912dc25b7e1fa389836eab4cc314eac0dcc3e7ff737cd8b17aa3744eb9a1cd64bbd9093e4658b691582e1b84f32cb10e05e97d40bbb3333a4c2a0582226cf9188f2501fd0db3df10b948e2530c744a8da77f015fc0108a631256a799aed3897aea3e51703a291c700380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01c5798cc4212d09ca98a16e8007df0c0a29a5bc2d759b4b3e99f71f12c317b723506d70c8731dd23ea7148c0b6ff6a2ea9c51ba96245f8d9a33791fcaf86c1587edd09c9da6c824ccb1a41e33a0cf75bca4f05189b16e77c4985aeacb9d25bc36999367216c8e7179317617537b83a0d1af32271c9c3bbd210772b83ba39b9624bf56d8d390a299a3baeaa212f3cc2b103403684a3758a4b691555fea447c2bfb3c313cbc4de857bc8ceba2be7f4f0c6000000b02c3f840d069f5ff11a8693c8b716b63ee2a038255eb3d9dac891b0bcfdadcc2423dd95ef65dda61888e817206834dd1c237c35fba6a973c1a260b8b66a5a22a2de36a518aee7375e570219dfc85be1ff3b82e23f90d2b6c939f2c448738e9345f9d92d5cd224f19e2b983f7c8b45235519eb5c5e646baaaaca81364bf75b454df0146af98083660f73373fa2bfdaf3c30903f9715d0104b1317b5c6f934d1eaee03fad42da220ae9afda3e9583c32e46000000b00ea69d082942c640c5b7a5f640a725170468f1e4bb6e92c2e395a2ac4406831e731d73423b730f463b7210de885e9b874265d1f0345fd84dd04d095657292357d6b18eff2e8462f91f3775d78184f877cdeb1c3bf2ab2834236a8c9ef0455b15d000a322b9e43caaf172a62558438d0c0fcdd10ebb61ce3d54000dc5bd76875c886ecaab4f28d79d283fc6d6e1e4534117cf524a20985eaad369975cd613173224d3ef6f848bac19bb2c13ac3e8753d70000021c000000b026c6c265886d13767d1ff774fffb138a5895bf1842772faf3248194e467550a2aa65c20a4c575f55af2c41b46717698502e0430509345d8c954dfd8f8ffbf52adfd4419cf16e17777b32f68ce440a44f91a8d67b1cde2f7b59ddf1245a20bfd594cea7406e467b9a4ebe3112e3c99ee8122ac0eb4a8f98042c4fa4ddb23652109d57d37fb6b94140de20badca2ba6f1c26d540a3bd3da93e077a2dbf220db53ce2a96f0bccd80497ed9452926e170e25000000b008915d840fee443b0a298c7956c7ad0dc34f3c56ae668d9c4cb1e91eb53306cdf2354bfa97bdacad99cff5d92227fd43e21208d9e2a1713b28adf0b046f6b4feba211ee7ee9c24f421b9520dd374db881e6d91e51de92fb72c00283e62194b1eb321832948afa0e910a3b583b85976a319a52718967cf9d1d8c1c1ed111d5a51c93c933b48612d12857d8cf96d53cd042666cf8b44f361dc942dc0c865a6c60ad86471c89272e0f429a22b4e8e813e3c000000b004a4e0725e1475129221678483b23346f500203c4c8a5a82950581027de1c41b4c8e59136aa2975953e08b895eda0c651b111f3e5d3bb875412f6506073ec4c226837e175dda2c69085080067cb95f642181bcaaf2ce38241a9bb138cf219d15c64659cd4b3efdd818e53364f6d136201a6f507c1f381f77fe1ea662839c34dd3d4fe9f8c1154a485681372c4fdb9d5a2a77cf589e906e31cfd47ec11de1ad3af24389e86ee50f11d6e8cfe6cfc12e990000021c000000b0262246597f19c3d214e3f4f2b95a1bb83bf8fbf677a140b1ceae6ecd5d7f4627225c64b38d1e1660e262e666e7ca89aee185f037ec31373c2b8457811cd158bcff350cfa4d3ce9c48e01e59ea6549806fcf27973770bb30538cf3c0df355211399ca0ae8a967bc2911b8d4b4f5829b7f2d739a469c9796596f229dd9253328f07bcdd8e97766b4ae57c0abf7950a34bf07723019c8314f2eea3e8bbc784e832bcb281df81b619b9a98b9442854c64891000000b02fe85e2ad4bc89b3c516f065fcce46e5ee4ae0818123a343e8cdb18f5a4dff918546cbc01b1567b50d0ae5991587b4e40a15e0b26124d713982228e6614959fcd548ddc8e4d28431098ffb27011f3303767e6d17931e83638fa058effa0a8d97fbb348d512e28de2e65278a7647dff602e977a33e8e04f655d1bc6bed1ff2dbcfafba90bc3573d1d5af9abccdc97484e0c52a6542739f0e49a2d44a2a4f31f7c52f11b8b316fd0c7e25322051b16ba94000000b02a7f3680fa9b52e3667f6364e5c315c9465260ad5bb3a2cc7f4e003259b0bfc2e3140f5129517650d0a4fa9669a968d5b861f6681ed3175032cde50e72eae67acdc5297824e4b3fd39518fb67ad93eb06d6ad83c37aad84055ad930714965065c2dd6bb8b45050b5bf8550c74104a2382e405d8190a5bd10dfa23fc1f797206047d6fed11df2e435a7296113ace35e8a229f75a4949d8794ddb6054774f4dad508e99c544a33e65370cc748311c672800000021c000000b01c9b9717922b10426765d32c93ec6782137249f839b6b8e844feec7bb6112a5e1e7ae7ee48711b307a084ec9e9db559d190f6b6b97f836f0eef0240b62adf5ba5a58cfa9af87c7a8288d534289028a73b8856a8875ad3e995ace1ab5189cf58f6e29755d3c2e57517927386d3344f45e21c7490244e1ed937b3b42d828358ed4677af0d45a2575972bb6711f8ae3b9c1019818d29df4a6cd5b6b7ff61bf5ba138aa918b648e6bb2fbbaf273bbe92c72c000000b015e5497bbf4a53c4fdaa18d7132d9b32bb86886f469e0d14391e4572b71a4116f8411693443a35467653e28eef7fad5e78c14b1d0021a42f83f3f1857a9877b3761e1cb3b03c3a47c04eba216181b2999064239c594059cd8bf0cee384e30af49e36ac47e1188fcdea95861f6cb9bf2a2ed6d2a502d60164c5ed85c95d28f0506810c1322071b53e36aae16099c1003f2a7733c1eea426fa6d28a3046c62003e586e08700509f7cc97a11dfe80fd29a6000000b023d5efd52a8727c3645130ae3265037234e3b5d72fedab10db8d606f9ca6117d163d5ff08427d5908f62d97f9438bbfbecb7d093890d019e1a08c03f49722c74660856ccd9bb8a6e6bd8b40c5dc8f8f245300ba33e8e3527e6ea8542b08c54ec2acecbbeee37b63610241673a7ab73cc03f85990e1c7e46d779859420757217cbcad42d048e7852f00607421310cb15d25454aa76af433b2ef297c71d145af0e906c1bd0cc86aea6fcb6f8b49fc0039b0000021c000000b012258cfaec8b7aaf98b459bd9851239ef7237e78fcf0bc45265c637efd700758216de9081ebe2c09adb748eed414ecf04616d8d1aa1ffff9427597a28e194d04977f26cd3bbebeaf293ee28a8f928ed9edc002cbe192d30ee634d95c6339599daffb653c874c37825d18231145e8da761f4dacc851318eda3a0e193d76a617c7e217014aa17be4273406929e1d07b4d4071f8ac1ed586f1ab43c3f6ea04aea749e8fd9c4ad2e01f3af6080d556065f54000000b01b7779e32fba0dd9cb6dc803d15227d6b964f67cf7b5653452ff94bc934cb2e387e4ed7ed63f2eff6f6c02b660e750be74ae325786636c4b79e7f1c949a7f23a6375198a467e833c8ae18bbf52df1d5fa0e1edee81f459d096234a710bf8bf61fe061049e85a88ca6f8900fe50a4528d005772c884ec8888e4dc550c5cc9f1aa03658914058c7fd6aa0561bb34bc1fa52b34316007f2dcb685f3d1852d4e95323d607b6736183dfd43736d6ea9c35516000000b009b34e505bc07abc9c2a55c6275a90703805f6a655247b43a8aabe541a95442447d0b8b9f6b9456a57f26c108604bc992aa0df5607e20a09ee479fdb8a68f471d5da7dc166126100b869f90ec1b12d0f66f03d94c13d6171506ed108de462c7b4b720566b4e3b28cbbf4c92804549aac1b01af9b971ec93cda912f84f8dd3a8821deab62bf9e81a60ed7c9f72e8033081d7254c0c13cfb867cb1a9b3964a6f5a24360d69c6734dedb402608ac52dcbea0000021c000000b01a9bd0269520a0b8e8951b7569b8b331ae9070cc5a7633923af42e06981b46bdc375059f89262d3ed9e483dc5219a355a378de229248cafd7fd4eef586d3b6a9c42eb54f52ee0c1fe4d66db580614ddb3123a8970be5683abfe3b24b21e60f153f1ce52ca0ce6e06177e97acef02a80027c761fb10525ca72e66f2b9053a85af9582b8a569829b416cbc31bac4daa66403f1f37ff8f056aeed36ef30de6b3fa66b9dd487b32fbcc5e5b1fd7965ac41b0000000b011f1288626d830148bd996027702e4c6c437765fff78aa7d31f5d5b74436a381a510b6662b565532c94098d335f4bb025513d0690ef39042e9b84303123d64fa0673504fb41b9d2cc4e5c3a226de1d555b58cd1b79a127f89cbf28da2c8ca29e1b0825113f0674adcbd6bac32a6cae6028d98de34ca57a6e3641a0a85107873445699d22b8ae1198607ee9cd29d649761f7c6f4ad923a7f3577b379f4c7f17be214f0272db86608a04b965563a816f68000000b00f944b9687ddad00e17a4d910933dd7db99f3e778c3efe430bd1562f0f65cef564f422966723ec837729f8255d24f564456bd6554dedd280994b57665a4f5b9e78899eb7aeaeccaea125f8ae93f51e8f76cf83f00a28405f558639b42b1fbdd0b5473324f09f248fd676019c36f90ade145aa869c3a5bdb10b2ab3165eb31aec1698343e54dcf6cead83a467e4a2c24907039c24ddf9fe4b8aa3f2bbe9fa97f70c714c52c6047cda36e2dd79d6408e2f0000021c000000b017694d802c8f23734776580fb278d12f9b2636dbbaf5ad4029741bce11542d6477862f427e9104860e7415ec2c85d316bbdf1a64bdbda50059965c4430baf9d1a9cc5e9efb0ed7be0c96190e6946bda8ffe1a955867cfba74f4ebd60ef325c955c3d2987cf069ef7e50819c4850cbfd70da4e070153b60febc4be18137762d2388ce3bedca38eef011658ae1acf56aa506a60d339b4aa80bad2b4680c22227fed52a3d238eab8f0b63131113de98a783000000b02db56e0508ebd6179de9922d1213f8966942d664b920dc97314780a901a4505cba0f20f395f6c8f7eca68f1c6687d988af11f5e3ac84ea31f87e4c56b6987fa8bb1f5fe1b0abe7435b3fb5b9ebb837f9e87a252697c9763b416e3049068a21a042ab7e1888e3c2e7f14eafee981f22fb148a39e3c9f157574a8aa2fd38bbf883a96de7353618ffef6eeba6997d2638801b5c4295c65dcbc59f8b577c258d087038653f133717c6b6c2a217c339db31cf000000b0045239f106368eec0eefdb5e3cb3cffb4db7e9e052ff6d65665576e93d4e3f43084f40bf5c19866b8e579a36631bfd78d63dcce6e6740f601d33c856aefc11b44418d2134a5fc6afbee7af31c0328ca1097a57bbaac1e79aafd8babc642288622df71ce2b328eacd8f5d0f35ef7b44c8286a1612682809b8d8242120095a33ad58183cbb5816bb2ec9c7d582dcbb4bf8048324e204477643dd9a23364c92e4dca79fb4cfc6b3f4cb4084fbe4793848f00000021c000000b02ffe925436530d876fd2d2c4bbb66bfdc5b19b298aeebefad0f1aee39eccff99c5c79a8c277a40e8b0defaa580c6b257117e7a7c2f65ec417d5a6890c0d5ef8b90067083f51dd43f3781507a4106d006a0868d18e20e74370008094590b40f55281d528a1711bc6def0a488d8813119420f80f3d9a53204471d4f88a1c5e98a182f02f15705166ce36a433d39b94a65e22c95b0f8d2de8efa6c5f4ae9f3522120ae719b226a807de05c17975c3090201000000b01131ddcc40c6d6be8aed16063078ac74cff034468a6094370f65e29e4e906bf1cc8643c41077131b7f53c424fd36f8982a37f84aa6672bf3d6d9d0dd2cff4801daa5a3d8e620386c99e9ed35dbb8b1c27078a5a40b3d11c585ba34cee97ecafbccd451a725d3298da0d75a9ae10f96722503ba7a37bfb995c9114df83d65ccf74f6069db3e0e1df54ed380a230043f9d15a7c27142c5bcc8fc734e5edfdba27f0b4752665753eb0454adbbbd1642c87f000000b024bf585338e0588652086de8ed2462c049386e47c6a39cee13d7e3d6a04c192cc632b6d9aff8177bb9c83f6682cf23cc68e26ab4ba7ce531bd281e8cd73cead7dfa254ba4d9687fcc7f7f0309a7df2a785c345dbd0c16e04aa4b5e07c5b276b3696983d83dda7c8c2dd18a1aab292ff121430f6472f09f0f95c05041c807f6fa50b092b4d2771c6fb1dc05fd0db88c442b2ec1edb7cd951a89b97a2d9e781b2bff665dcf5bb5d8b55d74ab7cfd147e7d00000fa400000168000000b01fe489809068e5fa44162aed94e7d95b2b6c428126d457bdc9534e9d5a63cd497ca00b58b978b07c1e4e3e2ec242fd48e984c48115912945b3805d15e49c64d169b45e56ab43dd02ac04794d238eb3f0a6950953666d179b99c684fdf92fb320ce982f286ebd86538c4601ad709e8ef301bd88f00b7725a106442e4f05c0d5a587cf96d0caeb88fb89ed0c09566d4cce10548bb3f890a7d21f658daf197b45010bb3cf4ad1b77664f5e3f67a6d6a65f8000000b014e0a86ac0104bca1815b3bc6c11d35b9cd653cd3fbd9b9be8e24020cf4ac51fe9212ddea6c5c3c07298c76d124490a45c0c7541df864a6dc9b78bc9e26ea793d08b211a8b09fa23483644d246b355efeb4a0f8c0f4bed2c9a16ff89592c979cda9a0e754fe93cfdbe1fd33a8e223c001849ffadc29bb3777e3c176c84a441d4bccbf7550ad9124c85c7d00dacfb0c231812d0b69631a78612bdb004d147ca3c3f798763fdf1409c79964a4a9cf9329100000168000000b02f0a028562f2cb0ebbb8f423b93d23d58ffe074d6c35da48acbbbb157dbe025d33ec41286704555209b7f5a570355bfd9f086d9552bf135be1a3d6db86a8d3285e9ef6f1b0dfd96e7525fb73d52af2dfa1dd67bc9c0c5ee1e007f71f8e79d99b9d06830eb2b65384b76ec470e0d7ff560d2fc9a99683b38dbbc8bbb7421b611006b96017b7b1cfa70a3039ef23ae06e3149d72992f7b2b1547a6e713e61ee30b04cfa2f8eebe57fcda9fefc69920c917000000b006434dec6071d1a21cf91c85fbd0727b2ba911b49f305ef63c832ea420983e99370e42230ecd95f378b7799fb2bd834b36b8a9bee630b1bedd306759e06932f26f96facff9508cd37d5184afe0eaa17af838b38fc3e794984f897c1858c3630f517443f282f16bacd384541c3794abe2207bcebad38ce8f7e9a24909d86ba067b8a9a720b859cb1a8b3b510e6377ca011f8ff03a376d491dba674594c91114df84e6dec8443c56b6bbbb27fd4e3cc33100000168000000b02d89751d166c60f5ecb581780e7d446c6b2c2808305af22aaab9636b4cfdbc89a58d54d2a3763a15eee3d016147bb41b78a68f8d8cbceca61bb2263d47849aeda0db48caf9c747b7d7d5a6fdf13156cd2786f3028b4c55ae8a59fdc95dda28ce30b59319f2dcfa9a76a46f59d6e2bceb26b419aa1b692579849e465ba1c25b183972e3f6bee8e1c7dcff426b390442320d12eba2b173a44c071a853c74feaa6637235563412ec9e348c2bab903d2c168000000b018cf6e1e3d05a1d76fb8e37d88fd1b1a1cce482434ca4de7889fe405796a12aafcf04c8d1272b510bf4ff184b6c28548bb2153e369b1cfa4856de7f356f548da2508b3582e4ff82f094a29e0763627906f1b59b437e2a631ddd9f5201cdcba64d945c3c81325c425e84c4884008816c71e1bf25ddba19850ae4d3ca1e7f721debd8535e7936d2666ddc4bd2c96e58f55048bab8e0b67cab830f4d0e234a5ee96501309f7dc72ba4be3d775e848c0782000000168000000b02cd86d33ec1a8ad6c957cfff0608aeca05b63604412369516780abaed799f61b81db462d1ca4f7cedc20ce376174b03ed9298c15844e71d4791e16250532306b06a1cf93cc2466bef60e240da9f3947787fe69950c7f93df9bba5720f48f1a1b4413339788ed678343ee29780371e3b4280c37b8c9095a0cf199903ee0fb0b3a8dac87c8820f05aa633f1fbcfc950c712983f3c0473d9951cb3f2d4f3160615050882d4f9efbf07cde2b1d57bf034640000000b01e82038a8c0b7ab35d8a89ba56800c83a4ab75caaaaefb1ab437a603595271773937079319ffbb3bf7c87528bbd60bba15eff381883a3ed01b889d00a8abdc3c52eb45c0a93bf4cf9a67db817dff7be2f03861e40e5582199e80a6cc6dc4be4f3308fadfe755bc73375273f04b69c55a132511719277b9528224927cb4b232fd25b4215494731f16c309db43b67694ac2d12fe32cc32779d2f083ff042f9e38934798dfbeb52326655c6edf9003e45b100000168000000b02151602d8209f7f632b4f00769908afab27f52d959b9d1bbfeffb13b3a56b138b98bb47304358248e7ca9ffffd76bd804686f848f68720fd50f888b6c7cb6bf550201492ea261e8f2d0a9dce66dea37ecf17cb514ce3baf115389870f9a7a06cb7f355d0e4a6d76fa1db39f1cf1ba36802ab2086a8fa89cd8ee810c3ac6e05589d279ff7a37a55876987b7239313ad3a024badda1030d412e1615ecab3a086bdd33a86419fbfb4caf272e369f2e66402000000b0150b6b639e77fccedb38c951f4835b04ff65e144141059670f5b2ae498a145d59c337849f7505839654ef0562fa5434fc73038f03c4d102ef53e39ac1f8b804b3db1103f15cf5af868c467b481f9d02cbfa08968a654229e5754e88e29a23ff0aa6a93ca618f2007cce2db13f28d80150c70b55ae25522007709f43b156c418c482bc8927cbb57c7756ca7ed709aa96b00664d3895c3b62daef299de138ffae8a57a4e4d80bec7bc5f4360b5f91e4f6a00000168000000b0065dcb6e0c712d3161fdf97e18cef9da6a953a06701b083432749ef65fedb08423629081ecbe0b79edfc1ac5904aaebdd06ded9f717a05bbd8c0c69b4a9aaffc8a95bc37fc06e8b7c7261a9a1f25c1597fb214c2de3f6723eab3a1bcdeb147597b469c7bffd36947604ab10452677c29038c101894dccabb3df75d6fca23d8df30a25ee0790a29cab6f8d81e0e8de86d05db7c8210be3b99a4d319d74c74dc3ce4984f6469aeebc79b0c0c2f4e68e0bd000000b00e23df6af6ef67093cf5ae965b4137ebf906ea8e9d31339c4127e0bb8c96d5321a814b0d06b22b8a919d6ecd80dbb9cc45049f5d482fec9b4e866bc18d4d9d418599c8640e8c3ace8d0cecfdc52658148c7cc1ba56eeb7defc907ee33123bbf18f80089fb9b12330161d83e5fde4949c1077bd34a5bee7ea974c2f6f99c3d1fab67d7339cfd31d68b7b76bac10e7b740161f5c26cb3dd2e14eaa9c04971c076f3bd8eafdfb4147dab69389dcf6f2afe900000168000000b00be9451d179c5856f19a0ad89753ea6ee199639b3ce604a70439fc31fd0ae36d4aa31746a811164838de5c34ee3dd91a01002f3f921a713b4a6864dd45b9eb9c50c97ad8b0e7505972ea993c3c21f04e2b457629f5676a371850752e168ba76ce9f7376ea1337c2ebac3ce6c055d65b42edca3deacaadd3f6503f5991f33f35ef2e66414c2d18fd34591bbe1e667216c0ec6e4c7768a82959c164e27e9ecb9f688eef584443d05ebae9d34c249255c94000000b0154e243179608d61a5160a1b57ccfec3e34bcc0514d07ce0753d4439d3a4d2901df5913fe59add8c2eca646f3c1697925f4b026215fd4d0462c05f12e1e18fc6e0fe6bf327546bae35cf1073c0167f40fe116da7d08765ba45beeb2d3c939a5854cc10c3fa8ebc07ea418fa9c30b9b48047c2c44d36cd2e2ae5b3aaf54e1b823e7931b2cbe877a7b0c63c23b7188e0c92d82b8add37c8d95525ff7ef631fcc9155b03ef79e907fd81233f158c83c452300000168000000b018ce7677e59045ddbd5a972cb590dde7e1ab3d1d6345dd27cccae0b447a35a007e43be0fc22061d5d72837c0492be8eefcc86451b7d3c0c8cda865c25164753271961de2c60965bacc7c54808ba7d272b536eb7384bbecad14a11a3a9043c7e6f8048f8df6f48312d56445d699f66b2f2728be555a5a22cd1067ce68450cf14ca4ae07c846615f6f09d8760248f8a0de07683a8d658f627d6966a88057c2bf8aba9440c460aed6641c2f7a40260f4bd0000000b0057910cb664fdff2cce7e0923b1c9b8927e1fdf7bed0dddfda56f97f5413e9efefcd50f567dfeba5e6c948f794cfbf790a8d2ccb3f21f1bbe77c6b28eb1b3669f683e50c3d056fe0409c4387ef566451e736b3b00fb938ca833d28e909e35ecae5728ab769a008a74706532eba33c3a803ece65308b371a94ff56711211dd00079ff0ed02ddadbe75d83746cbbb0dc2c147511f9c094578f26c323afd62c31d1e67c6d52ed8d0eb6670be3aca160e41500000168000000b02625de6d835bcd565542cfb17cfba11192d8732929bf8422e7721ad1e5a3f6c4721d2281eff940d5f7dab48aa7606e8b01997dd7db8b37ccb0c22bc777fcd47f548b137c06c50c102c76508bc505148a9a9153adeec5458c329ab868bf8d09563a268e2f7087896495c6824a2607c92f1d25b7f3e78688f9f7ac6a8cfe829ebccb80d07644667a2e9ff18797d1b8380f19f2010dd63800d657d2d895e2fe20cb00c678b92d0db4293e0d48c88d29cabb000000b01562dae90b16bb23dfe63b3f9ebc2c9ff9fa98cd827eea5f8f5537bbcf222ac4c8c5b40250cf84442a06d979515b95185ffb08323f4e10845460bc7d93ee00fbb1a9dc8c6cb4bd894062fa4bc509f8b5f8e218290fa00bc05912189e9d5942e3860a61d3b3738e384345a0a993b14fc01cb3f867c741ef0f47ef194a2e2733bad4d4265a46e7880e599b3f346fcd02771f72555b7827cddd3cddb1c78b9e8ff4cfcae582dd1fc90039ae3f8e4fa446d100000168000000b00300ec68e3a62d70dc2756a0df8d5e23cdc719c1e75c6cc0b3c2d099a1bd91f716c5e58b94ac14099daa01b51278456fccc2d362b575d46c110be8ee9a6e161fd427d3ed249a472d30fe3609141dae9f8b60d82da86f7062e92dd57cbba720aa2d5770dc0573966fc022823acd332cde2037c1a8e52c4c9db55e776e0619a4d6b6a11232a083f8e51789e6d6d2f06500279f0f4897695afa890a64db47697831eac93a5302be54c609eba8bca466aee7000000b013192f843409cfebb2ea52ce04b0f0c1fea42274741436ce1a4c3797ec6ff67a7d858d850db8b17a121d2c641519a7114a7850b52c390513bbf4825d9fa8ca62614578dd1516910ac8cbde7e2fb7cc27470f2356f7c37f12ebfdf2f1f6bd477a067dad6cbb6cf530c5b89ac943176e3a18c30b560f28009e11052fcf70a22857ece8d955a68bfff3be75dbfff92f88960992c6210d71d3444a38f6ed3d5e6fb8e79fd5ee8eff4d90b7e876c619030a0500000168000000b02e986c829fb6c5346b30611277779fd51e82ae883bcb7dfdaee3e03016c74c9024fea6c13b2b10f4e6c48cf016e9c63c2599c3c172a4ab3d8a41252eea8f82ed527e6c7484f9df6d8ad7ef2978b4418eb58a926fc258d6a42ec08a14af52938b6f4f91b5c3ff8ecc90db581504085edf12dc9531a7001171d9020b01a33749eb1e7f5def4fe060fd350625923204902a2645630a09951adfb65f9ec3e969ba30e805969c01245fbb430b2e4ddfbd7b16000000b02cca7b2ea336d45021b34e2c3338482f782de2cda89a81202417f75891f593b6e0be27a2700e3cbc2d4eea5398750a4cd3848fcaaf258fb0400848b539ae899fd77f0d41dea4da8db2fcfc8579f0bda774447962e0e360ecfa21ac1cc233e5a2546914c4548c510dbee826f45e23b8b4250e9e61264b32c8b1e2a89d111c5c2b41ebda237718848d406ab6d8a7ccd4e70142012356c57248b3dc118d15a6b41a811c046b77a3e411a98e67d8846cde2a003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a06ac7e9e4b3afed7dff28c63d986e559ddb10e3949a5c60aa1cd506c4071dc32a5d0623ff3f823e6be33216da7a09a5eaa5ae67fc008476aef341ec5033107015e9f5f7a7f45bdf5526ec920f3afeeb17773b1bb4af348f673e64f9a4b843ebe10358b4ac2788b3a04d505bded03d00174e99323578d62182dcd9a678369d7bfc7533bb476f1b1bbc5755179705e611f04880ef65534b087f92f5c5f506f7e2817e77aa76fa2219698fca27c3d363000000b02942ce04d937a99a78f55ade06e9a010015fabd96150ce4814c811e2a015a39956743e74ed8a04cec30cdadb12dd71cae16742970eb782eb80626c3622968769640f1441d56a5a92de2441159633548e3b3876e5d558d54e999d445102b0e05708c89e6ade6159b142e821e1e504911e2dfdf2cca6d32b2ed1611ff13519ea8fc16891da2411ae062862c85b1d3897002a4433f23585cb520c8ab8684e1db72e9daec8b3027909e0b20386f906533ca0000000b01284ca49999aef0adc96dfa54fa865a8a8e097c41f15a504ed3c6a03dac18791b421cb50951acddae187feffb6e2c936b779b73d447bd3c32d453d54cac65e0425b1c97ca853c3e76136ff101a91259598b33533306f4eb9beea0d9fdfa2a1cc0a65563e4e6035c7498ce822612b446b05904d97479511ec4b91a071fa7f06a66aae4834e2532f62a826426cc4c7600a0b89c1ffe65d158b7038e0a47df9a401cf46226c4f10dffaf3ce85df52da0af30000021c000000b02b950aa8efc6523ff06e7014aa574e3ed55466eb34fd5449b3419a9052826f2092a91f3740361a1034a0b55a1cf65d986d74dc4c8c1a1392b72a93d4320f76697baca4b13444c53446ed76d5efa8eebc17540432c3340a46d9341ee7a70bdd4798f52b6a25b6c7f29850f1563699872818a21ab3c399e4f0b35e109f68b1cc6ec4fce546d493b0518e199f72565e25090d0e56fa0b38a3072852b2089b8c067d08d7b9f8ce1928dfeb0d9632cbf6f504000000b02bca76f6aac22b19950b2bd744f1b37e087c372bb4ca1f78af05e305e365c660312d3c55b087356bc27aef4830f507a8f733c639c0197a5cb74a3584d98066f840baf8a5e4c8973a4eea20d5680e068d6fd04bb81800d6f4d504bef32ad23d52fcfbc3a03fa9755cd7b111d208fa39a30a96cedc5554b77fc016207d4b0b29fa6cb6433b26cf98f378fe95e7866db6760598b02760d6e3f01a218e0c65859ac6e7074268ce3b8e8b170eb1e3658e206e000000b00d061689c4b88478380676790a941727d3c35b169d0434cee4439244ffb8ba60d7d92392bacde9c9e62f115f8faf7f567f0443258e726d51351037890045e81d12b979d8a23157ed3c058bcbb6c6503fce1d9cadf9e38a140279c7798859001aafbcd20d273966d889e5d31077fe51c610fee3f5743c08bbe5b71f4143eae6e7af07298db606575433fbfd49de75d2b8070700861d49f6ce9c887642707fcbb13d1d5758691a20dbc0d1dc258d0e9bb10000021c000000b00f84d94ce68b98d51fb164bee5a35f9b8e1fcb464b5de29cc6078000f5fb52b7f97bbb6b2c41c5ec938e0b9d6e00b8e073654f31ac21690dbab9e3d34c19b8deedc85ea53743fd5eb43e6eb53918168309b05667572f34c2ce35db9040f4ae214c3db2516f7972cf85ffb2e3d5e753d00a1a755f9638abbeabe946e1a30c1e71412dc801847fcd3f56fa77ef0717c936214d7d97a71cfb3d826f44d2c76827a0da02eea0d9a7c6c9ee472030b02a10cc000000b01652b870b9b695ff1f27a5958a2696c60c2f7e9f501ea8098bc625dee1902a31506886c080de95dc458fa1878eb4c1127f2772b2868fdebdbc52b63fbf325a4940839c7f9723c4d7a2894ff4d31cee065607380e3909f943fcc97e9358dc4b07f957574efe487c509b85358f9996c0f1207f55c6da8f65388f6a99f8ccddd71050dd27083289be68a548bdf8fa844c90286bc2a76a92d640ab0c2c15ad32b9a77e05b658a4cfb987f1cc93053ef8b61b000000b02615884e2cb3c20b508699ac8ea2988e4e09d14d13f86dc6f9337956fef9377c8ba5dc8436a816836fd63700de9bf93ff78b3b88abf3270298b2f1bc84682b7bd977e9cce49354036e1beddff4a96e570476ee367d7da94a959154aa058211494bc754422b56899bd4f9da52ef7f3ef92fb7e78bcd2e897a26a6058ecfaa4c12303261d3ad9d3f881d653fb84b41e6442c33e30509ea7cc630462fb5abe4c2feeaecb9cbe343df3a92389ee76ae5ae1e0000021c000000b020ad3e5659d0c8ad09b1d869b6981a1e5d063187609885cd0c8811ef9264a99fc330fc953d36e80b68e18cafb84dca17fae2e88cb0293a642102d59a3f798487dab0ea8047f20d83c00ece759f6b29c65071918125df7e3055f41262355ace3cba141a6c2f207eb7af845f656b343848209684db3270b3708d58ff31c970593cd8a06a735bd391f81293500866cf629b2ec8973c853e3a9f03692e1cbe95a8f18484a48086d3195462c901cd455fbfa2000000b01925e62ebd139570e6aa414978b91af5fab958a59540ae4476303cfe52caed65f5897e55243ae9328bebe43ee0fbe7df9c27d20f0dd27ce08dab228972093a95529a9e83e3ae09e9094187146cb8aab8d5ed9363c4568bc790036967369f9acbcf49ce31cfbd73d95e55eb43d9dba4231b4ef6bd9c41808ccc433fc9320f2cabd9b3bccae4810d67f13389411f016d2c13d740f8853d4a1971ccc139c647c281749e4b24d89bc924effb52cbdf81326e000000b002956326fc2c9455c338b50d204ff2f87055fc54587da7299161000cf8d96749f4592223d55006407829cdc101184066ea3c98e0d04fabcc2d863842c0f652ce4e5cc0beceb9ebde8cf6b1866762155db228b26234aa39903600fadd7e84f81dcdee4bfd9848d2aa13a7f53656b2af0d012d83c6bf3623f3598e640606daa5746e0d55183ffd861dea9ec8d46cfc090516c07043732c6d3bd445a0572b8019ec4b0077797b778883bfa46a26387222680000021c000000b02960fe5da20dda4524a6ef4e8e54dcf61d8713b55f96c086820f836192fbac92975735a457b352b69d2200006f458420f87853c7247ebbfe6282ee6760c78bf08bd1817f1aa55d588f62ec4f60e147eeddf69f00c768a572889c8d4add769f7279aa6df4807d33e267f1bd8414ea6180076686e0d4882b2daadb8b2dc7672c8df071a9a21749e1914af6f97a8c4f634e1ab80c1fa39af426f9f759926c62ee77a6f30fdbea4d8951db6ffc6f6180ce23000000b02105712c70c41f12b2c7d9ac62093fc6b046ff801718236c597a90a38a6ec3b366fdbc1213cfaded9988dd085c1daab2d54268db427833e6fc39bcaf1475f4aa21ccf6a7e317a94d911784de94e1f25e7d4caeb2d85155e0ce5d9801ffa58f402ad06b35b04ae22c78053687a917b3c8247f813392489afa5998715d1f840bc7fdec0a6426cb9aa97fed5645bd7b178c0be21b3428142b834ec2c05474fc19f555f612f0b61853d6f14228747c6db869000000b0028a3241e2b7cfae8352024af82e1254f8fd340f69c9f35d86caae4171b34b977ab98dfd1f228d37619f4284089ce8f7cf726f6c3295a349c823f83b96f1a4e57e97ad26a81fa741d5146aa261aeba342b862c779090e01fca4e79071bb471b3934d3c4945b8ba78fc1bd4bff3489e441dd368b6e8fdb3d8cd5c721f4aa7ad8f20d2f25125c27ef77bbbb95cdc7e1fa4236ca40c356428916a063b3dc4633cb875552ef7e1d9cf969617362cef5b244b0000021c000000b01de63ae37962dfcedc9a57519f810d15b58f2fa42bea98d7db804de33e421876fc1392ea5b65a4d8139c88816005341deec03e8a8101ce2fdb6a18ddfc6c34dc018cc010b53c6fa932dfa0993c225a8f26a9ef9700bfb031d415260265a6956cdced89d4314f9f936088ac09bdb7f5c01ffde7062641127ee51aeea730eb08765773478c08a87c3c41e6819b1b840a691781bc52c816a94d6a8ecf2f8c560e72d48361863b139942a7e62e7d06cd41af000000b0051ba864317eeafc3df12970dcdb96da420fdf11c41853a93a4a886ff877a531ac4ad00d18995af3db70703e255c7e925082eabbdf9bb5430b98a032d401668c8e64e274c711b44a8630b463424dcbf0fdfe561c5dab56f519b25fa96f4981fce28b03db8cf39e8da5ca9f41ddef37e6250bf83a0d71e161df93b423b7d5b0ba775535da6591a16984804bbe7d10d91522bbcf6cfe1613bb55ec1613d634bc827e81bd738d3254af6d45a9e18ae88211000000b007fb4b05a83df10963d36586c60f89f2d590e0be1fb08cbe3626e1d97b2d019cf8c25d737dd734ce3d7387a41a394abfd26076fa0a06c3e151476da1cd3e9ab0262d06bcd9b550fdd1c130738e4738e95329bdfe9be9e3a1dd1346563b23f748e56fd835456e8e5675ab2d4f72ff4021117988f3df49c2ceac283e621ad15ff2c8cd64534542dae50fc50048e076a7e82063f2b5ee5d1bac6db43a21ec5118883f2d59775c884ba3833e60c69081dd3e0000021c000000b0185b36946e675483eb5ac3f036869409deb9a7db2b78ceca11c276cdd13c300fcee0d50928327d39d46c9a64c23e70386854476b8487aeb9956312be707be77f2d357354dbe25e767f97120eabff0ad62d2875d19cbdaf765f47dfb226256808dacf41bdd98009291e0329f186941264195e0683504a964e1bbdd96b07562ead054707e8d480ff24b89a2056d5ff5dc80edcb90bbcc1c30950d1781a9af3e7bb84ded36530cc2dafa4924db9d66b7c1d000000b01dde33da73d44b7d3e287e5349ca18ad412814785705cabd852055d252c6039220709d129f9430e98ac1935e256c3580baf07b0393661a14e6fc796b5c0109aa2431da6f06d8b1d67ee7466881952a4cc90d2d06198b307bd5ed1a7f8c6ee19e14d788e9f8be092110458f1bfeb7ddf827cb86d5bb2c35586d1a525b6275dd98922975d18547631269682ece3da0f49901204d164cfda0a326db84a7831f42b87c7593514a56c4797fd6f94c6cae624b000000b01fb23e91977643456fe022a223d65e3dc59655ac5a1841bf9ab85e948285e04baf974e77f92c5c7b5a3297b069a3cc4afe9f4cf69da190b212cacb1ba6343855002cf2cfb204479350e30e2c6db594bbae1e15001a11002946e288404d868aac92feaa07b36b655b4da9fa0ca9b008610d670b013d4e1639abbcf7dd68aa1dac09d333e6e3da178476063f206194f7140f73b730c16852b7557df67a6372476d664482f42d91b39ed3daca1906cb75900000021c000000b02b872aef5c95970ef29d010729d97c98b7abd65ae3b9526c42a36a328006685a9ec07b5469e49c998b75c673c3d97f3ede30498392899314a9d6f29730e9c3d1ea2afc67d3e8ea5179af01b911f3464f463922267f74dcefa8f2fc714adc3cc6f5e18d01d15e057dd95e45d9882a0c3921e525f12cc7acc9edb46996b3f9b3a442d3450a917a796993f692c7cb84af3225930e89ea294e25d82f11912472597ac3cbba3531862e2e9a89fec85e1cc3af000000b009cdef298d2377cdcb25e5ee4570ff71c765c89b41d8a39b8eb555cf255d222dc6e299acaa8bddbf3cce097328f937333615f3e4d47ded3547402d3c6ddc7b361a67630d12621bdd162fe9948ed459302e75600723fd2240f3462e9b4e2ac8ac08d99472050e09b1a9048352857c8a541e80b63c498a58a389f77de5d3005cba5ed5890ffbbc6d4b1b74df925fb30dff1995e04d877cb0586d35136477c1d3377a8051203a27baaae85f68ddbca49249000000b01f7ecaa75528b6db7148f98942ae399f68c59812a7c8c0f4e1f82dfcc30052f447f45ba857a3f096c231b296315464841903679ddf6c904e24d0ec03feec7a4f8939512cebb1b9f011d264823ed7cb699ad6541fb8dfc8dca6df4ff711f96541f6de01635b18c394581b2cfba0e6d8cf0b4e514cbdf7f7a728d45d496c8569023f33e2a4596af474d9de06a44a6956cb2413c66f728c6973e8a3ce1cb9afea3ca7faf529908a658d69eaea39246f6b1600000fa400000168000000b0130fb3937220e352edc25749de95a3399a851333f11640683fe2c1e9a39cb6f5fc3bbb785fcfe3c71cbc4630b3c56e0f8988cc508092e50222e035e07fb2bcb6383c0a48b4ddc898bf227c311ebbb5b1be4ce33acd401c6d59e1edc896b65e41a96403353dd86ae7199fe6f9d4b70b6c28a62609994ed86c56177250629fefa74e1d96d3045a167f38437fbb70e3d57d0f33e044773168415244615329444666e99ce17a8c6d1e86a48134a29c80b9e2000000b0183b36e4e10af563bed211e93c7371ea4430186a645ff33bbc75bb1f420b1a68cf15fd501481a2dfc00bcaae5f5014f0975ba5dd475684002c5b27f004d4f6c00136a94bf959d831dc589302016df3e302e757b63f0066e65977263c02fd84c6e6795f5059193d14ddfcf900d3bc0907305837dc78740865086e1ccb87aa73dc1dd6d2c96580c449bf1e86f91ccabd6e13c68649fa4a60ce407cf9d710d0d501a2c278c38d262f5db18d673a14afb86900000168000000b022f65e1f9c7e50e73fb376b2e2d49810bf4809b6b71feeee09b7c04171cc8917aa692daa187fe855cfc88ee742a3f7389d4879d5aaa979d28d2cb4359394b747e5286c6ad2b536060f4624ad539a5564127a2892a281dba76dda83a29e6f306e194b318e643511cdbee05fa678be2b1e287750d7bdef077b3fb9f37918af12de3f3ab93605d48fb448477bd37b948c261915ca5adfe5570e2def93a1e71fad780bafd23a5d4455af973b5446db4d072c000000b02911fd65439f58cf838c9022cb618b191bce05c8faf51aa28209fc255e88225ff86e9bd5a741757c5ba866dc97471e7cc87c5a3e4f2421435cda29644a57522517efbfdf4e259d1a7c3bd4bf0e5e3071a6bd603dcadf8953c581f9e81e976a79154afc96d0226faf1ed3cbdb712061a10eaaf153e7d436e4dc7598d672623f3032ce780149bd75e2639951adac333c742dbfe93a0c812f3044a3e1697c89a256a898b54afc841fab330c739e34bfca2b00000168000000b00150115a8918acac0aa13f980142a64e8a61b79000d883099bcb0af4010c546817073bd3ff1061a848c0b5ecbb28cec18c76bea9c6586e1a8356c4a3f25a35b2497cf3765f6d48ba3e151e6d8312da157819bfb3984a1fad341a641a3d1e718fb1a4140f4ca75b86683bf6c7d439214c238d0fe8be99f3f84407cac3aa7e0474823b870f6417eb1dc2b28fbbfaae3fa30e568d9c82907db804c15e25786b5ef43b29a6d9a7fe7c95eec9f5bed7ca8e96000000b024b6b556e4fd738723a5f7514be1a384687746b3a3a7fede65f897e4d4f303b17ff81dc404e09679441d93283c488eab3d8502116580597d5f5cbb38ac64a533c6d38c5df69b5087c228d11afe2db0151a6a5eb59c835e7b233865e03ee870b7e0da6332ddc81036aebf21c57e3e78a619779184c6069623a0c3b3ef840db81daa706920613df3e20da0d65bd117aae418f1f95b7f1021cb813888066c2c207bf02b065de565fbac35d5186b2177838500000168000000b018c854ba658c39f0cf8cb5a2edefcf736c8a96ea2aa0295f51d37628683f09e9f56724cd9e195995a998d3a57d64eaef80cb62bdad6a16c22f1b8815cc3db3468bdf29d94d7db2fdc38e2f88b5147607c82e3e96dfb459d4705f71a8d1b12db050544692d3e58a63533d4b89de511c5023d9c5d503d756ef27071f855965fa8b863dab247f8e7c2bb8aefd2973622d5606979adda0b7b83d9b49333bfc7ff6db736eddcb4ce39d3dd58c70bf99d57393000000b018a686435a982a315f93a2e822f8204941d3c091b1bf8781f512a5fdbbdfaacbb716282ff797817bf9f10afb30dbf88f418d44e1dc2dcc7b5e663c14d3221d765829b762eb29621e57d6800c9cd508d41befc8d84b13e92b7dd168f18bff9b858c8fb8c652080507a5e83fd367f226171baf0c014b99d1da9801acf4765d3a2555a12685c826037a076dbd774dbade602bea20a5a00ec368bcae97698c76bc3e114b50f5918ab6c8b86a730df832781f00000168000000b02590496a15717cd8de0a5ed10231f746f68c74a6f9a745b014756ab949f16fba55bfe957c5e830653f6357a3673d68020741b750d2fa875856c4282211ed32ce0965c97fb4a95061545f3c9762b47337c7623d0f9744a7c335e157a75e192685f476b6e12098daed3baaecd8654ae34e249181353308a9524a0766b7368430d8565c6ed7b4e18f56d84b3e749561288e0a198233f2b7b78c56ae786fc08e4fbad5ec09f35359e38ad8a1eead7b39c5be000000b01d5dde84bfdeb55b696f4d9ae536e100b4739377236f8688c6c51f55f9b1da7331404bcb67750c1c5a99a562d3fd66535581040e26d34aacc67d098194a541c8ddee86a0f70c4cd6b318997df0ec0b444442d00e2695a606c5d639682600a6631de96bc85ec43f4cf19c4e0576e8e42627a6b467e14eb8d60396faa079f5d2e24ac41a177a643713e2512775544746f511c70d6c388663d4e16624d3b6dcf04ed2078ece7515facd2574cdfd54f6359900000168000000b0127acc3c9b36ab02ca0c665df630e85a1de9a89dcc72c58b1d12271f1296d50bc28626ff637f27eb78cfd1a220f0fb0090237f1fcec8b3d399267f57da41459b408c88bca9b461be367205fdaf1a0cdfdce3d22f82ea1753770ac8bb3661b2e3af8f4e3c8096028bd5e2fd46383b9e8c2f83a1884c607482bc4fbf2ba352e6740a565482f51118faaaf42b6aa526b2e014f876a1e64fe265df47e1770edf62e852c6ab9834b4f17d32b0c9c55386c058000000b0102954a08372af29240c328eb43874e90412c416940d14b517949b95dadb839363cba7fefe2a1cb37a8312309ebe87adac01e6b6b126f808eea87bdf99bed1c2a760cb5aeafea16229cbad01de567f3c3ab1e4a0c851597281c6d1a805a3b0f0f90f6eb25a801dac4ec794f8974dc80c1e92ec2e99109fa046320870c66df8720fdc016a2a16584d757463a7c393d26c01b82b212cdba1ff8e8f427466285b3b952bfe64e1fd55b08f8e233043ae009d00000168000000b0287afccf51a9b2bb084e8e5b44b80518601309de21ef8fe147ae008e94e4040b7cace32eec84eb94058bf3ade2b92ace20fb54f74cf01f41f268570598d35cf4917c484001c791865684934091998c5922910cef69f9e554c897fa886d885e22e466f1a34d5879bc6707aef43d6b1f321fdd7713d647972f46166180813788ba91de03b6f26a0dc95ac65925b42984f42e28ad6962ff237dac4d4ab15110eaee56c46ab074f905dc10a997efba81980e000000b01fe8aa23b41ee26f5eec50dfb640e865e761b24c8cbdb4e430f05c57dd2911d3de44be12cafac8d43a035cda665cf195d835622b7ffb94d16ae0ba8bbacf2f02199eefff3c655129e418f41b4d96b7d934c0d4ac15aa8d690c567b331a1259e92d1a3bb42981c668bb51805bbf7057711946e9587a9e6539b4b8a07678d3767461d973206da53e788423d8c5a8921b09299565f7b285fa8fbf0a954962d29be694fcc3f877289ef711fa729508ff43df00000168000000b01aef8a7f88f3cf233925702153539cdb290f5eac14a1a7c387e90346f8308405901de07fd2e0e23cc15588be0d7f441d32762f4c016adb16571913e98823ec4e522afb287b053df4019362d53ba3a6893cedca2b8af63b4c551dae88c8fbc4996f67811895818bdfa14d4b00c68adf2612e9cf35e3450ee7e1939e13fb30490fe23a7b33eb468501e539864449668a3613cdf732c6b4492ad9c2c142aa3f8e6e26e6f52a06eff523099b8ebce5285c57000000b00adc6b20ef8d16da8ccfa2bab463ec889b18ce707f696187acd9f326f092c0c279a76cdc6d7600f508e5a0decb7344f7cf0b1349793299a1e7b02362678d71c5a6ae029898c7f74b683085a81ed2ec14e6bdbd1fd8d3130fbe2fe6027586bee27c3bfebdea1958cfcbe9adab72ba50282512a12114a12231ac77a8c55ab2b5dac99b216962de34165e70abe3e7594ea324e3bd992faf48314faf8d47f47ff437cdf648978ac01a908a44d2b46115746000000168000000b009d1434271d037f2e43421b573bb2f72088d56bb9de4017cf08953c8ba2867d055885239563386f32aaa24149b21ad0e98fc0780843c2e7219e914d57a6dd6abac29cfd5f3206dffe487e30deca7f121af4798a435f8f8a94620f5a52c0ea2a8d1c888049d6271893968181a7003d5880297a06755381a2083a918317f974a8021d4e13d07c27fc1ec83396551b7887f1d7d60bfb959ddc1a60bb36382434f617eb77413168b97b3bb33620881882042000000b025b42fab658d51461a2dbaf3b8d7780cb1edce386df7dfa71e5e6e67d4a5126d2aee04602ad68a0f84487cb714ab5e1b1abd1f5485902e3bafdb8cfc585573319bdf592f4604d10989b9701dfd50f0c5fccc5400b1825874116550e2c891c08e56cb257193900301a1e12c2fb8b48c8d2ade7a194895a6bcb5674c720f7eda15dae19112e6d0370c2e81f96b766de8ec190a0a93bd7b54c7e64bb3356afba1b24de0a2632bcbf844e09952a12a58eb7c00000168000000b00242ec5691399bf6b70fd45704cd50b2804f62a8e878235956acf2829fe8c553fb32fb136481c7a742365501b59257d123c4c9687ca2f488d32eae79a698fde1649ca55a3c61b499b634bdd57d6c2cd88224c4870831eb7b6c55e8cf173f877b5cdf47bfcb0c98506f1fd94d2ff9e6b1229d89d34f3ec44513000409c91bdc266b17956c44c649f0c2f232ba5ba090b817d1433371cfd5ec6efc000d03f408d5e8a218af54c4ede1669ee6884991ec7b000000b00d0cd2ae018b9b413c50bcd4fee13572ce2a3449306b32835225490798548aa24f940f250cbeb50f79b78da162e74f8062e0ffb472e84a1745ed6336fe76915ac06c660fb99931051579ff79315ee6f6c7a2b39880d401ef0e46336a9d06caf57251a332ce60db3d01301ee789308c711445045b2fed5385c425f9dce37f1e18c6348413f72223b39e9e6bdf43d8d4ff20aae1178a60339c6b7abadeb771189d43d877e09a6250d5964fd27cfc2cbe5800000168000000b00c71e0fd89d22c2b3a4ef4bf291e6ca9c9c80e9ac9213707368476b43fe22aa83ae30d28abeda74465abbf16ac513a1e7b37b9c7bb706d6b8adc2c9c2e661f241cc5cd663735c98c61e894c02dec3a1cc83dc7031fed444eb3293ee042d400a42762f6e8e4469a29072b4776ba27bb060c57ecf101f9e8f91eb87976ed6e2b3c379dd7c7cb8a1248a8cb5012d26fad132062d8de80e1ce553dc49b22e29f1bc25b08b597a57767c38dae845c9af79ad3000000b00644cca8885b485b7097afd07606fed66fafe058200a4881e797c79f08b1e6c669d786950ee960633f3c56f3d899235b4ff1a2190b8799d06a10b81b8a0081b6882f06fe0bf7d660eb30c2313e5bd5045ff99dd41dce7ac84c32b17eabe32f4ecd518e146228a1e01876c4a2929059a22bc904f70cc9cd913dc1f8126f4041ce6ec431a4b04a272daa9bc373248fd1f50231fe2975b78256dae3620f35861846be36925ebd6afb396bf6346dfa9318b800380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b00c0bc3f222c40dc1ad00cfd437adce1cd148398825b3e54ae73f2c4b19b36d3d5e2f73513a94421fd05420d355a3d8ddf7b20641e9022aac4f566ea9ab54b3d3e081f56428d97a1bc07799b2edc1da4b0d15a60a3dd2a5db29f2318ce5581720f978503adfbb26589e8a9eac90bc060b1e697d361a7f75294a8491ab02d78f1b72733304b99dcdeca8ff5e18119cc38023051e01a22457de496dc4725152320b7f200d748a66f17c8010b0a9a452bcd1000000b01458820520783df47a64021107f5423a95d84a6c893aab4c40e26bb10bceab95692610845a6d94ac5669a788eb4d119c62ed8213ff302b2f38a22ab261b14f1b5a36af95757d2f0fcc89b3eefcb6b6bb63c6c3378b5990b5acacb5bae904cc44e6979ae2c7fa8d9e69c5b631b3057dc405f613611a76750b25c589d6e916f6e62e0dc8492ae3a76f4132750790a9862430267f9f4874b2b096e66f3747f6b8c5291123996310ea2d1d02636bb7a2a51c000000b00214e45d7fd60873b7df6cea7e12aa2a1443f68fd0b46805b239ea17376a1a444847d8084da64b9d697bd10110fec7a8efb42b792923974375554822eff2713879558121877512e169c7aae7279c6d1026e3ba7e99af70f6df60fd2058a27f652257fa5abcb8226cac4a80d6e39156a30ff595612505926b61a693eb4af0962aeaed359f792ac16f1eaa5d11a03ff1871532520a21d170f17c36b57b209dfd91cfa844c1802b3908022ea67e4c971b0e0000021c000000b01836b1c61966b98d7075becfbad7e54e72928702fa7c17bfee981d0d5cb85b5a35f37ace7513afce58c762c8a333794df142bdc6808c6fe404c2f4138150ff8856c99b6b08372f729de920b4d5b0ad9815edb0e5d950dfa0a45a69bb86aa050756ba978a9e3b6be50fbb950bc91938091a8d834973d7b2229c539afb23a8106c51a5299cb409f8ac6dc311f215b4e45e056f52a17dbc926b80ef045747e7a73334c7e63802a2dc6aafd123a327b75459000000b004449e7cec0c46d01c3285395b649d847b15bc94120d7e4d4130648e75d6ad8a90253d55371e3eeab6f9fea8025258fefd91adce594958ebaf8654748d54cc7cad83e6350efdfdf425a1810ab841ab082cfd25cdfeac6acf40a9b7826101cea25a99b1ad83eb636c58dca1eb6c43f6c31c553ef2596200aa3d4c73de9534466c5418c880976184477c16dec01b8f66df17129c5fe5ff7d36b6b4eb0f679b3d173fb20dddf2df453860b0e9bfc0b7ca2d000000b01911781da8908b53401254993c571f37c948299c4f932ac9f1ceac1317eedb9373255ea07c3a8a8419b41b49b96e86207d7a7a28a73b0841ae5153dfcd610d96d770ede7e7b4125295974faf2d63dad404c2b200f44cb0694219c6381aaf61a645fb29133c01b1c020950d799a62eb5d28e010b62cbb0a8a07ec6ab907db82a07454accf9f1cbf732af7b192f2b82a8515bda4e48f8022c3aac2332df4b629fff23fe610298d212c6786b7ef30fecd150000021c000000b00d0edb946a08340060c80dc0762ff69fd73ec1b34e70503e30cd09206d5d0a4f2490ac439d6ed38e01a1d4f4d14708f95de9402713ae074670688e0b5a0456fcb060e07c0d72ccbdd43688c7147f68a499c7f9f5eaa8bcf0e4e73ca6f9092e21a664c3a890d5e7d312bf3a8ef78e0d7927696459ac24e66f4f1d50c5392dfe2b20cb86afa0d1ecee4274389ced46dfae08a5e1b7b73abe0b4e9ccaeda4cc1c408c16a616565eb00643e10dab1f28f8d6000000b0093abe54312631964349da761959ebdca395905e4afd213b26455f93c069bdf41987e5fb63607640fb0c59c32ef2345cf7bdd3233607b0618a27a3f685d5b4fcf049c8e8714c383e8b9d9113f7847bcde420523b395dfa2fa79679da3d05f7a793d36900b089ec50a4c62b7ff808fdc8282d94c88d18059b5a156b57575b6868ac0215fae32b8d0be742b91abd1db1b11f6b0be5398030d3d0589fc30cf8e3e67345686c985b11f7c38b13374b90f21d000000b01ecfde58157ed60b003286dc53c9274688f6913bc06f3d910791d8d87f2c548a3549c7cb24acebc39122ff8abc6c3330b439fc8916104962ca152a512a2a3396edc8e88c1f7c65e84fa12b7136861382cff39153fd4852e3f4d30b1b46e6bf0a08328c688fe661ae813127a7a4a652451ae5bb631c11a1224f5d9fe6426a84edd709a5161e62ab1362161217c6f3c69a26b913e5a9cf76bae848eebac9bfe4366dc32f061074a8c3666bc1d8c44d58230000021c000000b00f252a7c2615650ac35e91b1dc56ef766fd4557767b7a5cb8ecb253f381e586907247add6703614ef8edff6c85ab0a1c7744b55b7c113f1cfc7194db85b68957c6fd1323818065f7b9378edb3e7c78d9ab876be4a0254403b83f8bd7acdeb40531f91b51de24ac12b9c8b2a2d5bb346225633776c8fd9a20806acff06cfd512ec5fd6090a9cb64274b63b75042f5d5920ac9506d33437acb05b47de0a4f491ae41b585f342e71669378fe6565a22229f000000b0253997e04c1a46ac57f9528ae84ac78df3f33b4e8dc70e615c3321c6ad790f973fda8b53aadd50ba3e2ec2be28378365e56976bdaabd422531f5960a4408b0c685dc3c2cbe352425d330268154ce8eb332c35ce66e59a3fcd60a695b4112f6dfe89dc3866fd6a241e603c15d0198ed6008827232b290721efd421f5a07746e42e70805b4082a519b8c79b55019d7d9de071311c65681bd64e1251cbac45581ca1d1b354e0be724899178166d37965c08000000b02e51560d8156c566b88a582188d8285b41b01aafd40d83c0c6afb2836a9163937fc443ae2705256c0e26403c4d6960e3798e5559d29844454dfd24e254d75673be4482eaebe561fd18f5c2379039fcc9a26fa923c3dd479a14ee8074c9131f4064b988acc3af605fb3f31d7d4fd74cc60e94859d7cdd1a7bc329ae3355582f89978ec84300ddde7b1d3b6e79d5e8b96f1e8cf623ee288bf35f0567c24b1c51fd96944dd41a2bb0736e8dcf8233bdd4920000021c000000b023b3d240d9601d9cfb17cfc8eb73f0c501144131a308cba59269664272d90d5398407357d78fc36d14a577899648c00df66122f78058265e0907b54412f9574dd8f193211519474f18459d1c3e86419544e8f129633e6540d572437dd643cc6f284c9bd74bc477f55380980577688c681894536266ba69186c53b5bc5d9cfd31cf67e9ae64c8b558959aa145178093820359e607fb5cccc4d4daea3291f71269d882c9c6723fce6f1e074194f4f86939000000b01bee82a219f49b380ca7906debedcb728908f00653e780350281d5e78f9690959081fe0b19fb22d86f6dd33a1b962e2ea9f72c8fe96a476c4f672c3f00ad1e0e51241e6f703359e543d4203c4ecf14104ba2807a39ef844db41732fa6be2fff80beb556d976c9ea48f06a5a45e18fd4a1414495e5884cc98034c2b37cd152e419d01ac4d8b070445ea7697fea56f98d4038d726544cc9a04275eb09417d9e22ff06bb8cdbe7c0329422e6326672e85bb000000b02412b9a86b85bb430dec36963a9ab9e6be2540a08e24ef4a860a151e29c378dde3696b897998b124924a44718c4aca3541642c1e7fc37dc676bae3a3f2f98dfa62f2a3e810c09433b5b924b30423794d4485532687a848fcb294248959014cb807c4502b9a197e4a0a82e2a7f5bbd8c41f0a2363b26ff2ca2282ea24d1ae64593a828a7d50160ef4f44413fa42cd70ef055c3c9a428c49fbe4142c93e218e1163a1da69a1d7a63b0625e3ff2fc3535f80000021c000000b01493475deec139adc8e2607b77862e624a8922f12cd5e3e9b08691542395dbd6df9e45f39515ff77ef7c28bafb77a3a8de5fb75b843b43ded6491f3466fa39611835883f08cde80e8f6cb29ef067b3b5910b1d51e736b4b3f76df79dbdf1b9309912b1009eb4bbc30ccf5d032c579c381096732b1ea35d9066a3065a8b2fd8c18d021c6e77b2720c10c1318ad8880c8721f6e2bfd998e1b64b7a5c104ab0fdb9def061db9e25a67ba43ee319f336b07a000000b01e6a1600eb464e5050398bf265011a7539959fd3ca5ac7b1ae979b51161ca3468351ac39d203f08bbe19f1de6664fc6ab0a4f99990c8fdb67864c08c5c000cf54987ac95a05073771c567d5f58e74a13c157463e8c5dfe3aaafe463955f98a56150fde2b07a76c52b436be6d7ee0dee92719bba0b4b2556205d3a37f7337d8305e8a9c0932ca8ca556be4f42b4d1c96006efc926e04b91477dd18c2eb1a9fe820795e92e17157efeb5a5e6c3c977f9ae000000b00645947c5e974d93d1376b690e4c75ce2cb78c787e4d045e7a3fb2279dc60975d8de82d4cc85d2420305548a0db8929378531eea0cf9a810e2629cd25e0a5d076f5c3ca574bcf3bed7ab8249e4c540473d8d8673e5839ae13aecb73404ef1ce6f3153f5785c59d656d001c9fc45c5dbb2946abba51c7528668599a26a742fd581402d613abf13c3e88fe1533347e97ff091ffd406448d4a3ed36cb69848bea869330caa39da71f8395eb501c355275230000021c000000b00602f1e84c544e1d6d90ac4c550279fba174ab86172a1519457c66ff8e7006abd8a99c3512329c7df0a9fd2271c323e1fd104990ed460e1e3fdaaad1529b8f6b126964c59a9053f59948c5efe3866a99017adb09ab8ef6fe17cfe312b562ccd51bbd61083ac3dc24acb1dec307a2b9221d5e32641c43077cfa216104c18962cd7d600fd2f51afaef5102f50be4e79eda05cc9302cf8b9ad3c5abb7faa2a695e9fd9c16143e6261df9b9bd6828c382d5d000000b007fdec27102303d458238bf1c8cef1ae8a753dc126c7973590f815124922fcfcbe73bbd73c2d0faaa8a7880ffac51c7c3eb1bc02a103af784af66af5efee3e53772eca7932aab1b2207cc408817fff95fefbb44c653c51dd023770139a0047050a3dbeac1ce827016afe4c1033ebb0f2064bd27c24018aaff3149e73c0d828e9fb65fb89a4d27ede4267dce91323359f20a9877f70ce8e736e3b766d6cdf9a3d2a67d5cddba922176bd92467bb9acabe000000b01248dc8eefca532a6ef0eace18bead1c81709ed2d311472d5b7dddc75e7bcd215eb9f8f737381fc20379b60d272d2823625479368128f250ba7576fc3baaf370048a761b6c8208d9feb3b205e240409839a2a1d8c78d6df5e43130b9a2a7e6993f7c80a6edc12ecb65e57933428c47400f4ccc6107ced0bc1b81da14763d99aed1197a4c4b6e10c4c75475649caa721d17b2aaea598b563335f97e93dc9d02fe87bc52e31397b67f004c14814289a9630000021c000000b011e9f4c99aa0b24a36cd20cb62f77b3a6224a094558ed5cbffa06fda29ad2255d775e93f722edea5dacb8e54d8d469f4a13f612a67b83c4902fffd4433beff860f57975c224624b4be7c648059e4692abd332082b82f81505ed3f044e255061d94bc3be410678992fb2cc4fd42c6707f2e0745d903564c3673e4e32f70342665cc7ea81cbaf827b03feda2db6487e27a0b3192d7fc1b89d315872641b37b85475dae1bee77f855c0d20f523c7976dd7f000000b01d2c32ecd4e3fb394c18ec032fc0f4ba4f9e88d10784c44eb7c6830974f675e804b1861ad8ce83384f2bff146ff60942e97835fb2dbbb73276640f749c7fdc0528456e083680f61513f9bddf6b160ea4332b1fa2a9f0cb761f028d501c6114bc7d7a30073012d68ce5d5bcd978b3a2942ba6eff81bb351378260943131aee18509891bf40499ac333f3abc7c22a5bdf62a4b1f4af17e16c16675dfaa6ac813345274ff2c3efdd07305828e9c9343acd1000000b00811da2ab45852eb653cc1e84e010603920ba949f77ec73098f180b645c26163b572bc303fc3aac141d573c8bc96f3490c01026791bea5b71b7d3058d6145338059bfd523c68dd2d2071d74ee6bdc403f4937b6e7604daedee8309d1d192c9e1e6bc436cf3769e8ef559adc61c75587f0043003498115367eef0a0ace08d815577c4a43720fd6442a17823b42904e59e1c5ee069f9cd06e7e76774097db7344d43fb343ece713dd3dbaaa555483f6ef500000fa400000168000000b01526a22fdec06280b130ebcec727fca2c0827c1a4e05fdc2a528547498ef0ec7ce6f10b1d26742ad52c5ea6a4f324ae86eeb90ebb9abd91438919a6bf5145264fe51464cfdd6ebdf37e7c98245fa0c0e9817888d57ee9c2814fffdbaaeee320b622d1beae077c21b0ec8fd34c7faa4f63060c0d2d3f5678a2acf8282885c964d9de3a84a377179b92b85d38c22c8d52b25fbe763d49fa2577952f918ab1c5fd7e5337813b81d8334e3908bb6a82ed658000000b019a99c8ba61e0359cec10565a4adacae790e33053c994452ef7440de24506f594f03d75053cda2fdae67fa66d376adf6159057aca7a621527445064cfc11f425b4a9402931d6db1ed97a446dfd48561a2dbea561615356351fa0f3452db0c91a79ab76de3cf7c4287f2388692fcebc6d1cf18ae11c00330a5646eaf1e29a379089d4003be72490c9c357be713bd9b8c305289e9b47965556428d95f4e25254edecbd1e082423da6b8f44a941ac328f9400000168000000b0209b918230b44b34ece509e40f78300cf42047dca6e57fe9a5cdee01b363cab8d6251cc6090e11697b5be3ae3ea67eb851dc3cc6c3b06923fcb7d9c10edc507dd1a39a13a1483d55e3e80a01241b7ddba038ae3cabe82e22d595f78a0e80bcd136f85cc924f3d4966d47e86c27fd6d0f24ae98e6ba687ea2a7d236521c4bcaabba1ee8c0cf57e2b22549f95dac5020460ace8da750b1a9184fd60053979be2cb0141f97f287468deb8f9a2f0873ef7c1000000b0167ace6a52f0f0cb871c658d4ad241ba60571d47ade0d2e9241afb0279f4f9cee00fe997ced4707bdd4af6b102c4604fb110d85ba613c71811f9894a59441979e815d6a4913223a4803d11d9675bbcd2fd8853a99de3f1f2c042980b66a8adc1f90f729353e0f366508efa933830d3c81e699087b0c4cf95559efe8a7770ba74a6f3568c1f01f1f8b1419d2d639d64c910980106199103375d2ef360481eff9a80eacf254adc0f6729b06802aed39f5b00000168000000b0212cd31e321bdaa4e01bee158eefc0505d379d25123381e9fb398c861e5194766dbf1b87e8f164d0761a3ea463f532b0d293d20a30b2e82af50d2e8a7c9f9bf4af956cb58ce2d9cc856023359808baa40fffc2bda21e6d308ced6bce47bf9af3b1b16cc69f45835c67b6104b791b2a2e2108b52b5aba12b775931b7a722f91acf1051acb936267c3fa719854b9c49a5a0560a810cf8e24a275714802087ad239988993a66cb8a7a7bf0b97dca174d1b6000000b0210115026d5b3a91de83ce1e1d42bf9a9caaa919f30cc5702179a7acf22300d16ef1268f7087d6f962902c1fe1ba6c87c73f760124e35e557aa2f8d58169c6b13c82c196fe3334999d7ff01cc972b0d0db7ea6198c772f0b57bfc2351659c566fc7367ad2b3ab4eced48d279d4c4efe4204dbb60576d8441f95cac90ed1ec163dfafee31ce651a09d30f679de9aa799f1b17520b2e5cce27f86631da59fdc8f618f7d63ab194152b899db75ca51837fd00000168000000b0074f1757381276b8c16b9950288b25f4536e2902ccda215827b4b521a7ba8e64addc011d55c6f7a886cfeb54780aefb17e6378ecdcfc139225551424024ddc4be0c690dac240a808322c6ec066bfa269c160b1d99b11a87a2b14686caa534f954d9a6df4a39f9960679eecdbad3df02d1de30b203c7c213229db9b02397afb2550eccf0c966f4d177bccb378a0bd184820458a95a0330fa0ee77d098653de7045cf9ef0bb2c33a028fb8c0755f22cad5000000b0203fa62ec8ee174f776b709adb8f4a2162e6df9b057809089312dc0025231c46338cbe0201a95ca0cb281f555dc4b989e7520e79758c516bf52a66b1596c9791af87e69abc9d5884d78c32042504dff81aa29b6787b1b7a99e6a4a49eace6c366bd142b8a77832315c24433bd5c8709d24c4b4fd6b069464d22973e060bf08ed4580295e40d359735beb6a8e0619548a00a8c1d1a0e915b69d1a508c4cd65d8a102245526dd7e74517af5bf4ac14022100000168000000b02a8a81778b82f80b365e0f43587cb0879249ecc96146bd2f3612bd0095eb0b0b1435cd6cbfb83c305d3730f8530b2d929089897c6f41a969927483556350070d8903c8dde078ca517c8b433a922d1dbbe4040fc33beff450f92e105be72c9f0e043ecfa51b93e4e479932a3ec1801e1b2abdbbcaa2f0909cf36fc1b443aea717eb344942c8c7ccaf2e1873895867e1600cf447fa42d183091872df7dfd049f045c3f3b15dd20a2c0cd8a75b0f3e98a9d000000b02c51114bd1aa59072f1103ab69eee435aa069b82c04f223d9d6c110350d2b2b25eed04829e05dbe6b50301d0bf03107abddb6cef6f7bb291652a5eb11068b9132276266df3636a7458a69ce658eabd0357489714558645aecc423c9ecda96e1670d65b4e8ff8bba540b4bd041f02f24110d7a8573b78ffdb7d9746cc7923dc1948d803fd69afcc20d14d330ee83ddcba1a9daf6296f27c0a6a8b016338e6b13743c299e07c20334643c84fdad8e4892400000168000000b0270828488e05951c841f7e2f309b2f49d0139c3f58f7b06b6bd975eba60839c9aa02390816279de9fe20aab7b6096593bd29847009124413686b442581f921f0405aa8842f0436e129ab41e5a1df1a28b27c73214de34151d99b7289986abe2cae1c3336dcd2df94527e695eecee12b32bf1438cc06074bf9ed44eb2f2e36b5d399aeb809dfeaeed9e8935672bd64a810a928310ec8ac2fe1e7bb4837a8ef253416cc11f5eb3bc402eca750e2d6d8e34000000b017afb9f1a5a1f0ad51404712bc487bdb24a876e136154d9907f7d26062c0080773f39365bbff46e738d3c3435d88c582c859858450e1d37e526566315a494dc964cf292508fdc3ea2fac8dd27fd44ea3f8e5220d11a7ce91c4104821ec98b05ce100c2620602230fc43ddfb4fdaa71c417b39f620f22a2da910656936c60b26ad1fb3f8dd116bf03fe95a8e9013cf95911a404239966a78ba5a87bd02509a1f516256c9c22ac8c78b90f7be38a27d1f200000168000000b0015961bbfbd1652d6fdd1c986a5551d9cf7fb18250c88959e0f1fa0de102bdc4c2a3d23ccf346cf57aee7d2a37328b5e0817ecfedfaae2addf1fc4b402d68a31d8a3161bee04216214fc72a512922427eea12840795329e51d9c68ca505deee344e871a9bb73fa3cf963a519696c699c07aa7a0df4a86a85b9d3ef16adbf9b11e8d006fe899f871640db80bb841442ca059a2b41eb1c8b5886a2e3ce15bf1359f6aef5da5f3740026e5d26c15d6ac9f1000000b009c7e86a9231a1d1033714889eca225e6f48dad8d732e8ffa62029f19fe947163481f1e292aaf34cce4f0234ca8053ae3452fefca308f265956ed802b5866d91423d015d1f6a82d968d7e639bb1ff1647013fc1411d3a3f6c7fde5c75664840181ab5fa6b71fcdfdc971594195821c682f795047b1959fd5a1f2e921a14c79d3c083c36f8cdea4570e422a68d4b7a11e0cc15d1625e3cb863b01df458d0e7dcb1deacfbf76b70728e111bf69fd603a0000000168000000b00fff38887059c0636054d5f0bbb93a38116eb042d1c712f6937725902087037fb1104b361093c8c65d63f3802c0c45f4db2b19dd22ff966e3e9534dc7579c560f17436e9f471558b4fbbcdbe0cda855ce149899fac5abfc2d67e256df5c94e6480e8bb1d45ef32999d54236586a0e7460819b56d50d13a565f255e9081f0e9dd87bf2b3b93f2ac7b690b2b28beabf24a1f1e596b9932e982297fb6836c4c7c2f77dba24653fca101a53253e60a7f14ac000000b02b113734d29d2cc39fecb31a10d7abece9e74e72838f96e3240c641b8dafe6db212d35eaf8fae9d6b2481cde2e5680da25308904d8991fb079890451d70e0876a85fdc4ad691d458c2fa31cc0340066b27f082f100eaaf992b6e030d1d79433202aab57b163e62f503fe79dfb62fba9f174e0d631221a275a199e9999956c2afc5c2241a547e6bc8944cf207bcced0ac1b972c41dd04f1fa660097d32ebdf5de987ffa45f4c5cbf5d8dda72fe4aaa6c800000168000000b02dc17d5d4831cf95d0cbedb120b5c173b136dfcb362942eedadbc39f82e64e03b9f43831efb3bfb159cfc7907383bb840a9471577096aa9bacef9fbd26805e343f450303e595ddcc67ba7058569cb69a78406f1af00bf9fc2570b7f5989feff08a4aa28ff0181e8aa68ab0bdcce1b7c20503816df37485a98b570756228ab6aeab8c256369327365781c198dc1d70eea106b9feaad27546865175b6b41bdef94dd1d411b2d5214bee18f4632c595388e000000b022ff21a16dfffec9cb2187fb6629389debf5e1364ebaf604b3728443a515bc9cc2d47ee154ebc7578f3b7d8d55058be41b9f382f2100c8eab2862f94a3152377623c92ad48f23aa37cb8666d698e32277779f8b9a21472c6e305fef5baac7e7c3e121e00cedc90562dc6d3bf394f9389184f0d6164cab0caa6bc49cdf6f62ce35b50525a0ab17988c124c368e95fba39124719128489c4ffd3e53000ffeddde49012388e402f4420a98d06948f38035e00000168000000b023e34a5355da5851224e98a4c83502dce088010d3c2c4f636a360d3f7e0a7d8a2ad5655cdf535ede7ce9b3653be55993d6d0e3390e2d12b9eb3dd505b61f3fcaa8ed3f7647c33eee9d810d52bba2d639a2d8e6d369bd4552138ce5fd4a2e3a98f2e3aafe09dcb009b789e86d5d9d69cb11fa4a4897fdc033db9d71405bc807b65461047b1101e83d14a9406235a1146b23bb5143c01c3aa5638d061649841ea75e722c9841d9e4a0509ea727e37b44c7000000b020ea86a24673d0deb5d1191b1479eab68b27a1f1912fba5d6f5cc485e7cba3b6d473c5154eb7a6969ea86489af67f144a5bf8e2e6e18dddd59e3814f9f203fc318be9323e5489decf91dfe4ebd6b8fe7523ba2ac88b25a8d467fe5593fa83ae4cb8892ff26741bc2910b751b1a8d0a3b28db1dee2f95b0c9f1a11502646a2d2fbffff4b2b397e304d7a3d1898ae77b2926d1f14a162b16191b59414bfe2933216acd4c6349f363ff073542ee4fb9f33100000168000000b00085541565f0fc0cb599b207dd21ff65bcce290c03418881402692a1a906a44f020b433c301ee73dbfe6616dc714299980f11660b28b2d1ed84bb874e9c01ddcc6e295bcd26cbaa1d50816d6a4c185af4f9c7512e2e7fdf0c77bbcfa6de2a414855f2a8c9c98c91cf7ae34af5b57f5150ab56a5707a103f01fc0a15ebdde654fd66550aaf503550a8c3c0881b21aa6e40c284e2c388ca2fbf086fdf922cff26c830090f16a9e6f7a235a9015bb303449000000b03051aa80914f3e7dbb9ab4841fb1447fc87555f170551a3ada85927bb0fc0e42933157df24c33311f88386f32cd525b6eee6702ebf673765063efcdc1d44282e734dea27b45451049ca6a84503cf6f097dbd90b9b15de6ad171857b650d226faff494f0ea3ac9a85edc3ed046e5d1b8f01f8389263f1599976155f2657d1ac96e5a6d0c93aeb321f2473cdc89f8be017144296f686baec8484ba330f1ae0b80206f21068fd37976a6a96a56a3b49f939", + "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd6" + "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711459608, + "timestamp": 1711479823, "version": 1, - "coinbase": "0x632b334737f23eb073adf0bb99d5417f9161245c", - "feeRecipient": "0x2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524" + "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", + "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e" + "root": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x2d5ad870ec7da355f1e5c1974e22671bd59d0f0a1855331a7d0350c6ced6bb4e000000020000000000000000000000000000000000000000000000000000000000000002005f0bd72e674e6c9d2979ed30cb4d1c61cbd9d09599e167a99221666a0a7cd600212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006602cd18632b334737f23eb073adf0bb99d5417f9161245c2cd29933b6645a4d54edd6a331e0ceb50baa84ba8eaebad6308f2c222821a524", - "publicInputsHash": "0x00b9136d0c140bdead5d3f63a267da0428c0209212e2b9a1e1dc33622378d5e9" + "header": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2000000020000000000000000000000000000000000000000000000000000000000000002000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c0f9316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", + "publicInputsHash": "0x00018e2cd561c8620160c32f8c374be37078e6d3bffe8747c305c9f3568a7ce0" } } \ No newline at end of file diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 2fec9bce466..73a552f15b2 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -131,7 +131,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcb; +global DEPLOYER_CONTRACT_ADDRESS = 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 506da929937..1f1967090f7 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -523,7 +523,8 @@ pub enum AbiValue { value: FieldElement, }, Integer { - value: i128, + sign: bool, + value: String, }, Boolean { value: bool, @@ -584,8 +585,7 @@ impl AbiValue { HirLiteral::Bool(value) => Self::Boolean { value }, HirLiteral::Str(value) => Self::String { value }, HirLiteral::Integer(field, sign) => { - let value = field.to_i128(); - Self::Integer { value: if sign { -value } else { value } } + Self::Integer { value: field.to_string(), sign } } _ => unreachable!("Literal cannot be used in the abi"), }, diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index e2144817194..245658a98e8 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcbn; +export const DEPLOYER_CONTRACT_ADDRESS = 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index a2742bdef8a..638a29c1017 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x1c4308cf4acda970916ac5dd5ae32106bd782b17d2da4f50090ff5b77032ad02"`, + `"0x19296a8280861c15b09b73699d7df675ca2ed8390d4607964e42ca955b508268"`, ); }); }); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index 488efe49ecd..d2c1d700901 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -17,11 +17,11 @@ export interface BasicValue { * An exported value. */ export type ABIValue = - | BasicValue<'field', bigint> | BasicValue<'boolean', boolean> - | BasicValue<'integer', bigint> | BasicValue<'string', string> | BasicValue<'array', ABIValue[]> + | IntegerValue + | FieldValue | StructValue; export interface StructValue { @@ -29,6 +29,14 @@ export interface StructValue { fields: (ABIValue & { name: string })[]; } +export interface FieldValue extends BasicValue<'field', string> { + sign: boolean; +} + +export interface IntegerValue extends BasicValue<'integer', string> { + sign: boolean; +} + /** * A named type. */ diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index efe95dc02a9..cea5f18f602 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a1>, + "txsEffectsHash": Buffer<0x00f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x000000000000000000000000000000000000000000000000000000006602cd7d", + "timestamp": "0x0000000000000000000000000000000000000000000000000000000066031ca7", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x28502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967>, + "root": Fr<0x160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb2>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x2d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf>, + "root": Fr<0x1fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f24>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe>, + "root": Fr<0x129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x288ea046201e40f136d1c712cc76e2157132ada5cef718f8836650b23bcf8471>, + "value": Fr<0x13bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf890>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x005d0fac5a1aacd8e5293b8de3a274b7087dbbdaeb3efd2e36df2e4f91f357e5>, + "encryptedLogsHash": Fr<0x00ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x2c4f4f50d66785fdeae26cfd05b6032f52ed4104dd0407cfdbc55a024eb51096>, + "value": Fr<0x1318b641187d9678f7db0e5b911c7ecb2291b75367c7fdee2b5a711694520765>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee3066187>, + "value": Fr<0x1559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x27f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb8>, + "value": Fr<0x0ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x0e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa>, + "value": Fr<0x16736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index ae4b03ec892..3558ceae438 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -04264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105efaf9f8c44010027f63604d8f92f19f44bd2962bb240ffc7199cd7ae2481b2c8fc4ff1f3b8d56e00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000104264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105efaf9f8c440100000000000000000000000000000000000000000000000000000000000000000004264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105ef0000000000000000000000000000000000000000af9f8c4400000000000127f63604d8f92f19f44bd2962bb240ffc7199cd7ae2481b2c8fc4ff1f3b8d56e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163ff2cf51017be341a4c78bb40496b658edc4f56a21c3a107289107a7d4d048000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104264940b9d0113ad4e1ad7aed2afb2f3f8423137c85257c8509bdade02105ef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040040d13d312ab8f01b005a83779462d064f947fe677af4a84a6da4208641f44300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f074cafd093764f86adf527a5da2e57da986ac03233033397537a888b38d2cfd20e749f3a31cc27ed4aa1c105c023e78dbd20f922114e47d92d044fefc24e355f24a06ce86cc84094dd363c15c42c94fb941b9e9e6f2272cf4de3bcc5c47b6a631d68a2e97e7b86b5daf79b4fdd8aa84e69631600893cbffda4383c8997722af300000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +15883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c4401000538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e7500000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c440100000000000000000000000000000000000000000000000000000000000000000015883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f780000000000000000000000000000000000000000af9f8c440000000000010538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1893a5f8a6edeaf9943a155114589b07f3d1d09e4d089edcfa07b969650eb9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fb6a4cb910fd2e9e4717e12e84abc2eab723b09bdd8fc8e7219fb97a395d8c00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0890abc78b8fa90c35f41934c751512ec2c2e1519e76c3b5e18efa0fc4b6d09176e094b458e5dbc261fddc9905fe0889f55c02b4655e8e3a91ecba3220eeb9ac74300000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index b0cf60c9a3e..41902d20920 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000288ea046201e40f136d1c712cc76e2157132ada5cef718f8836650b23bcf8471000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000599c71d4d0b5bfa98a9b668384351e6434bbd54bf8f9b4acc764d9de49c66c3006379df647575f965b4677d2fbcce0e1b6a6a0b86b7759401b080117f0802f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967000000030000000000000000000000000000000000000000000000000000000000000001002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf00000180107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006602cd7d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000fdb11963fbdc677df7e69deb637a7746a144e5ad7f6298eac5c950fce02c59304251ac0d54a07b260b153c4b378d43bbe646a83ba9b5d378a1ce55060bc6e3a23341ea58faff4dc0b1a20b5bf4a6b78d5e604a08a94d0a690ea9dc3a1897efd28822e414e92ee71815cadd6415ea200f184bcdd36d0270cbd048dd1468c35450906bca10100006379df647575f965b4677d2fbcce0e1b6a6a0b86b7759401b080117f0802f828822e414e92ee71815cadd6415ea200f184bcdd36d0270cbd048dd1468c354500000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000428502482f7f3790d5bc44ade50ee1c78cb95b9321faa9aecc94345564572d967000000030000000000000000000000000000000000000000000000000000000000000001002672689c4fa609f1315043e8a8deb36f1686ab1fbd176d624464936c2a22a100089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302d47464fc5baf80feb14e53628efb1f405cc100cf9a2f469bf2ebd7d662cedcf00000180107da907f406ea8ecfcd362e86b27eca50d94d04ea92d1cc09d7ecd4f81f04fe000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006602cd7d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f21f0fb1e5531d768f8ce63f411473acc4d81421aadda4425c52fdfc1d6b18eb20ce0972a4958e5b11c7d51f6f803f78799b28bd1c2df941f869ef6c553d6941b27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed15b6bd1a640f82463dc078acfd55e7e7c4eb013ea66ee099373ad608857117ec00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013b848b11a4339ef7a9395d66884f023bec1ad17c4792cfd07f422d2ef782b65034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001b83fe6f75fc7f54a7d29536f19195a777376fdbc959bed02604e2e262d979ab28272000404f8f47b27ca59c0d66f0e3046b3f079fc68ab395a7bc3eda35890e232e291a67a197a0b581d8716d53d79916851a44a10678ddb260212b49c4a4da045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d00906bca10100034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d000000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1e08c7474ec54e620c1374d3c26a9aeeeb7c52a058ffab74c6f94ed3df566683268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed11ddaf04805a6f068018feca53bbb9a7328e0e09b9fc7d48e6e5f7599e033dba00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index dc916b09c83..ae8febef822 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198f8393258b9341796b7ad0b5b152f0cf060b55417a5fc704c07a3e0f725da500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee30661870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d0fac5a1aacd8e5293b8de3a274b7087dbbdaeb3efd2e36df2e4f91f357e5006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002e292cae7681f42f990d18ea9b49a88bf902e0c9b673f8df1c33df85313262a5059c713e8d7f3516130a28bde84b30ef0aafc5c7f2a57a150c31214275a8b0d40e33d6a453b58737c2bb760b23a160b3e59231be733eaf4540f738bb9d0baf0d198f8393258b9341796b7ad0b5b152f0cf060b55417a5fc704c07a3e0f725da50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2508227010734661320ba6c52db55f1d51a1964ce3ff7cdcac015e5b0d3cfa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b56d0276c55f0e12c839d7e6485d8be091e3f499ba2aa1fcf5a1ee30661870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000127f0b87859b006438064ee1c820cfbae9ff372ef024ffeba117dd9c1be604fb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd6000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000bf724e301974fdb4daaf99f85827638eae14a49b6c46a4a92ef060e265c1fac0783775f73852526669906702803e076d9e985652a7da3d7a9411153a7ce30c829f443365e401807d255a40272ae1694d8452cbd43f2c7df690019f2203ea8821febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From 3a388bebb69bc92ae822df232055908b7a01b83e Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:35:24 +0000 Subject: [PATCH 012/123] added abi exports to contract artifact --- .../noirc_frontend/src/hir/def_map/mod.rs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 7c0090ff95b..020ee41ad0e 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -246,6 +246,43 @@ impl CrateDefMap { } }); + let mut outputs = + ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; + + interner.get_all_globals().iter().for_each(|global_info| { + interner.global_attributes(&global_info.id).iter().for_each(|attr| { + match attr { + SecondaryAttribute::Abi(tag) => { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id) + } else { + outputs + .globals + .insert(tag.to_string(), vec![global_info.id]); + } + } + _ => (), + } + }) + }); + + module.type_definitions().for_each(|id| match id { + ModuleDefId::TypeId(struct_id) => interner + .struct_attributes(&struct_id) + .iter() + .for_each(|attr| match attr { + SecondaryAttribute::Abi(tag) => { + if let Some(tagged) = outputs.structs.get_mut(tag) { + tagged.push(struct_id) + } else { + outputs.structs.insert(tag.to_string(), vec![struct_id]); + } + } + _ => (), + }), + _ => (), + }); + let name = self.get_module_path(id, module.parent); Some(Contract { name, location: module.location, functions, outputs }) } else { From 85596ecc72d406757fc0a9385b0d3f84967a8972 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:35:24 +0000 Subject: [PATCH 013/123] added abi exports to contract artifact --- .../docs_example_contract/src/main.nr | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 661b1a1516d..2a9bab04e98 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,6 +23,49 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; + struct StorageFields { + leader: Storable, + legendary_card: Storable, + profiles: Storable, + set: Storable, + private_immutable: Storable, + shared_immutable: Storable, + minters: Storable, + public_immutable: Storable, + } + + struct StorageNotes { + card_note: StorableNote, + } + + struct StorageLayout { + fields: StorageFields, + notes: StorageNotes, + } + + #[abi(event)] + struct WithdrawalProcessed { + who: AztecAddress, + amount: u64, + } + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout { + fields: StorageFields { + leader: Storable { slot: 1, typ: "PublicMutable" }, + legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, + profiles: Storable { slot: 4, typ: "Map>" }, + set: Storable { slot: 5, typ: "PrivateSet" }, + private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, + shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, + minters: Storable { slot: 8, typ: "Map" }, + public_immutable: Storable { slot: 9, typ: "PublicImmutable" } + }, + notes: StorageNotes { + card_note: StorableNote { id: 2, typ: "CardNote" } + } + }; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable From 46df9a551b302d14f9f7539a4e97da2b861dcf6d Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:50:42 +0000 Subject: [PATCH 014/123] reverted change --- .../docs_example_contract/src/main.nr | 43 ------------------- 1 file changed, 43 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 2a9bab04e98..661b1a1516d 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -23,49 +23,6 @@ contract DocsExample { use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; - struct StorageFields { - leader: Storable, - legendary_card: Storable, - profiles: Storable, - set: Storable, - private_immutable: Storable, - shared_immutable: Storable, - minters: Storable, - public_immutable: Storable, - } - - struct StorageNotes { - card_note: StorableNote, - } - - struct StorageLayout { - fields: StorageFields, - notes: StorageNotes, - } - - #[abi(event)] - struct WithdrawalProcessed { - who: AztecAddress, - amount: u64, - } - - #[abi(storage)] - global STORAGE_LAYOUT = StorageLayout { - fields: StorageFields { - leader: Storable { slot: 1, typ: "PublicMutable" }, - legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, - profiles: Storable { slot: 4, typ: "Map>" }, - set: Storable { slot: 5, typ: "PrivateSet" }, - private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, - shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, - minters: Storable { slot: 8, typ: "Map" }, - public_immutable: Storable { slot: 9, typ: "PublicImmutable" } - }, - notes: StorageNotes { - card_note: StorableNote { id: 2, typ: "CardNote" } - } - }; - #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable From 013213963f834438e8145685e5cf3ed4e149311c Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 12:40:24 +0000 Subject: [PATCH 015/123] clippy pass --- .../noirc_frontend/src/hir/def_map/mod.rs | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 020ee41ad0e..4dce79ccf81 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -251,36 +251,28 @@ impl CrateDefMap { interner.get_all_globals().iter().for_each(|global_info| { interner.global_attributes(&global_info.id).iter().for_each(|attr| { - match attr { - SecondaryAttribute::Abi(tag) => { - if let Some(tagged) = outputs.globals.get_mut(tag) { - tagged.push(global_info.id) - } else { - outputs - .globals - .insert(tag.to_string(), vec![global_info.id]); - } + if let SecondaryAttribute::Abi(tag) = attr { + if let Some(tagged) = outputs.globals.get_mut(tag) { + tagged.push(global_info.id); + } else { + outputs.globals.insert(tag.to_string(), vec![global_info.id]); } - _ => (), } - }) + }); }); - module.type_definitions().for_each(|id| match id { - ModuleDefId::TypeId(struct_id) => interner - .struct_attributes(&struct_id) - .iter() - .for_each(|attr| match attr { - SecondaryAttribute::Abi(tag) => { + module.type_definitions().for_each(|id| { + if let ModuleDefId::TypeId(struct_id) = id { + interner.struct_attributes(&struct_id).iter().for_each(|attr| { + if let SecondaryAttribute::Abi(tag) = attr { if let Some(tagged) = outputs.structs.get_mut(tag) { - tagged.push(struct_id) + tagged.push(struct_id); } else { outputs.structs.insert(tag.to_string(), vec![struct_id]); } } - _ => (), - }), - _ => (), + }); + } }); let name = self.get_module_path(id, module.parent); From 6545eecfd08883f4f6e1c1b6268b5d0a87cee6d1 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 10:41:27 +0000 Subject: [PATCH 016/123] wip --- noir-projects/aztec-nr/aztec/src/prelude.nr | 2 +- .../aztec-nr/aztec/src/state_vars/storage.nr | 10 +++ .../aztec_macros/src/transforms/storage.rs | 71 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/noir-projects/aztec-nr/aztec/src/prelude.nr b/noir-projects/aztec-nr/aztec/src/prelude.nr index 4ff61133372..7dc16c89015 100644 --- a/noir-projects/aztec-nr/aztec/src/prelude.nr +++ b/noir-projects/aztec-nr/aztec/src/prelude.nr @@ -4,7 +4,7 @@ use crate::{ state_vars::{ map::Map, private_immutable::PrivateImmutable, private_mutable::PrivateMutable, public_immutable::PublicImmutable, public_mutable::PublicMutable, private_set::PrivateSet, - shared_immutable::SharedImmutable + shared_immutable::SharedImmutable, storage::Storable, storage::StorableNote }, log::{emit_unencrypted_log, emit_encrypted_log}, context::PrivateContext, note::{ diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr index e742ab7e036..e56a9bb047f 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr @@ -5,3 +5,13 @@ trait Storage where T: Serialize + Deserialize { self.storage_slot } } + +struct Storable { + slot: Field, + typ: str + } + +struct StorableNote { + id: Field, + typ: str + } diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 9ba1bd29812..c07506cca2d 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -370,3 +370,74 @@ pub fn assign_storage_slots( } Ok(()) } + +pub fn generate_storage_layout( + module: &mut SortedModule, + storage_struct_name: &String, +) -> Result<(), AztecMacroError> { + let definition = module + .types + .iter() + .find(|r#struct| r#struct.name.0.contents == *storage_struct_name) + .unwrap(); + + let mut generic_args = vec![]; + let mut storable_fields = vec![]; + + definition.fields.iter().enumerate().for_each(|(index, (field_ident, _))| { + storable_fields.push(format!("{}: Storable", field_ident, index)); + generic_args.push(format!("N{}", index)); + }); + + let storage_fields_source = format!( + " + struct StorageFields<{}> {{ + {} + }} + ", + generic_args.join(", "), + storable_fields.join(",\n") + ); + + let field_constructors = definition + .fields + .iter() + .flat_map(|field| { + generate_storage_field_constructor(field, slot_zero.clone()) + .map(|expression| (field.0.clone(), expression)) + }) + .collect(); + + let storage_constructor_statement = make_statement(StatementKind::Expression(expression( + ExpressionKind::constructor((chained_path!(storage_struct_name), field_constructors)), + ))); + + let init = NoirFunction::normal(FunctionDefinition::normal( + &ident("init"), + &vec![], + &[( + ident("context"), + make_type(UnresolvedTypeData::Named( + chained_dep!("aztec", "context", "Context"), + vec![], + true, + )), + )], + &BlockExpression(vec![storage_constructor_statement]), + &[], + &return_type(chained_path!("Self")), + )); + + let storage_impl = TypeImpl { + object_type: UnresolvedType { + typ: UnresolvedTypeData::Named(chained_path!(storage_struct_name), vec![], true), + span: Some(Span::default()), + }, + type_span: Span::default(), + generics: vec![], + methods: vec![(init, Span::default())], + }; + module.impls.push(storage_impl); + + Ok(()) +} From 7c6544fa7328ce68adb3ecca72df1d7a9caeb333 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 15:49:34 +0000 Subject: [PATCH 017/123] wip --- .../docs_example_contract/src/main.nr | 45 ++++++++++++++++++- .../aztec_macros/src/transforms/storage.rs | 40 ----------------- 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 661b1a1516d..de355841cfa 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -16,13 +16,56 @@ contract DocsExample { use dep::aztec::prelude::{ AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, NoteViewerOptions, PrivateContext, Map, PublicMutable, PublicImmutable, PrivateMutable, PrivateImmutable, - PrivateSet, SharedImmutable + PrivateSet, SharedImmutable, Storable, StorableNote }; use dep::aztec::{note::note_getter_options::Comparator, context::{PublicContext, Context}}; // how to import methods from other files/folders within your workspace use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; + struct StorageFields { + leader: Storable, + legendary_card: Storable, + profiles: Storable, + set: Storable, + private_immutable: Storable, + shared_immutable: Storable, + minters: Storable, + public_immutable: Storable, + } + + struct StorageNotes { + card_note: StorableNote, + } + + struct StorageLayout { + fields: StorageFields, + notes: StorageNotes, + } + + #[abi(event)] + struct WithdrawalProcessed { + who: AztecAddress, + amount: u64, + } + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout { + fields: StorageFields { + leader: Storable { slot: 1, typ: "PublicMutable" }, + legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, + profiles: Storable { slot: 4, typ: "Map>" }, + set: Storable { slot: 5, typ: "PrivateSet" }, + private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, + shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, + minters: Storable { slot: 8, typ: "Map" }, + public_immutable: Storable { slot: 9, typ: "PublicImmutable" } + }, + notes: StorageNotes { + card_note: StorableNote { id: 2, typ: "CardNote" } + } + }; + #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index c07506cca2d..df865f3d3a2 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -399,45 +399,5 @@ pub fn generate_storage_layout( storable_fields.join(",\n") ); - let field_constructors = definition - .fields - .iter() - .flat_map(|field| { - generate_storage_field_constructor(field, slot_zero.clone()) - .map(|expression| (field.0.clone(), expression)) - }) - .collect(); - - let storage_constructor_statement = make_statement(StatementKind::Expression(expression( - ExpressionKind::constructor((chained_path!(storage_struct_name), field_constructors)), - ))); - - let init = NoirFunction::normal(FunctionDefinition::normal( - &ident("init"), - &vec![], - &[( - ident("context"), - make_type(UnresolvedTypeData::Named( - chained_dep!("aztec", "context", "Context"), - vec![], - true, - )), - )], - &BlockExpression(vec![storage_constructor_statement]), - &[], - &return_type(chained_path!("Self")), - )); - - let storage_impl = TypeImpl { - object_type: UnresolvedType { - typ: UnresolvedTypeData::Named(chained_path!(storage_struct_name), vec![], true), - span: Some(Span::default()), - }, - type_span: Span::default(), - generics: vec![], - methods: vec![(init, Span::default())], - }; - module.impls.push(storage_impl); - Ok(()) } From efe757d6d540d11a2447dca4939a39bb003718c6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 06:32:22 +0000 Subject: [PATCH 018/123] storage layout export and note ids --- noir-projects/aztec-nr/aztec/src/prelude.nr | 2 +- .../aztec-nr/aztec/src/state_vars/storage.nr | 4 - .../docs_example_contract/src/main.nr | 45 +-- noir/noir-repo/aztec_macros/src/lib.rs | 12 +- .../compute_note_hash_and_nullifier.rs | 110 +++---- .../src/transforms/note_interface.rs | 66 +++- .../aztec_macros/src/transforms/storage.rs | 281 +++++++++++++----- .../aztec_macros/src/utils/errors.rs | 6 + .../aztec_macros/src/utils/hir_utils.rs | 82 +++-- 9 files changed, 350 insertions(+), 258 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/prelude.nr b/noir-projects/aztec-nr/aztec/src/prelude.nr index 7dc16c89015..b43c10713cd 100644 --- a/noir-projects/aztec-nr/aztec/src/prelude.nr +++ b/noir-projects/aztec-nr/aztec/src/prelude.nr @@ -4,7 +4,7 @@ use crate::{ state_vars::{ map::Map, private_immutable::PrivateImmutable, private_mutable::PrivateMutable, public_immutable::PublicImmutable, public_mutable::PublicMutable, private_set::PrivateSet, - shared_immutable::SharedImmutable, storage::Storable, storage::StorableNote + shared_immutable::SharedImmutable, storage::Storable }, log::{emit_unencrypted_log, emit_encrypted_log}, context::PrivateContext, note::{ diff --git a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr index e56a9bb047f..070c8d6fec0 100644 --- a/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr +++ b/noir-projects/aztec-nr/aztec/src/state_vars/storage.nr @@ -11,7 +11,3 @@ struct Storable { typ: str } -struct StorableNote { - id: Field, - typ: str - } diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index de355841cfa..6490b85ff1a 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -16,56 +16,13 @@ contract DocsExample { use dep::aztec::prelude::{ AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, NoteViewerOptions, PrivateContext, Map, PublicMutable, PublicImmutable, PrivateMutable, PrivateImmutable, - PrivateSet, SharedImmutable, Storable, StorableNote + PrivateSet, SharedImmutable, Storable }; use dep::aztec::{note::note_getter_options::Comparator, context::{PublicContext, Context}}; // how to import methods from other files/folders within your workspace use crate::options::create_account_card_getter_options; use crate::types::{card_note::{CardNote, CARD_NOTE_LEN}, leader::Leader}; - struct StorageFields { - leader: Storable, - legendary_card: Storable, - profiles: Storable, - set: Storable, - private_immutable: Storable, - shared_immutable: Storable, - minters: Storable, - public_immutable: Storable, - } - - struct StorageNotes { - card_note: StorableNote, - } - - struct StorageLayout { - fields: StorageFields, - notes: StorageNotes, - } - - #[abi(event)] - struct WithdrawalProcessed { - who: AztecAddress, - amount: u64, - } - - #[abi(storage)] - global STORAGE_LAYOUT = StorageLayout { - fields: StorageFields { - leader: Storable { slot: 1, typ: "PublicMutable" }, - legendary_card: Storable { slot: 3, typ: "PrivateMutable" }, - profiles: Storable { slot: 4, typ: "Map>" }, - set: Storable { slot: 5, typ: "PrivateSet" }, - private_immutable: Storable { slot: 6, typ: "PrivateImmutable" }, - shared_immutable: Storable { slot: 7, typ: "SharedImmutable" }, - minters: Storable { slot: 8, typ: "Map" }, - public_immutable: Storable { slot: 9, typ: "PublicImmutable" } - }, - notes: StorageNotes { - card_note: StorableNote { id: 2, typ: "CardNote" } - } - }; - #[aztec(storage)] struct Storage { // Shows how to create a custom struct in PublicMutable diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 03df02a9ffe..78579281714 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -8,7 +8,7 @@ use transforms::{ note_interface::generate_note_interface_impl, storage::{ assign_storage_slots, check_for_storage_definition, check_for_storage_implementation, - generate_storage_implementation, + generate_storage_implementation, generate_storage_layout, }, }; @@ -95,6 +95,7 @@ fn transform_module(module: &mut SortedModule) -> Result if !check_for_storage_implementation(module, &storage_struct_name) { generate_storage_implementation(module, &storage_struct_name)?; } + generate_storage_layout(module, storage_struct_name)?; } for structure in module.types.iter_mut() { @@ -185,16 +186,11 @@ fn transform_module(module: &mut SortedModule) -> Result fn transform_collected_defs( crate_id: &CrateId, context: &mut HirContext, - collected_trait_impls: &[UnresolvedTraitImpl], + _collected_trait_impls: &[UnresolvedTraitImpl], collected_functions: &mut [UnresolvedFunctions], ) -> Result<(), (MacroError, FileId)> { if has_aztec_dependency(crate_id, context) { - inject_compute_note_hash_and_nullifier( - crate_id, - context, - collected_trait_impls, - collected_functions, - ) + inject_compute_note_hash_and_nullifier(crate_id, context, collected_functions) } else { Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index fd538dc578b..ed077fbfd35 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -2,7 +2,7 @@ use noirc_errors::{Location, Span}; use noirc_frontend::{ graph::CrateId, hir::{ - def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}, + def_collector::dc_crate::UnresolvedFunctions, def_map::{LocalModuleId, ModuleId}, }, macros_api::{FileId, HirContext, MacroError}, @@ -10,7 +10,7 @@ use noirc_frontend::{ parse_program, FunctionReturnType, ItemVisibility, NoirFunction, UnresolvedTypeData, }; -use crate::utils::hir_utils::fetch_struct_trait_impls; +use crate::utils::hir_utils::{fetch_note_names, get_contract_module_data}; // Check if "compute_note_hash_and_nullifier(AztecAddress,Field,Field,Field,[Field; N]) -> [Field; 4]" is defined fn check_for_compute_note_hash_and_nullifier_definition( @@ -53,64 +53,48 @@ fn check_for_compute_note_hash_and_nullifier_definition( pub fn inject_compute_note_hash_and_nullifier( crate_id: &CrateId, context: &mut HirContext, - unresolved_traits_impls: &[UnresolvedTraitImpl], collected_functions: &mut [UnresolvedFunctions], ) -> Result<(), (MacroError, FileId)> { - // We first fetch modules in this crate which correspond to contracts, along with their file id. - let contract_module_file_ids: Vec<(LocalModuleId, FileId)> = context - .def_map(crate_id) - .expect("ICE: Missing crate in def_map") - .modules() - .iter() - .filter(|(_, module)| module.is_contract) - .map(|(idx, module)| (LocalModuleId(idx), module.location.file)) - .collect(); - - // If the current crate does not contain a contract module we simply skip it. - if contract_module_file_ids.is_empty() { - return Ok(()); - } else if contract_module_file_ids.len() != 1 { - panic!("Found multiple contracts in the same crate"); - } - - let (module_id, file_id) = contract_module_file_ids[0]; - - // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an - // escape hatch for this mechanism. - // TODO(#4647): improve this diagnosis and error messaging. - if collected_functions.iter().any(|coll_funcs_data| { - check_for_compute_note_hash_and_nullifier_definition(&coll_funcs_data.functions, module_id) - }) { - return Ok(()); - } - - // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the - // contract might use. These are the types that implement the NoteInterface trait, which provides the - // get_note_type_id function. - let note_types = fetch_struct_trait_impls(context, unresolved_traits_impls, "NoteInterface"); - - // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. - let func = generate_compute_note_hash_and_nullifier(¬e_types); - - // And inject the newly created function into the contract. - - // TODO(#4373): We don't have a reasonable location for the source code of this autogenerated function, so we simply - // pass an empty span. This function should not produce errors anyway so this should not matter. - let location = Location::new(Span::empty(0), file_id); - - // These are the same things the ModCollector does when collecting functions: we push the function to the - // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list - // on collected but unresolved functions. - - let func_id = context.def_interner.push_empty_fn(); - context.def_interner.push_function( - func_id, - &func.def, - ModuleId { krate: *crate_id, local_id: module_id }, - location, - ); + if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { + // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an + // escape hatch for this mechanism. + // TODO(#4647): improve this diagnosis and error messaging. + if collected_functions.iter().any(|coll_funcs_data| { + check_for_compute_note_hash_and_nullifier_definition( + &coll_funcs_data.functions, + module_id, + ) + }) { + return Ok(()); + } + + // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the + // contract might use. These are the types that implement the NoteInterface trait, which provides the + // get_note_type_id function. + let note_types = fetch_note_names(context, crate_id); + + // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. + let func = generate_compute_note_hash_and_nullifier(¬e_types); + + // And inject the newly created function into the contract. + + // TODO(#4373): We don't have a reasonable location for the source code of this autogenerated function, so we simply + // pass an empty span. This function should not produce errors anyway so this should not matter. + let location = Location::new(Span::empty(0), file_id); + + // These are the same things the ModCollector does when collecting functions: we push the function to the + // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list + // on collected but unresolved functions. + + let func_id = context.def_interner.push_empty_fn(); + context.def_interner.push_function( + func_id, + &func.def, + ModuleId { krate: *crate_id, local_id: module_id }, + location, + ); - context.def_map_mut(crate_id).unwrap() + context.def_map_mut(crate_id).unwrap() .modules_mut()[module_id.0] .declare_function( func.name_ident().clone(), ItemVisibility::Public, func_id @@ -118,12 +102,12 @@ pub fn inject_compute_note_hash_and_nullifier( "Failed to declare the autogenerated compute_note_hash_and_nullifier function, likely due to a duplicate definition. See https://github.com/AztecProtocol/aztec-packages/issues/4647." ); - collected_functions - .iter_mut() - .find(|fns| fns.file_id == file_id) - .expect("ICE: no functions found in contract file") - .push_fn(module_id, func_id, func.clone()); - + collected_functions + .iter_mut() + .find(|fns| fns.file_id == file_id) + .expect("ICE: no functions found in contract file") + .push_fn(module_id, func_id, func.clone()); + } Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs index 01d0272088b..de94e5eed2d 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs @@ -1,7 +1,7 @@ use noirc_errors::Span; use noirc_frontend::{ - parse_program, parser::SortedModule, ItemVisibility, NoirFunction, NoirStruct, PathKind, - TraitImplItem, TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, + parse_program, parser::SortedModule, ItemVisibility, LetStatement, NoirFunction, NoirStruct, + PathKind, TraitImplItem, TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, }; use regex::Regex; @@ -24,7 +24,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt .iter_mut() .filter(|typ| typ.attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)"))); - let mut note_properties_structs = vec![]; + let mut structs_to_inject = vec![]; for note_struct in annotated_note_structs { // Look for the NoteInterface trait implementation for the note @@ -80,6 +80,13 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt )), }), }?; + let note_type_id = note_type_id(¬e_type); + + let (note_exports_struct, note_exports_global) = + generate_note_exports_struct_and_global(¬e_type, ¬e_type_id)?; + + structs_to_inject.push(note_exports_struct); + module.globals.push(note_exports_global); // Automatically inject the header field if it's not present let (header_field_name, _) = if let Some(existing_header) = @@ -138,7 +145,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt &header_field_name.0.contents, note_interface_impl_span, )?; - note_properties_structs.push(note_properties_struct); + structs_to_inject.push(note_properties_struct); let note_properties_fn = generate_note_properties_fn( ¬e_type, ¬e_fields, @@ -167,7 +174,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt if !check_trait_method_implemented(trait_impl, "get_note_type_id") { let get_note_type_id_fn = - generate_note_get_type_id(¬e_type, note_interface_impl_span)?; + generate_note_get_type_id(¬e_type_id, note_interface_impl_span)?; trait_impl.items.push(TraitImplItem::Function(get_note_type_id_fn)); } @@ -178,7 +185,7 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt } } - module.types.extend(note_properties_structs); + module.types.extend(structs_to_inject); Ok(()) } @@ -245,19 +252,16 @@ fn generate_note_set_header( // Automatically generate the note type id getter method. The id itself its calculated as the concatenation // of the conversion of the characters in the note's struct name to unsigned integers. fn generate_note_get_type_id( - note_type: &str, + note_type_id: &str, impl_span: Option, ) -> Result { - // TODO(#4519) Improve automatic note id generation and assignment - let note_id = - note_type.chars().map(|c| (c as u32).to_string()).collect::>().join(""); let function_source = format!( " fn get_note_type_id() -> Field {{ {} }} ", - note_id + note_type_id ) .to_string(); @@ -443,6 +447,40 @@ fn generate_compute_note_content_hash( Ok(noir_fn) } +fn generate_note_exports_struct_and_global( + note_type: &str, + note_type_id: &str, +) -> Result<(NoirStruct, LetStatement), AztecMacroError> { + let struct_source = format!( + " + struct {}Exports {{ + id: Field, + typ: str + }} + + #[abi(notes)] + global {}_EXPORTS = {}Exports {{ + id: {}, + typ: \"{}\", + }}; + ", + note_type, note_type, note_type, note_type_id, note_type + ) + .to_string(); + + let (struct_ast, errors) = parse_program(&struct_source); + if !errors.is_empty() { + dbg!(errors); + return Err(AztecMacroError::CouldNotImplementNoteInterface { + secondary_message: Some(format!("Failed to parse Noir macro code (struct {}Exports). This is either a bug in the compiler or the Noir macro code", note_type)), + span: None + }); + } + + let mut struct_ast = struct_ast.into_sorted(); + Ok((struct_ast.types.pop().unwrap(), struct_ast.globals.pop().unwrap())) +} + // Source code generator functions. These utility methods produce Noir code as strings, that are then parsed and added to the AST. fn generate_note_properties_struct_source( @@ -581,3 +619,9 @@ fn generate_note_deserialize_content_source( ) .to_string() } + +// Utility function to generate the note type id as a Field +fn note_type_id(note_type: &str) -> String { + // TODO(#4519) Improve automatic note id generation and assignment + note_type.chars().map(|c| (c as u32).to_string()).collect::>().join("") +} diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index df865f3d3a2..93ed1c7c96a 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -1,4 +1,4 @@ -use std::borrow::{Borrow, BorrowMut}; +use std::borrow::Borrow; use noirc_errors::Span; use noirc_frontend::{ @@ -7,7 +7,9 @@ use noirc_frontend::{ FieldElement, FileId, HirContext, HirExpression, HirLiteral, HirStatement, NodeInterner, }, node_interner::{TraitId, TraitImplKind}, + parse_program, parser::SortedModule, + token::SecondaryAttribute, BlockExpression, Expression, ExpressionKind, FunctionDefinition, Ident, Literal, NoirFunction, NoirStruct, PathKind, Pattern, StatementKind, Type, TypeImpl, UnresolvedType, UnresolvedTypeData, @@ -21,7 +23,7 @@ use crate::{ make_type, pattern, return_type, variable, variable_path, }, errors::AztecMacroError, - hir_utils::{collect_crate_structs, collect_traits}, + hir_utils::{collect_crate_structs, collect_traits, get_contract_module_data}, }, }; @@ -263,117 +265,207 @@ pub fn assign_storage_slots( context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { let traits: Vec<_> = collect_traits(context); - for struct_id in collect_crate_structs(crate_id, context) { - let interner: &mut NodeInterner = context.def_interner.borrow_mut(); - let r#struct = interner.get_struct(struct_id); - let file_id = r#struct.borrow().location.file; - let attributes = interner.struct_attributes(&struct_id); - if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) - && r#struct.borrow().id.krate().is_root() - { - let init_id = interner - .lookup_method( - &Type::Struct(interner.get_struct(struct_id), vec![]), - struct_id, - "init", - false, - ) - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage struct must have an init function".to_string(), - ), - }, - file_id, - ))?; - let init_function = interner.function(&init_id).block(interner); - let init_function_statement_id = init_function.statements().first().ok_or(( + if let Some((_, file_id)) = get_contract_module_data(context, crate_id) { + let storage_struct = collect_crate_structs(crate_id, context) + .iter() + .find_map(|&struct_id| { + let r#struct = context.def_interner.get_struct(struct_id); + let attributes = context.def_interner.struct_attributes(&struct_id); + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) + && r#struct.borrow().id.krate().is_root() + { + Some(r#struct) + } else { + None + } + }) + .ok_or(( AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some("Init storage statement not found".to_string()), + secondary_message: Some("Storage struct not found".to_string()), }, file_id, ))?; - let storage_constructor_statement = interner.statement(init_function_statement_id); - let storage_constructor_expression = match storage_constructor_statement { - HirStatement::Expression(expression_id) => { - match interner.expression(&expression_id) { + let storage_layout = context + .def_interner + .get_all_globals() + .iter() + .find_map(|global_info| { + let statement = context.def_interner.get_global_let_statement(global_info.id); + if statement.clone().is_some_and(|stmt| { + stmt.attributes + .iter() + .any(|attr| *attr == SecondaryAttribute::Abi("storage".to_string())) + }) { + let expr = context.def_interner.expression(&statement.unwrap().expression); + match expr { HirExpression::Constructor(hir_constructor_expression) => { - Ok(hir_constructor_expression) + Some(hir_constructor_expression) } - _ => Err((AztecMacroError::CouldNotAssignStorageSlots { + _ => None, + } + } else { + None + } + }) + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some("Storage layout struct not found".to_string()), + }, + file_id, + ))?; + + let init_id = context + .def_interner + .lookup_method( + &Type::Struct(context.def_interner.get_struct(storage_struct.borrow().id), vec![]), + storage_struct.borrow().id, + "init", + false, + ) + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage struct must have an init function".to_string(), + ), + }, + file_id, + ))?; + let init_function = context.def_interner.function(&init_id).block(&context.def_interner); + let init_function_statement_id = init_function.statements().first().ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some("Init storage statement not found".to_string()), + }, + file_id, + ))?; + let storage_constructor_statement = + context.def_interner.statement(init_function_statement_id); + + let storage_constructor_expression = match storage_constructor_statement { + HirStatement::Expression(expression_id) => { + match context.def_interner.expression(&expression_id) { + HirExpression::Constructor(hir_constructor_expression) => { + Ok(hir_constructor_expression) + } + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { secondary_message: Some( "Storage constructor statement must be a constructor expression" .to_string(), ), - }, file_id)) - } + }, + file_id, + )), } + } + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage constructor statement must be an expression".to_string(), + ), + }, + file_id, + )), + }?; + + let mut storage_slot: u64 = 1; + for (index, (_, expr_id)) in storage_constructor_expression.fields.iter().enumerate() { + let fields = storage_struct.borrow().get_fields(&[]); + let (field_name, field_type) = fields.get(index).unwrap(); + let new_call_expression = match context.def_interner.expression(expr_id) { + HirExpression::Call(hir_call_expression) => Ok(hir_call_expression), _ => Err(( AztecMacroError::CouldNotAssignStorageSlots { secondary_message: Some( - "Storage constructor statement must be an expression".to_string(), + "Storage field initialization expression is not a call expression" + .to_string(), ), }, file_id, )), }?; - let mut storage_slot: u64 = 1; - for (index, (_, expr_id)) in storage_constructor_expression.fields.iter().enumerate() { - let fields = r#struct.borrow().get_fields(&[]); - let (_, field_type) = fields.get(index).unwrap(); - let new_call_expression = match interner.expression(expr_id) { - HirExpression::Call(hir_call_expression) => Ok(hir_call_expression), - _ => Err(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage field initialization expression is not a call expression" - .to_string(), - ), - }, - file_id, - )), - }?; + let slot_arg_expression = + context.def_interner.expression(&new_call_expression.arguments[1]); - let slot_arg_expression = interner.expression(&new_call_expression.arguments[1]); + let current_storage_slot = match slot_arg_expression { + HirExpression::Literal(HirLiteral::Integer(slot, _)) => Ok(slot.to_u128()), + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage slot argument expression must be a literal integer" + .to_string(), + ), + }, + file_id, + )), + }?; - let current_storage_slot = match slot_arg_expression { - HirExpression::Literal(HirLiteral::Integer(slot, _)) => Ok(slot.to_u128()), - _ => Err(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage slot argument expression must be a literal integer" - .to_string(), - ), - }, - file_id, + let storage_layout_field = storage_layout + .fields + .iter() + .find(|field| field.0 .0.contents == field_name.to_string()); + + let storage_layout_slot_expr = if let Some((_, expr_id)) = storage_layout_field { + let expr = context.def_interner.expression(expr_id); + if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr { + storage_layout_field_storable_expr.fields.iter().find_map(|(field, expr_id)| { + if field.0.contents == "slot" { + Some(*expr_id) + } else { + None + } + }) + } else { + None + } + } else { + None + } + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some(format!( + "Storage layout field ({}) not found or has an incorrect type", + field_name )), - }?; + }, + file_id, + ))?; - if current_storage_slot != 0 { - continue; - } + let new_storage_slot = if current_storage_slot == 0 { + u128::from(storage_slot) + } else { + current_storage_slot + }; - let type_serialized_len = get_serialized_length(&traits, field_type, interner) + let type_serialized_len = + get_serialized_length(&traits, field_type, &context.def_interner) .map_err(|err| (err, file_id))?; - interner.update_expression(new_call_expression.arguments[1], |expr| { - *expr = HirExpression::Literal(HirLiteral::Integer( - FieldElement::from(u128::from(storage_slot)), - false, - )); - }); - - storage_slot += type_serialized_len; - } + + context.def_interner.update_expression(new_call_expression.arguments[1], |expr| { + *expr = HirExpression::Literal(HirLiteral::Integer( + FieldElement::from(new_storage_slot), + false, + )); + }); + + context.def_interner.update_expression(storage_layout_slot_expr, |expr| { + *expr = HirExpression::Literal(HirLiteral::Integer( + FieldElement::from(new_storage_slot), + false, + )); + }); + + storage_slot += type_serialized_len; } } + Ok(()) } pub fn generate_storage_layout( module: &mut SortedModule, - storage_struct_name: &String, + storage_struct_name: String, ) -> Result<(), AztecMacroError> { let definition = module .types @@ -383,21 +475,46 @@ pub fn generate_storage_layout( let mut generic_args = vec![]; let mut storable_fields = vec![]; + let mut storable_fields_impl = vec![]; - definition.fields.iter().enumerate().for_each(|(index, (field_ident, _))| { + definition.fields.iter().enumerate().for_each(|(index, (field_ident, field_type))| { storable_fields.push(format!("{}: Storable", field_ident, index)); generic_args.push(format!("N{}", index)); + storable_fields_impl.push(format!( + "{}: Storable {{ slot: 0, typ: \"{}\" }}", + field_ident, + field_type.to_string().replace("plain::", "") + )); }); let storage_fields_source = format!( " - struct StorageFields<{}> {{ + struct StorageLayout<{}> {{ {} }} + + #[abi(storage)] + global STORAGE_LAYOUT = StorageLayout {{ + {} + }}; ", generic_args.join(", "), - storable_fields.join(",\n") + storable_fields.join(",\n"), + storable_fields_impl.join(",\n") ); + let (struct_ast, errors) = parse_program(&storage_fields_source); + if !errors.is_empty() { + dbg!(errors); + return Err(AztecMacroError::CouldNotImplementNoteInterface { + secondary_message: Some("Failed to parse Noir macro code (struct StorageLayout). This is either a bug in the compiler or the Noir macro code".to_string()), + span: None + }); + } + + let mut struct_ast = struct_ast.into_sorted(); + module.types.push(struct_ast.types.pop().unwrap()); + module.globals.push(struct_ast.globals.pop().unwrap()); + Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 509322b3db2..9d7043d08eb 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -12,6 +12,7 @@ pub enum AztecMacroError { CouldNotAssignStorageSlots { secondary_message: Option }, CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, MultipleStorageDefinitions { span: Option }, + CouldNotExportStorageLayout { span: Option, secondary_message: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -54,6 +55,11 @@ impl From for MacroError { secondary_message: None, span, }, + AztecMacroError::CouldNotExportStorageLayout { secondary_message, span } => MacroError { + primary_message: "Could not generate and export storage layout".to_string(), + secondary_message: secondary_message, + span, + }, AztecMacroError::EventError { span, message } => MacroError { primary_message: message, secondary_message: None, diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index f31a0584261..f5a2837fe1f 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -1,12 +1,14 @@ use iter_extended::vecmap; use noirc_frontend::{ graph::CrateId, - hir::def_collector::dc_crate::UnresolvedTraitImpl, - macros_api::{HirContext, ModuleDefId, StructId}, - node_interner::{TraitId, TraitImplId}, - Signedness, Type, UnresolvedTypeData, + hir::def_map::LocalModuleId, + macros_api::{FileId, HirContext, ModuleDefId, StructId}, + node_interner::TraitId, + Signedness, Type, }; +use super::ast_utils::is_custom_attribute; + pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { context .def_map(crate_id) @@ -70,49 +72,39 @@ pub fn signature_of_type(typ: &Type) -> String { } // Fetches the name of all structs that implement trait_name, both in the current crate and all of its dependencies. -pub fn fetch_struct_trait_impls( - context: &mut HirContext, - unresolved_traits_impls: &[UnresolvedTraitImpl], - trait_name: &str, -) -> Vec { - let mut struct_typenames: Vec = Vec::new(); - - // These structs can be declared in either external crates or the current one. External crates that contain - // dependencies have already been processed and resolved, but are available here via the NodeInterner. Note that - // crates on which the current crate does not depend on may not have been processed, and will be ignored. - for trait_impl_id in 0..context.def_interner.next_trait_impl_id().0 { - let trait_impl = &context.def_interner.get_trait_implementation(TraitImplId(trait_impl_id)); - - if trait_impl.borrow().ident.0.contents == *trait_name { - if let Type::Struct(s, _) = &trait_impl.borrow().typ { - struct_typenames.push(s.borrow().name.0.contents.clone()); +pub fn fetch_note_names(context: &mut HirContext, crate_id: &CrateId) -> Vec { + collect_crate_structs(crate_id, context) + .iter() + .filter_map(|&struct_id| { + let r#struct = context.def_interner.get_struct(struct_id); + let attributes = context.def_interner.struct_attributes(&struct_id); + if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { + Some(r#struct.borrow().name.0.contents.clone()) } else { - panic!("Found impl for {} on non-Struct", trait_name); + None } - } - } + }) + .collect() +} - // This crate's traits and impls have not yet been resolved, so we look for impls in unresolved_trait_impls. - struct_typenames.extend( - unresolved_traits_impls - .iter() - .filter(|trait_impl| { - trait_impl - .trait_path - .segments - .last() - .expect("ICE: empty trait_impl path") - .0 - .contents - == *trait_name - }) - .filter_map(|trait_impl| match &trait_impl.object_type.typ { - UnresolvedTypeData::Named(path, _, _) => { - Some(path.segments.last().unwrap().0.contents.clone()) - } - _ => None, - }), - ); +pub fn get_contract_module_data( + context: &mut HirContext, + crate_id: &CrateId, +) -> Option<(LocalModuleId, FileId)> { + // We first fetch modules in this crate which correspond to contracts, along with their file id. + let contract_module_file_ids: Vec<(LocalModuleId, FileId)> = context + .def_map(crate_id) + .expect("ICE: Missing crate in def_map") + .modules() + .iter() + .filter(|(_, module)| module.is_contract) + .map(|(idx, module)| (LocalModuleId(idx), module.location.file)) + .collect(); + + // If the current crate does not contain a contract module we simply skip it. More than 1 contract in a crate is forbidden by the compiler + if contract_module_file_ids.is_empty() { + return None; + } - struct_typenames + Some(contract_module_file_ids[0]) } From 82ca87637bc50e032ff66f988c60d9ba7b678a49 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 12:54:59 +0000 Subject: [PATCH 019/123] working storage layout and notes --- .../docs_example_contract/src/main.nr | 2 +- .../aztec_macros/src/transforms/storage.rs | 258 +++++++++--------- .../aztec_macros/src/utils/errors.rs | 2 +- .../aztec.js/src/contract/contract_base.ts | 44 ++- yarn-project/aztec.js/src/index.ts | 2 + .../end-to-end/src/e2e_token_contract.test.ts | 7 +- yarn-project/foundation/src/abi/abi.ts | 4 +- .../src/contract-interface-gen/typescript.ts | 99 +++++++ 8 files changed, 276 insertions(+), 142 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index 6490b85ff1a..661b1a1516d 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -16,7 +16,7 @@ contract DocsExample { use dep::aztec::prelude::{ AztecAddress, FunctionSelector, NoteHeader, NoteGetterOptions, NoteViewerOptions, PrivateContext, Map, PublicMutable, PublicImmutable, PrivateMutable, PrivateImmutable, - PrivateSet, SharedImmutable, Storable + PrivateSet, SharedImmutable }; use dep::aztec::{note::note_getter_options::Comparator, context::{PublicContext, Context}}; // how to import methods from other files/folders within your workspace diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 93ed1c7c96a..bb941a2dc7a 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -266,9 +266,8 @@ pub fn assign_storage_slots( ) -> Result<(), (AztecMacroError, FileId)> { let traits: Vec<_> = collect_traits(context); if let Some((_, file_id)) = get_contract_module_data(context, crate_id) { - let storage_struct = collect_crate_structs(crate_id, context) - .iter() - .find_map(|&struct_id| { + let maybe_storage_struct = + collect_crate_structs(crate_id, context).iter().find_map(|&struct_id| { let r#struct = context.def_interner.get_struct(struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) @@ -278,19 +277,10 @@ pub fn assign_storage_slots( } else { None } - }) - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some("Storage struct not found".to_string()), - }, - file_id, - ))?; + }); - let storage_layout = context - .def_interner - .get_all_globals() - .iter() - .find_map(|global_info| { + let maybe_storage_layout = + context.def_interner.get_all_globals().iter().find_map(|global_info| { let statement = context.def_interner.get_global_let_statement(global_info.id); if statement.clone().is_some_and(|stmt| { stmt.attributes @@ -307,43 +297,44 @@ pub fn assign_storage_slots( } else { None } - }) - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some("Storage layout struct not found".to_string()), - }, - file_id, - ))?; + }); - let init_id = context - .def_interner - .lookup_method( - &Type::Struct(context.def_interner.get_struct(storage_struct.borrow().id), vec![]), - storage_struct.borrow().id, - "init", - false, - ) - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage struct must have an init function".to_string(), + if let (Some(storage_struct), Some(storage_layout)) = + (maybe_storage_struct, maybe_storage_layout) + { + let init_id = context + .def_interner + .lookup_method( + &Type::Struct( + context.def_interner.get_struct(storage_struct.borrow().id), + vec![], ), + storage_struct.borrow().id, + "init", + false, + ) + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage struct must have an init function".to_string(), + ), + }, + file_id, + ))?; + let init_function = + context.def_interner.function(&init_id).block(&context.def_interner); + let init_function_statement_id = init_function.statements().first().ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some("Init storage statement not found".to_string()), }, file_id, ))?; - let init_function = context.def_interner.function(&init_id).block(&context.def_interner); - let init_function_statement_id = init_function.statements().first().ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some("Init storage statement not found".to_string()), - }, - file_id, - ))?; - let storage_constructor_statement = - context.def_interner.statement(init_function_statement_id); - - let storage_constructor_expression = match storage_constructor_statement { - HirStatement::Expression(expression_id) => { - match context.def_interner.expression(&expression_id) { + let storage_constructor_statement = + context.def_interner.statement(init_function_statement_id); + + let storage_constructor_expression = match storage_constructor_statement { + HirStatement::Expression(expression_id) => { + match context.def_interner.expression(&expression_id) { HirExpression::Constructor(hir_constructor_expression) => { Ok(hir_constructor_expression) } @@ -357,106 +348,107 @@ pub fn assign_storage_slots( file_id, )), } - } - _ => Err(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage constructor statement must be an expression".to_string(), - ), - }, - file_id, - )), - }?; - - let mut storage_slot: u64 = 1; - for (index, (_, expr_id)) in storage_constructor_expression.fields.iter().enumerate() { - let fields = storage_struct.borrow().get_fields(&[]); - let (field_name, field_type) = fields.get(index).unwrap(); - let new_call_expression = match context.def_interner.expression(expr_id) { - HirExpression::Call(hir_call_expression) => Ok(hir_call_expression), + } _ => Err(( AztecMacroError::CouldNotAssignStorageSlots { secondary_message: Some( - "Storage field initialization expression is not a call expression" - .to_string(), + "Storage constructor statement must be an expression".to_string(), ), }, file_id, )), }?; - let slot_arg_expression = - context.def_interner.expression(&new_call_expression.arguments[1]); + let mut storage_slot: u64 = 1; + for (index, (_, expr_id)) in storage_constructor_expression.fields.iter().enumerate() { + let fields = storage_struct.borrow().get_fields(&[]); + let (field_name, field_type) = fields.get(index).unwrap(); + let new_call_expression = match context.def_interner.expression(expr_id) { + HirExpression::Call(hir_call_expression) => Ok(hir_call_expression), + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage field initialization expression is not a call expression" + .to_string(), + ), + }, + file_id, + )), + }?; + + let slot_arg_expression = + context.def_interner.expression(&new_call_expression.arguments[1]); - let current_storage_slot = match slot_arg_expression { - HirExpression::Literal(HirLiteral::Integer(slot, _)) => Ok(slot.to_u128()), - _ => Err(( + let current_storage_slot = match slot_arg_expression { + HirExpression::Literal(HirLiteral::Integer(slot, _)) => Ok(slot.to_u128()), + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Storage slot argument expression must be a literal integer" + .to_string(), + ), + }, + file_id, + )), + }?; + + let storage_layout_field = + storage_layout.fields.iter().find(|field| field.0 .0.contents == *field_name); + + let storage_layout_slot_expr = if let Some((_, expr_id)) = storage_layout_field { + let expr = context.def_interner.expression(expr_id); + if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr { + storage_layout_field_storable_expr.fields.iter().find_map( + |(field, expr_id)| { + if field.0.contents == "slot" { + Some(*expr_id) + } else { + None + } + }, + ) + } else { + None + } + } else { + None + } + .ok_or(( AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some( - "Storage slot argument expression must be a literal integer" - .to_string(), - ), + secondary_message: Some(format!( + "Storage layout field ({}) not found or has an incorrect type", + field_name + )), }, file_id, - )), - }?; + ))?; - let storage_layout_field = storage_layout - .fields - .iter() - .find(|field| field.0 .0.contents == field_name.to_string()); - - let storage_layout_slot_expr = if let Some((_, expr_id)) = storage_layout_field { - let expr = context.def_interner.expression(expr_id); - if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr { - storage_layout_field_storable_expr.fields.iter().find_map(|(field, expr_id)| { - if field.0.contents == "slot" { - Some(*expr_id) - } else { - None - } - }) + let new_storage_slot = if current_storage_slot == 0 { + u128::from(storage_slot) } else { - None - } - } else { - None + current_storage_slot + }; + + let type_serialized_len = + get_serialized_length(&traits, field_type, &context.def_interner) + .map_err(|err| (err, file_id))?; + + context.def_interner.update_expression(new_call_expression.arguments[1], |expr| { + *expr = HirExpression::Literal(HirLiteral::Integer( + FieldElement::from(new_storage_slot), + false, + )); + }); + + context.def_interner.update_expression(storage_layout_slot_expr, |expr| { + *expr = HirExpression::Literal(HirLiteral::Integer( + FieldElement::from(new_storage_slot), + false, + )); + }); + + storage_slot += type_serialized_len; } - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some(format!( - "Storage layout field ({}) not found or has an incorrect type", - field_name - )), - }, - file_id, - ))?; - - let new_storage_slot = if current_storage_slot == 0 { - u128::from(storage_slot) - } else { - current_storage_slot - }; - - let type_serialized_len = - get_serialized_length(&traits, field_type, &context.def_interner) - .map_err(|err| (err, file_id))?; - - context.def_interner.update_expression(new_call_expression.arguments[1], |expr| { - *expr = HirExpression::Literal(HirLiteral::Integer( - FieldElement::from(new_storage_slot), - false, - )); - }); - - context.def_interner.update_expression(storage_layout_slot_expr, |expr| { - *expr = HirExpression::Literal(HirLiteral::Integer( - FieldElement::from(new_storage_slot), - false, - )); - }); - - storage_slot += type_serialized_len; } } @@ -478,10 +470,10 @@ pub fn generate_storage_layout( let mut storable_fields_impl = vec![]; definition.fields.iter().enumerate().for_each(|(index, (field_ident, field_type))| { - storable_fields.push(format!("{}: Storable", field_ident, index)); + storable_fields.push(format!("{}: dep::aztec::prelude::Storable", field_ident, index)); generic_args.push(format!("N{}", index)); storable_fields_impl.push(format!( - "{}: Storable {{ slot: 0, typ: \"{}\" }}", + "{}: dep::aztec::prelude::Storable {{ slot: 0, typ: \"{}\" }}", field_ident, field_type.to_string().replace("plain::", "") )); diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 9d7043d08eb..e3a3db87a3d 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -57,7 +57,7 @@ impl From for MacroError { }, AztecMacroError::CouldNotExportStorageLayout { secondary_message, span } => MacroError { primary_message: "Could not generate and export storage layout".to_string(), - secondary_message: secondary_message, + secondary_message, span, }, AztecMacroError::EventError { span, message } => MacroError { diff --git a/yarn-project/aztec.js/src/contract/contract_base.ts b/yarn-project/aztec.js/src/contract/contract_base.ts index 2767a42e0d1..e4dca07a868 100644 --- a/yarn-project/aztec.js/src/contract/contract_base.ts +++ b/yarn-project/aztec.js/src/contract/contract_base.ts @@ -1,4 +1,4 @@ -import { computePartialAddress } from '@aztec/circuits.js'; +import { Fr, computePartialAddress } from '@aztec/circuits.js'; import { ContractArtifact, FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; import { ContractInstanceWithAddress } from '@aztec/types/contracts'; @@ -16,6 +16,48 @@ export type ContractMethod = ((...args: any[]) => ContractFunctionInteraction) & readonly selector: FunctionSelector; }; +/** + * Type representing a field layout in the storage of a contract. + */ +type FieldLayout = { + /** + * Slot in which the field is stored. + */ + slot: Fr; + /** + * Type being stored at the slot + */ + typ: string; +}; + +/** + * Type representing a note in use in the contract. + */ +type ContractNote = { + /** + * Note identifier + */ + id: Fr; + /** + * Type of the note + */ + typ: string; +}; + +/** + * Type representing the storage layout of a contract. + */ +export type ContractStorageLayout = { + [K in T]: FieldLayout; +}; + +/** + * Type representing the notes used in a contract. + */ +export type ContractNotes = { + [K in T]: ContractNote; +}; + /** * Abstract implementation of a contract extended by the Contract class and generated contract types. */ diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 8b7785c0584..1dce6239011 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -25,6 +25,8 @@ export { Contract, ContractBase, ContractMethod, + ContractStorageLayout, + ContractNotes, SentTx, BatchCall, DeployMethod, diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index d1f01897e01..f3e2a133452 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -38,16 +38,13 @@ describe('e2e_token_contract', () => { let tokenSim: TokenSimulator; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TokenNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index d2c1d700901..6ec68958d30 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -24,9 +24,11 @@ export type ABIValue = | FieldValue | StructValue; +export type TypedStructFieldValue = { name: string; value: T }; + export interface StructValue { kind: 'struct'; - fields: (ABIValue & { name: string })[]; + fields: TypedStructFieldValue[]; } export interface FieldValue extends BasicValue<'field', string> { diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index 87e22fcb23e..43989cb357d 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -1,7 +1,11 @@ import { ABIParameter, + BasicType, + BasicValue, ContractArtifact, FunctionArtifact, + StructValue, + TypedStructFieldValue, getDefaultInitializer, isAztecAddressStruct, isEthAddressStruct, @@ -180,6 +184,93 @@ function generateAbiStatement(name: string, artifactImportPath: string) { return stmts.join('\n'); } +/** + * Generates a getter for the contract's storage layout. + * @param input - The contract artifact. + */ +function generateStorageLayoutGetter(input: ContractArtifact) { + const storage = input.outputs.globals.storage ? (input.outputs.globals.storage[0] as StructValue) : { fields: [] }; + const storageFields = storage.fields as TypedStructFieldValue[]; + const storageFieldsUnionType = storageFields.map(f => `'${f.name}'`).join(' | '); + return storageFields.length > 0 + ? ` + public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { + const storage = this.artifact.outputs.globals.storage + ? (this.artifact.outputs.globals.storage[0] as any) + : { fields: [] }; + const storageFields = storage.fields as any; + return storageFields.reduce( + ( + acc: any, + { + name, + value: { + fields: [slot, typ], + }, + }: { + name: string; + value: { + fields: [slot: { value: { value: bigint } }, typ: { value: { value: string } }]; + }; + }, + ) => { + return { + ...acc, + ...{ + [name]: { + slot: new Fr(slot.value.value), + typ: typ.value.value, + }, + }, + }; + }, + {}, + ) as ContractStorageLayout<${storageFieldsUnionType}>; + } + ` + : ''; +} + +/** + * Generates a getter for the contract notes + * @param input - The contract artifact. + */ +function generateNotesGetter(input: ContractArtifact) { + const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as StructValue[]) : []; + const notesUnionType = notes.map(n => `'${(n.fields[1].value as BasicValue<'string', string>).value}'`).join(' | '); + return notes.length > 0 + ? ` + public static get notes(): ContractNotes<${notesUnionType}> { + const notes = this.artifact.outputs.globals.notes ? (this.artifact.outputs.globals.notes as any) : []; + return notes.reduce( + ( + acc: any, + { + value: { + fields: [id, name], + }, + }: { + value: { + fields: [id: { value: { value: bigint } }, typ: { value: { value: string } }]; + }; + }, + ) => { + return { + ...acc, + ...{ + [name.value.value]: { + id: new Fr(id.value.value), + }, + }, + }; + }, + {}, + ) as ContractNotes<${notesUnionType}>; + } + ` + : ''; +} + /** * Generates the typescript code to represent a contract. * @param input - The compiled Noir artifact. @@ -193,6 +284,8 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art const at = artifactImportPath && generateAt(input.name); const artifactStatement = artifactImportPath && generateAbiStatement(input.name, artifactImportPath); const artifactGetter = artifactImportPath && generateArtifactGetter(input.name); + const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input); + const notesGetter = artifactImportPath && generateNotesGetter(input); return ` /* Autogenerated file, do not edit! */ @@ -208,6 +301,8 @@ import { ContractFunctionInteraction, ContractInstanceWithAddress, ContractMethod, + ContractStorageLayout, + ContractNotes, DeployMethod, EthAddress, EthAddressLike, @@ -235,6 +330,10 @@ export class ${input.name}Contract extends ContractBase { ${artifactGetter} + ${storageLayoutGetter} + + ${notesGetter} + /** Type-safe wrappers for the public methods exposed by the contract. */ public methods!: { ${methods.join('\n')} From 1fa96db12d1acbec640aff5c600473bc238702d7 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 22 Mar 2024 11:55:18 +0000 Subject: [PATCH 020/123] experimental support --- noir/noir-repo/aztec_macros/src/lib.rs | 5 +- .../aztec_macros/src/transforms/functions.rs | 82 ++++++++++++++++++- .../aztec_macros/src/utils/errors.rs | 6 -- 3 files changed, 82 insertions(+), 11 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 03df02a9ffe..71524892806 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -4,7 +4,9 @@ mod utils; use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, events::{generate_selector_impl, transform_events}, - functions::{transform_function, transform_unconstrained, transform_vm_function}, + functions::{ + export_fn_abi, transform_function, transform_unconstrained, transform_vm_function, + }, note_interface::generate_note_interface_impl, storage::{ assign_storage_slots, check_for_storage_definition, check_for_storage_implementation, @@ -139,6 +141,7 @@ fn transform_module(module: &mut SortedModule) -> Result // Apply transformations to the function based on collected attributes if is_private || is_public { + export_fn_abi(&mut module.types, func)?; transform_function( if is_private { "Private" } else { "Public" }, func, diff --git a/noir/noir-repo/aztec_macros/src/transforms/functions.rs b/noir/noir-repo/aztec_macros/src/transforms/functions.rs index 5e42dccdd78..16d129c23a2 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/functions.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/functions.rs @@ -1,10 +1,10 @@ use convert_case::{Case, Casing}; use noirc_errors::Span; use noirc_frontend::{ - macros_api::FieldElement, BlockExpression, ConstrainKind, ConstrainStatement, Distinctness, - Expression, ExpressionKind, ForLoopStatement, ForRange, FunctionReturnType, Ident, Literal, - NoirFunction, Param, PathKind, Pattern, Signedness, Statement, StatementKind, UnresolvedType, - UnresolvedTypeData, Visibility, + macros_api::FieldElement, parse_program, BlockExpression, ConstrainKind, ConstrainStatement, + Distinctness, Expression, ExpressionKind, ForLoopStatement, ForRange, FunctionReturnType, + Ident, Literal, NoirFunction, NoirStruct, Param, PathKind, Pattern, Signedness, Statement, + StatementKind, UnresolvedType, UnresolvedTypeData, Visibility, }; use crate::{ @@ -101,6 +101,80 @@ pub fn transform_function( Ok(()) } +pub fn export_fn_abi( + types: &mut Vec, + func: &NoirFunction, +) -> Result<(), AztecMacroError> { + let mut parameters_struct_source: Option<&str> = None; + + let struct_source = format!( + " + struct {}_parameters {{ + {} + }} + ", + func.name(), + func.parameters() + .iter() + .map(|param| { + let param_name = match param.pattern.clone() { + Pattern::Identifier(ident) => Ok(ident.0.contents), + _ => Err(AztecMacroError::AztecDepNotFound), + }; + + format!( + "{}: {}", + param_name.unwrap(), + param.typ.typ.to_string().replace("plain::", "") + ) + }) + .collect::>() + .join(",\n"), + ); + + if func.parameters().len() > 0 { + parameters_struct_source = Some(&struct_source); + } + + let mut program = String::new(); + + let parameters = if let Some(parameters_struct_source) = parameters_struct_source { + program.push_str(¶meters_struct_source); + format!("parameters: {}_parameters,\n", func.name()) + } else { + "".to_string() + }; + + let return_type_str = func.return_type().typ.to_string().replace("plain::", ""); + let return_type = if return_type_str != "()" { + format!("return_type: {},\n", return_type_str) + } else { + "".to_string() + }; + + let export_struct_source = format!( + " + #[abi(functions)] + struct {}_abi {{ + {}{} + }}", + func.name(), + parameters, + return_type + ); + + program.push_str(&export_struct_source); + + let (ast, errors) = parse_program(&program); + if !errors.is_empty() { + return Err(AztecMacroError::AztecDepNotFound); + } + + let sorted_ast = ast.into_sorted(); + types.extend(sorted_ast.types); + Ok(()) +} + /// Transform a function to work with AVM bytecode pub fn transform_vm_function( func: &mut NoirFunction, diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 509322b3db2..4c58b16be77 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -11,7 +11,6 @@ pub enum AztecMacroError { UnsupportedStorageType { span: Option, typ: UnresolvedTypeData }, CouldNotAssignStorageSlots { secondary_message: Option }, CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, - MultipleStorageDefinitions { span: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -49,11 +48,6 @@ impl From for MacroError { secondary_message, span }, - AztecMacroError::MultipleStorageDefinitions { span } => MacroError { - primary_message: "Only one struct can be tagged as #[aztec(storage)]".to_string(), - secondary_message: None, - span, - }, AztecMacroError::EventError { span, message } => MacroError { primary_message: message, secondary_message: None, From f367d158cac5b02db1cd31cafd14d9de7d14676f Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 19:24:34 +0000 Subject: [PATCH 021/123] updated snapshot --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 638a29c1017..c8a7638c420 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x19296a8280861c15b09b73699d7df675ca2ed8390d4607964e42ca955b508268"`, + `"0x2bc6a0e23550be996b215a1f0ac0dfd2d995849ca55c331278b727da280f18fa"`, ); }); }); From 84bf37a1cccc14b79b586422b2a85a94ea288428 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 26 Mar 2024 19:51:30 +0000 Subject: [PATCH 022/123] better codegen and fixed test --- .../end-to-end/src/e2e_token_contract.test.ts | 2 +- .../src/contract-interface-gen/typescript.ts | 94 +++++++------------ 2 files changed, 36 insertions(+), 60 deletions(-) diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index f3e2a133452..193f7dc9d69 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -44,7 +44,7 @@ describe('e2e_token_contract', () => { accounts[accountIndex].address, asset.address, TokenContract.storage.pending_shields.slot, - TokenContract.notes.TokenNote.id, + TokenContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index 43989cb357d..3e54d323fc0 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -1,9 +1,9 @@ import { ABIParameter, - BasicType, BasicValue, ContractArtifact, FunctionArtifact, + IntegerValue, StructValue, TypedStructFieldValue, getDefaultInitializer, @@ -192,42 +192,29 @@ function generateStorageLayoutGetter(input: ContractArtifact) { const storage = input.outputs.globals.storage ? (input.outputs.globals.storage[0] as StructValue) : { fields: [] }; const storageFields = storage.fields as TypedStructFieldValue[]; const storageFieldsUnionType = storageFields.map(f => `'${f.name}'`).join(' | '); + const layout = storageFields + .map( + ({ + name, + value: { + fields: [slot, typ], + }, + }) => + `${name}: { + slot: new Fr(${(slot.value as IntegerValue).value}n), + typ: "${(typ.value as BasicValue<'string', string>).value}", + } + `, + ) + .join(',\n'); return storageFields.length > 0 ? ` - public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { - const storage = this.artifact.outputs.globals.storage - ? (this.artifact.outputs.globals.storage[0] as any) - : { fields: [] }; - const storageFields = storage.fields as any; - return storageFields.reduce( - ( - acc: any, - { - name, - value: { - fields: [slot, typ], - }, - }: { - name: string; - value: { - fields: [slot: { value: { value: bigint } }, typ: { value: { value: string } }]; - }; - }, - ) => { - return { - ...acc, - ...{ - [name]: { - slot: new Fr(slot.value.value), - typ: typ.value.value, - }, - }, - }; - }, - {}, - ) as ContractStorageLayout<${storageFieldsUnionType}>; - } - ` + public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { + return { + ${layout} + } as ContractStorageLayout<${storageFieldsUnionType}>; + } + ` : ''; } @@ -238,34 +225,23 @@ function generateStorageLayoutGetter(input: ContractArtifact) { function generateNotesGetter(input: ContractArtifact) { const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as StructValue[]) : []; const notesUnionType = notes.map(n => `'${(n.fields[1].value as BasicValue<'string', string>).value}'`).join(' | '); + + const noteMetadata = notes + .map( + ({ fields: [id, typ] }) => + `${(typ.value as BasicValue<'string', string>).value}: { + id: new Fr(${(id.value as IntegerValue).value}n), + } + `, + ) + .join(',\n'); return notes.length > 0 ? ` public static get notes(): ContractNotes<${notesUnionType}> { const notes = this.artifact.outputs.globals.notes ? (this.artifact.outputs.globals.notes as any) : []; - return notes.reduce( - ( - acc: any, - { - value: { - fields: [id, name], - }, - }: { - value: { - fields: [id: { value: { value: bigint } }, typ: { value: { value: string } }]; - }; - }, - ) => { - return { - ...acc, - ...{ - [name.value.value]: { - id: new Fr(id.value.value), - }, - }, - }; - }, - {}, - ) as ContractNotes<${notesUnionType}>; + return { + ${noteMetadata} + } as ContractNotes<${notesUnionType}>; } ` : ''; From 9f94e9532dc926d5aa2c115737c17fb547b2f1d4 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 27 Mar 2024 11:25:06 +0000 Subject: [PATCH 023/123] removed macro pass, general cleanup and fixes --- l1-contracts/test/fixtures/empty_block_0.json | 10 +- l1-contracts/test/fixtures/empty_block_1.json | 14 +-- l1-contracts/test/fixtures/mixed_block_0.json | 16 ++-- l1-contracts/test/fixtures/mixed_block_1.json | 20 ++-- noir/noir-repo/aztec_macros/src/lib.rs | 37 ++------ .../compute_note_hash_and_nullifier.rs | 95 +++++++------------ .../aztec_macros/src/transforms/storage.rs | 56 +++++------ .../aztec_macros/src/utils/hir_utils.rs | 81 ++++++++++++++-- .../src/hir/def_collector/dc_crate.rs | 14 --- .../compiler/noirc_frontend/src/hir/mod.rs | 2 +- .../compiler/noirc_frontend/src/lib.rs | 10 -- .../src/contract/artifact_hash.test.ts | 2 +- .../src/__snapshots__/index.test.ts.snap | 22 ++--- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 16 files changed, 191 insertions(+), 194 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index bdbfa7ad18c..5adea6a3c42 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7", + "archive": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", - "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" + "coinbase": "0xcc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e", + "feeRecipient": "0x085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", - "publicInputsHash": "0x00921c1673191eff961f7fbefc885d9f474d2e6c272c1932b93504ef32c7f84a" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000cc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e", + "publicInputsHash": "0x009f8c7418042fbcefdb65b1e47b2307640205e7f96ebca75f551cdbc4a860fd" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 679c311f7bd..dcd338f6189 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x10ec263cb860c7a7ea45eee0548d67ea370aadbd4da3b1a52d5b8869d919942a", + "archive": "0x040e0450205f5541c6f4b2dcbf53246ced1aa67898c4a086a03884589b9dadb8", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711479928, + "timestamp": 1711538420, "version": 1, - "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", - "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" + "coinbase": "0xcc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e", + "feeRecipient": "0x085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7" + "root": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c78548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", - "publicInputsHash": "0x0043c75b707b1077bcf67f74b67a7c2b43305209213888abcf8818d2f5ec1051" + "header": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660400f4cc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e", + "publicInputsHash": "0x004ee949dcc89128f6dd16e4d781ea48159df3761cc879ec2ad5faa5c56bf8d6" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 11424cf272d..03b33d1e24b 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b012b05fc105ceea373bbe38874ae37a23b74144ddf183ab495bfa7de7c665fb0a8d522886137167eff9323bab8c13ad1726993679ffe512759050f0340853413785f2168c14cd538639638cfca8662b660dd80c53ce43c85b41d151b22ceeb3e3626f3942b66b72684cb05040f9cf331229e794e8d3e8bb5108813ee3086cb85bb10ead74baaec6bde977a2dbe8fdb2cc0c693ca52217b5c38cab5a7bd8feaa67d0670062c8263999b50bf9a767e7edb0000000b02c563cbe940ab44b660e984ff03bf89c0dd1b0d53425f5a75dcd477113b1d2ea42905f0a90d7b8770130e3dab454882e819f9ca0fba2a60044b7ecd46af40a07ad904e1e4a1a9519e6df261d63c7cb010714933b42811d32fbe407bd5be6ed2250d2b573656de96c0acf4eca5efddc24223da8ca7a16fcb9cae791c01b2980015bc07e21cdc593e413df3f0752c40fc30ea514188bd7247d4d625e5c49ac8dcb5bd22146db833bcd26aa2905e133c27b000000b02c79ff46e538780e307638f4082ab5c20856843d2430946aac49d3ee671e52db073f1e130925890de4f86bb115a240f407eb8e6cd2857613e2f11ee308aa78106f0138f1e055d5bf28e1ec2296bf792ab4b7618d74f14b37bf642e89e238f7508253706b03d0b8dece152e90762b38922dbc69806246efba3253f96e7485fe1482e37c066a16c80887764ce92833fde7039df530575f5d5a9ebbc2455100dbb6c3a1e7c78acb630a7e0d728f59f775660000021c000000b00aed9d482c19ba7c23229583522ac2f156a3f694589cd0644ba5e7fd718a4b43abe38d4caf9ae059fc525c71ace25b70990701b27cef566001a213e3c927cc315180622fb84f274958ae57bb1f0659d9da6b45431bb1200771b282cc87c17fe968ee89b3a1315ebd8e816f8e195bb014083aff6f16b1ba9ebcb287c31af5d194837e2f78686d01ab409b3ccd3e71e88302f65b42ea793f9816a941814f96722d6831a24958ab6fb8510dd640ba44bb2a000000b019035102a01205f3563e478ea50921ce528c27dfe985bfa0a2fb52f63b514bd85fd2d563d88d7a1829dcd4ab63627096878ae8698c0eed8e062be06873eedca5d05393cfa0a454d593825022e9271abaa08cb68c4f7c9533d3d5edd9cd5c41e994459ff88728f655d5707bb064415c5911ed2de0ec850682b175152e255aced3fb1cb1e0ec91abfd85ebee2865bd0f4f153ba96169f50c8768c5733bc64e8d87b7b52c1d15ad9a39f680151219ad9f74000000b02a4dc21c4cd26a43bc10ade7858d0925be1c729a88a604e7577402d23e07c6f1d2c77222760b6eeec66c86814777de9935fa30b4429dce72308d37da9ef653485dd2747fb06f0ead18b66f80fea0bcdd203b0bd931f8e48a0a9daa3556d9767a84440fbc8a1554d8dc86ff89e10e2649086c73183aeaca9ab1b2727a0ca14f6abc28cef7fe2aa81ec7abaa67e8d5f2d3274f72bcf1ad43e29223b5f785165e9689941dba5ebee800a7d546014ddc3f920000021c000000b01363923ffab065f062bfd9e316ebf71d855fafa043e6599ce1b53667965d6686566b2b640314bd10c559b24ff90c8b4bad4d3c67ccecfecd7800520541764a10f83a13167db2c21a2399e4336c81319cca041c0eac06b31ac84c8a36874d8a223c3f96e89b0691b0df317a8b4ff268db26078c53b085f0ae2c46c15753f1ddd96f26db55361c7b27d7770c78a6f60719253a2b18cf1fe4893845966050eea0c2dadc4542d4e121eef02476de1f02314a000000b03055e0822f598f6241c76dfcb7545786517c062a6d232cd2e63bf2d461cb6a5cea964332643c77f25e5b3f4e8dc29cd4beaea4d250d78a9a5a427d34a1f2919b4075ef7b7dc4caa403fecaac91f0d37dbf8d31a4c66eb8c4f32d2b9e1b32f5547f28821331ab72ca27e5e4a122960017275e03bf8f4d8fa61b415536d77465823d64b8adfde4fde49a7a6e2d35392d552b68232ec08ba643914075035182c5237dfe5ae2f187fb41661e016bc079a15c000000b00293304fe2c5312fc2eff48d9c7536da42f5e0cd8583c5704b26311fcaa7671dbde69d6772d96e50da454b84eb47ee61d1d66e2e4ba7a57b304d04280f54ff48ec5d752c6ef6b38f5c929da1aa96da0cdd53a63851cda5579b773869ea752a0e76dd40b0e0ec9b8a9e3f67111c8fbd411dfd4f7ccc704e91e6943ce46d2977110c5b593dffaf8578cb01d68b34f575521278220d444ab4353081877bf3cea7991dfc24d874693c0ae77fd59322b50d580000021c000000b02c8975b2a052f09fdb6a4d05806c16cf3c0b6b227e69cde9dddc6f6d8d2a1205049a994622fef693c10c44f447538debd4c75fda5b7098ff20c09f8193789f2a2b6cce0bbe1281a59b68e94bbec5194dfcc1119f82a130f1f7b710c0fd3dc7f31d821d9669d5b55236c06ab1fe7d469c07deebbd4c87f6f5dd30e67b9c2af51aa2e01cd1e87fd4285224b8643b8f6509019a4637ecd9acac317fffa9e3c42e837f843ca8f0c2c2092db93e1044287435000000b005d0462656bd9c7b205568702125cc2ef51d57aaf3cc76f8f2feed2dcaf745f2703d7632743a125d1e3e77170c2ee39c3a2037fa0270847aa83fc3d9ea5a5a15a5d065edd2b4c89475fbe063d323b3e2cb3cf5c824216630a270b24f51c35b0f9d79faca532acf27f7622d098d424d52036d6545421553f65d56c64440d4c923f7aa21e79b7a2188b9b1f991e78148242195faff89daad7f01f808d180d1e144b7f0dfaa68415f8b73bac59a7c82254e000000b01de4d306c7a987df44c6d8309839b205212521b18c8f3c42c03f0c11fa3669a70f8507ebb686920e5533b3fc3c771aa862f1be2d91315cfe3b9c85ee873897532f5e9edaea3fa980e56d896efb38868a49204d067ff9c91d9640cdf2222267086eb076e1970b4bf40e30319bb6ffc6981ec4d2f5de87a70b824e129ad54729bcfdc9e341a92925841d4a83192d5e94482993067d9e0124d5b77fd13358a44545d3a861bfd3998e1d0922fea757ac11940000021c000000b02ebe9de6a5e9e5a201c52d6f998349dea219be42a477f7601d0138b0d54160776a611d3cbe6a4ef2d76da37384bdbc29d0fe57eb9611a905e92b8d70714a292c6fb4686dc30be17833a39ad99b4c94d9b3bca71d1a5c4d441f7376358aa755d702a7c0ac3e9203addc596757b51b97e3277ef5ee5328de54b34e2e499e9bc750c6acc7f31f2eacec9170654a0ecd682f2b4e49a2f2258435e3dc52930dfd5421f3ace46ba46e32aa67a1f9ad2297cf2c000000b00c08f76d66132e0d5b8b2c13346e7aeb593f26369c0e873eac81555872f39dfb8602329de28b258c7dc188177b987c2c42a26b6221a1a7e15c0263667b52878a7b75de7ea65e9b7aeb3c75854756b44983293362bd74b4856f12d6a4a1d32afe40a4c9e3865ffb26af820e722e316e79089aea85656b8c0baa6451fa9c2d2eaf33131bb5108c576c40f30b90f1187f98010da2a98057524d6f8f64515146aa5563a26d0a262eb9f6ac73fb7c4457f79b000000b0252aa5a51a3c3a5e404805ec9c2b4281429ee6a2e1239475a64d10f9680526ea128026938b821f29225a518379ff3acd1f9f3fc5f9c7926ea5ff7308374c981f885eeed0fdc2e10be68fc3ae613133daaca34869c69e2d16c57cc0e328b89edec3153f2c28301c53dc553699ead8d61222100223ce9aa872133e4da2b1702ee056be52978347edb8aa55833adbe2c0171a20d4ff878cc8b21269402d7bc213fe9745967b49602a1188ec2cb4126817b50000021c000000b007b98ca44d372eb47228fb5a441f4ede1a850a334889de3d6c38a9965f476deb28e76a08c00f202d055b04ecf984a5eacd48eddf628e5fabf47fde5baaec8eb1e900a683cccc79a32f7e5754b01469c757fbcd248909cfeeef57ac3ce2d7db3beb197c2f17fda376f9287df120f252231d0c8973cf7ba0672ea644bf841a6820e9a15ea148f9180caa4be93c2988f38e2d437ef82da8f6ff4721f5c4b2f43b2a6ec04dfc8bca8f776137f39157ae03b9000000b0056f545ea3b8be32f1ba8664ccff5e86319a88120ed990c801349b2f48ab89ce5c7277c1c0dfd67a7cdae0c139949724a0d10cd556081aa930a78338f75ba69487dd4ed43c63847ece2d3751a3d9930fe8b2f180683496a9de1a9092cb12d083161101228605e405dcd1fdf70a76736f13f983b19100c5f6c1cb18ca5104e32ba6900923c8445cd266dc3bb6676421f70c10a9ce08e7d0e20f96635008e01b82a50449bdd2c12c0d900ee897cfd177ff000000b01f0de827da1cc548c7902d2e84d1683c5b96878bbcc1a9154866a08f25d6488d74cd4673e6ad17d9da8039f452339da95904d58e57d7d14454bc89948f966ca20d215bf8e6b7195f191efd1bb8e55d90fcf8f8dce16fe1df888a54204f8f969495bbd34f730e9e24790c513a68d404e02822eeca313e2804134be4115d7dee07ba6fc2b16b33ca6c5b106e57a0fc55a00b834ba9f7ddc5df86ffc8e345146bbe0d0fe26a7488a643f0504e405397c1420000021c000000b02281d2082a19bf375c1258f66d778d8f7465c022256d2063d91ed9da8f9e579fc1991d0e94d64eb5b49dda282a08453a41c102642edc2902c39098f3892810781ccab542d712d43346d3c23e915f0387d5e087b32f711b611ab26133879d0b0343706bb14856bd3ed5b2f95bbec353e823e1c8a227490925afd166dbccb3b67631695b26ec71da65435314432f3fab132ecc7c91fa37b65a75a0cd3869d69808de4ffb547c3c5b8a66831a4e6d1281ee000000b02b9b5f7054d4c95f0974b2e8fd80f83d95489d86c9d10203251f1ca18a856e3ba4d68c43a5596ba1448c476a07a58048e1477972802e0498559d6f1b6463472c3721544f486d4a25debf080e65f7c2532437aee2df68941f25f42b26bf954329f7a861d0dfb4f16cc8914f22f06b6de712868fe61a8f68e4a7d91180aa9c9871aea0e0d276d20dff0bf1b7c969073f020a832eef6b780b0b2f9bf30c696d2cb40b7f8c0553c9f326e7a218326e7912be000000b0114aab494689d419bada0522d9a76d46bcc180401237ddac7206eae6e08e59d5e3435981b27247c64b3fea0dff0683f1598a923e5c4354220a5df4187a3d948965a695933d37cd4a238e5b6dfd1045c5d450ddabd55811a70d257ca04db58b434386cb44475433e83b8f6a86d17d5e9928e17ddf5096417ab6fee80ae8de5ebc88bdf439418919c0e8052237bd2f93f9070fa7630a486f2ad7d79531f3fea87f5989fa2e2db71f064c1d64cbb3b3ac470000021c000000b001bb70983789e86c4e0ac0ffc9b75d15cfb1ec2545e63f0d0d05dcbf2f70bf49f303a27f7c5342af6a0ada854c32f8171aa2f5fd30f6c0c07bf18814c378be2ad4448f0c1133a32574c03284caf39e646b41365c114443926e3b92084c69f666ba25f9f063c7c356664af0848a326c1128935084f948a384be340cc18ec18d3b30da45919d50c5058c8277c67236cdf626b062da18daa00a696c2e70fd2d8a6ceb90dcc87f72faae9cdae7bfe7f66cd7000000b00852efafe35cec680375ed7073c30e06f377900cfae6e448a6323795c5d4ad17308c870fed90ded5db047bb773234c670817c2cfa598987fbf5f2411053c5eaa929cd8ea18405a9da3d4a7ea13cd9e989196b02d98de1f2b5167c1d5fd88a431a826b42f9d751ffee875af0e2d0c65aa1a77c80b364646c507f524f0168e5e51b3a11f4f1fedd32e0c0e7edba67043a8107e819ce38f13cfa5c8c8dd3a5890906d693f7707691a3752eeac75c4e95876000000b001110648d10202e4ab5ea47305f741f0f51205f52a6cd90a5ea69b88e4db199e8a7386768ccf465892f387c44449f85b9b3835a3a236466557cdf9fd3d239b2e36d806a9b0e6a8fcb4b18b6d5d26490c26846bbb34ce10c4fd711cf3ba8cb4e1b0460b0122f9b5e39ae53f93220b464701f1361e164bcbdff7e764a9f1ffddbd4afcf70b8cf89109ed5453342b06370314292277aa481fbde4df8a217db2ef9f0ddfd73359853399bb8d3000845b503f00000fa400000168000000b01aa89c0854af3452243b5c8b696d018d4e902b1eac5f8b2144039a767c11416e778f6e0142ebb8c4107ca844e6a96b11127c6c5d0f36b095265de957e7a72f5d780ce0abed2c14f80dd880da129ca4a4c789d8dae6d925941e9a9b1b5c0da455bf95d664ad1806713b8db283d7aa9f39242bcd0e9b91b653ea43b616ce408b100731b87f72403426ee568408369bd1400647d8e8298f47a5829a73e38fcc4182a13bfb94bd4e4686971ba39666c2e9e3000000b00e1379a8673dc4da198f83fa91780e1c6430f13f4f6d259480198fbc6ac62a41ccc1b9cf056bc6e9dc0190b1121c486638580e25f47f8b60a91949f166118e5c74bd913750c722c9a1dfcd0c2a3248df5bb33f6d6b4f39e839b1335f5a98316ad4eb90e5a72ac160b5309f8b7337d6c32ce75aeda8c6a36c3f33a4890ab2650080a5a723953fcadcf41df1edd5ec84e029b89ef1623e6fb27a540ea1f63c2a856cb2405f583f8b27b9c26751f643215f00000168000000b0020f5cd16d6acbcf4ee49cefa1d116cd46bf6372387e12f0e9c33e9a68180f4014bc602dd593b208526dc4c205d1fff3b332622ca9032b30c58f7a3828e6a289c7071938eff7111b0080842e65c96ae9791f2a1bf55aacec63e046fa60a68fd2fc0c7de4f5a5816e0838cc30fbe4d7d3176fa4b31a41b8eff68d38f6e1c1ff13ae3645d5b993c49e328b808e9a83443212e42ae6a3ef2a022bb4b5b9d13c6d4fc0947c609c2ffc4e9727f8945ceb7517000000b01add7007e7de216752a3b146ae1b79e3f23f16a8757ff3c4e5829b009a41c64ec56c0c6a7a3ed6a19ff917d44a921dd56b68e249efb474459998f94d98e4498ac4d913e74c940f15a57d7d0f025d0876a5b3a7c9830170b1dd40490efb101762923e017b9e34333e4f6a31a8a74aa5410459ad85644c197d3f8d93680fc9ca258261d4a6dee53839f2758fa84e84436303f607eac4ecba54c627e8d295a3694b9428fa0c3d3cc7c73b7735c3a1b9680500000168000000b01fda97d12a2bdc9db592a8a7e31e08a4da50d3aa063519e0ea23a11996dfa2d27f68a2b4aafba58ba5e58268a50f627c2018b65b7bdb3382f3c28d2522c6e730262e120755f0f717986d1252970c5b940af10da6f107f835055bb188a1e98a17ac8ed8b4a633813459722116e812644218430effedc5659801d5169dedf628ac4354efb5c5562bf809e0d7544810950d1f884a7fcad20e6b7a84f67b246d4de6b793db34e153521c97517904215dacb1000000b030204d0b44041ddfa44c932974aa31d730073270ede4d5b4889c52300ffef48f96e2156071d0a7ad96ee20f766e27b45064a0a3fa44fe442fe4497bfa6199a7a082e12c9c55fd9f8395a3e6e44623c888d326b37b27bf9ff6071b861b7761568213b2b87800f911c16ed18fbdced0c5a2ef85677d45f9aa1c6aee567b0b261754cf2a2c8928a0d4a59c2aa64b1a218741446c06a42e270c5a45f9451a30c7eb5a0f00b4e90e7b5ea6906a857214136e300000168000000b020de358af53e960f85a6d44c1db0c5eaafb983c6c2eb6d6914efdeb50ca94d190a0fd1db40b021634db077f2574b021e85b6db860e8ab32454aa3e04fc0c3388370618d0c072f5a1e84241e96bfadf61e847037ce2a2b3f2296d20f8466518f666b8b9a6949f7143a79ab3b8f4b97fdb046ec3793d3e88b0fd9169664e3cecd43fe74e475b4006c704ec59ba7fdfddf62b3e69a9485576b69f2c6376043e2c7a527548a39725392383f5d274fd8f8cc7000000b02eb0992058a9066dd3e36e183e5c24906119bbe3bb424eb3c20c12bf3bfbe67d607449a769f18f489ab2e05e7b2ae03e75e3b8f30d5334f6bdc458f7ede67327e5ac12b508732297e98aed8bffd47be912fb9a44465ddcc6aa4d5d0eca6a52469221585b48c5056683b92563125489870ee34f2a918f591de4c238a6870eef6f96944fabfaa65e825bbe777191b71c711db2decabd7841e3e1d05c6c76b29dfdef9418deccc0ec9d2b16e0b68371c76300000168000000b0139a568fcd2c9328b6b4b74503840c7ae6141b8714f5f0b619715ea8d0ffc0c1c1a790cca27eb9bff2fff3cd0ae3242c710149eb8aaea54810676cfe566750be77411e941a19f21f472ebb83bd7213f483f62a3dac18979ca35e3b16ea305c03f70e79711ac1b30274c5f81e83acffa40525c36ec50f20c0371bcced4ccdf67c7573160ba38787fc173659ae8ea12bfa18f017bc81ea9b7acabf7b10f4bf49f7943f20381cf52fc354a70551f503bc48000000b024b488a9c871481100819ec6ce6f08f715ec8862e34505a794c00088f93e2c1707aa01584bd4e4c874f8cc819481c367384310fd0877296a5175d8640a05edb4129719bf5ecab0c8e2122a285697df626642ba7436bb53002b1cba69bf94f7357c3e8806cd3d6da0fe6300fdb3df2ac323cfe80f368c3f33354a5a4312fc1fb1597bff532a493a3e1e58932326394bc20cd0d3c2099f682868baf232fff1d4dfc096bf7634fc6efbc79633554a0a274300000168000000b00e1f71fe7388b77e65977385f1c6ab76c64e93167298a4674b6694f39ddec7028844be4616cdb1da1adb8bd57fc206add37612ccdf4e1a6cff4528efa0cb9787536b18b8f7b4be92d0dc67bd372798f83b1ab43afde341d957c597b10840b149ffdc6ef0f02ddfaee47680ca8bf8ec942ac8ff4235a3074255dc6a85f7a7f79e64ae3df1516e3aae0a90e6e406b38e0b06938636389ae1f2cfaf2f2d30bf2851c0a6f2eea668d7037ca9ddb208a640ee000000b02ceff583b5454388d522de8c82677808350317dc08463f26831a03fe57071c748c4a29fa3e71234948af93bd0d7cbae3bcc9801930be91a3fefc6061c2ba4d8346485e4f5f6fb4c052165ccf1387d3e34d84540f015888a484db461fbc335a581d310381f7100a60661c82c12ee6b36b281a89b2563bf54cadfabc01dd1d4d0c0cf8236bd43b05f823f5aeba71a37e7d031ddcdabd13074e7068bcbd01473d5fa9fd2cd4556a499abd7990b41519b18d00000168000000b0042409073390cf9a89cdf908dd4d49ff7c0f413960b2e41ce7eeef857de890c453147f1077a8b2d16789f9980834dc14e2d87c4765a33bfb6faf4a4dbc39e2dfa3027e69d94e27be131b7ab0e623e810fab2069a3a27632b360735a479b129c370409ccd7ed4c73e432b24042a07e658028b830807e2ccfcedd4178c3a6bfaba0204429664be3469af5f1e49917f23cb2cb3b20178c47b94751eea9de31da30927e25697047d534fecb7f6ce90ada9da000000b02f8fbaf2e5a77aab038cbe4e3207b71e791294629afd274917c394449f82675828b4f36a6683e3b8742d1010117c4e6b2686ac7e27d67b081a71e0c9188d1fde2ac9ca87bc99bc62dfb8a97027da13541b1874d5126283f2a770a3a6b5c6cd0457b351c082b868c44a611250d563568808def002cb68dff41663bd41c434b1b34a458f24df3fd121ff6936aad6eeb7260f07f28a10788fe9073db930f54f860c8380d4ecc73cb0bf547d136d5e616e1700000168000000b0218f9e75abdd64c46b4c0ee95188cd3ba64fa1288ce5750c6c402f318cd2783aea999f43799235bced475b09160ec8d771aeefc4a4c4c153e8ac0eb199c7cd1ca76fe438eae799d88bf29258c3db38361f863396888dbc7db2e0a28e924e7d2fa4a6dc1e1a7dbef557a91e44c5fa719f096c114e1df02d8d59d2055e0b96ed1b3b4d3523d7d4d2470bd55e23061afa1d2a61decd93db9ac920946378f2d9aae7f25665371b12037f8208ec682748cb18000000b012d640749ed0b6a35dd19ba483140795255ae39dcf2bcb6f8d02ea639cbc4347604c084a5f7011a34c91716ad919d92d2382b3f96c450c18ce9ab57155264751c5f9575afb47871035ad6766e9d58011939535f4c2fc74fe85eda20b2a6197ee132d301e5dcba42a29003b8952674e392158df852ddd14a565ec69dc4f40505b516dbf73ec51e24652c45992ab389db719d7c1a021a1bcfb648184d9e239c7a6d18990c7e22d9dc24162be56aff1da9a00000168000000b01f292a2afc0028a52100e82cea8a912619dd33ee1c6d8b84a33f3c89344fea4d7714fa1ad067f6ede512659b1228ea4cbf8972899724ab42d136fa7f426ddfbaa6e4f3f85be8b085db3a61a63bbbf6e1e5aca0170791b2867bd2568df95ad2789fb27982133fd8d95e6a6ce59292c1472d5c6c8e79928a539d75bce4b3dba92c58bf76987c2e7454a7ad345bcb7bedad23ed906586b95aa160117a7a8f60c2d26492dfd111d366bbef20896ef22176e5000000b02c1dc36bcd22c4a200bd5d28d8a4f7ddd5a7f90d4191430099f7ee0667c9ec45d0df9862ea51b2cdf69aeacd41d63642fcecb91e698bf732e8eaa7cc0fac0a9d98dd7eaaf70843e4efaa236f54ab563a993afd0c7f8603f1c2c3fbf0dea970568641c97be7d08f5345ae929401eedc240d61293d9836fa697750cd9dfe3a6a2c5b60d0d001892bd3a02223814d55ca2f02da6f1ea1e60e89855a36babe7ecd6a6d9cf9f495780e3ab60e34ec5e074fa300000168000000b029f5f36d311fcad943cd5a9fad3a084d8c07503f019b5b1f8ed5a648642a976482821e1b0f5ae5853e220e2d2ffee78a2ee555fe104800c234eb2fe0a7dc194b13f86417c386a4980f9fc28292545c4dda8c0d34faf76c913e8a437bd1c5cb4c3d073eb1885b32dc0d20ddae6b7fec570efcbb8f8a978df9878490181ac2befa1e85dfb743a8c1043b3406161022d9182f294cb1ec7f33abf49ee6f243efa003f507d5514da09f432d697c955fb360e4000000b013b6fdcd0fe8fe8662420ca84d69e46941e9912423fd622fa7b9475863405fb69b44c5a9178101bf21a301f7f001280b145cbbda6729c84c45f8be579de6e6028ec3e5318a8f39a88cb8bbbcd15af6e5fae0e26418539e1894a1c09f62664f3cb50ff760cc3e1c793409b9462a6e2dc919070710ad409b33accefe6df608be7c97a3cf744a263e0f3ce65f87189ddef52c7f3418603dddf9af9e14d533fd35842eb54f60f83de3def22fcdd3978aab5b00000168000000b0248d693fb99496ced9732fbceed19de8c11f9138a69ee83ed7c56ba72c8449404de04538c1892b3bef8bbd9292fec342850490b2c479e4bc7d4ddd899b3d81ebef511b259eaae53dfbdbef8f4306d3b10a63bc324b2d34a015480f329f16cb4ec6ebb96a9aa1675811c5eb8a0e71fe56029dd73532341cf6d94331265d1fc44c0dae733293f654cda19434061bcee0a62a335f850475714396917b2ecd9f659c13cef442313d3a665d9d29b12ccc1287000000b0090591436746d59ad6707421e01f0f37dada7345303e11ad775c7c430eaeb0c3ed823d0e00015397b805cb8059ecfbe38c5e5346b6629e48fa22e5501453dfada3dbf644d7002fbfabdd7404c855656e216c50d178f79ccd027dbefd0cbdcaf5421be6c3198a7985b31a31c09815f7bb2935e3086da6e63d7cbdb00b4badf73568d0bfcf5506d2754867c7f111ed645b29164c3cee76013d67e35dae899fa4c7700672fb391cd34a84981403eaaf81eb00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b02ab5d595a67edb3facf6b66d86b21db6a9873756a62e24ca8d4a09104248f5a9b61a920dfc9f5e7373417712af13bdc259d21d699580191f688dc7350c50152c81817b31a252b5d2b3bf0076aace405562d9e362c672ab7674664f8f397c41a6c9b17132fac585c3916d3db5c241f07b13253e9d1e9fd43824b9431380400c36ae35c30c98139a3998b941b9ff84256b00a6a73fb2c69814bca39226cd3f54d40f8958f31a37d26dd2cb674f87b4ff3e000000b02e8822f02b28f48e05b212a6fb9be5e3ae248bdbb1e5fd7f36cfb726b319e73f1464a633893b4b499d20000b06743c0fd0b453541d15a470f7aed9c6aabf849c32669ef84ba0020c70f4cc0c604d088193ebd2e4bd7893318b17f7f75f405e1eacd38411e81ac8287f039e1eb4835aec27b3fa6c391d3a3517441cd9caac8f1338189c488b3e29e47b890d2d30230bf21049302b3871aa61a00f5cea2bb6257d8ca03374b61245087abe3b682c830e39000000b0035f3e3994796b86bc5cfeee4e2dee937b8600aad3520b20d4fa01e45316733c72776b553c95ab186cb303ab210e7470ea161dce20670c6b80a5490473ba86e7363bf9fc0851f8d7097756ff1eff304538cb8daf878193022349e6c7d6b0c5ed7e4e83f2c6e46e94aa420b4243a083672637dcb055956bb3a22e967eb79bdc5b690a2ddad1da150afc4a080cfffbe3840739260648517bbe0126594a9b332647decad0d1c74bebd42ace0c5e4a2c18300000021c000000b01b69f7b7488f947f28fb4dd5c3a3f3269e2f79dbd047e99f40a161db71aedd9729e5a3c7af9ffd8b3d8437e7e6c01a68cb8496fee41bccd96e760c08ee75c4667f54ef035c791e654b179a8f1f64de80ef2051dfc1e982f4e53ef831f710c95b21210b5703a2eea6a83f52f7c8eac70e29f8fa3f55eeef3850571472a42ff1416364bc78d9a658dbdce8e98bf18d44f41439ae2e8e228bb4433f68fe91da9d0a1b8cd9c853293fb4ecef2b62a98e164f000000b00a35d20ec255b797f31e8a1a7267427e173a43e645509158317eb7bc578c657c8b076ad1b7c097c44abf297485c06de702ad46435e5ef74b44e685c541e44e5d0151559652adb75f0712d89d0e315f2abf58ba810f5231753d982f3a6316be75fb0ed9b06730cf91d221a25a8add13a22e1ba57ed28d9f63abce703f9ab1731a1a2d5df55e9ba9c817c24eca6935397120367d6a427634e5a834181c1c1b15a93951631d4c20bbb6ca540307312cde96000000b02ff322d574d0e639420b3fcc334218cd3909c326e0bdec1a63e02c327cc85651884ed6841886e2db14fa647cb972a314f6e1b0c271facd64b443e9ecc3e783b9dd88ed88af74d341b34052794f81b6e8923ecb6e2b7cd36a62b287c3dff445b5a30ddff5cda25eedd911e21a576d2acc08ac5f738aa25ec5499b7f0b19fd80f934fa73ce63f0f536ac011b3e07baf25e0c70352bc61a688eb4e0f7dd0e5b1571ac75e2ec8ce49429ef8ebbedbe705c8c0000021c000000b028e6f3003a1d0ecaeaa8943e9f58df43cd1260fdd636873fd19a756da94898377d7c821cbbfe09a23118e9921e496f1f4830761a5a7ec8cf5fcdcbda69481cedb37fbcced75c9619a06d50af07252750c0005bcd053cbebefe14d1983447464be62c0b71ed7a77d00e90c8c39d0cf3c000ccada667ca9f4deeaeeb1e0a6e31f8b7b016417664d5a71969b853547f85e9109478abbb1aef09850548ec3436268ee1c786edf4adfd65073bca32a0a92259000000b02255e6ff594e734df2fa2e9f60cb3b2e27b351c8869f30dc123e70efdecbf19726219d8e7bad57feb585f9d8d9b6263f60d79535159698260e7574ccbfab982832a094921eb5e0f3a8094b6337c4c5401b94c1d0d8c94457002ccde3744530c2933d9a86fe9bdb8f1bc57ba4eec0c6860e45790570846bcebb1485411b114d3b06123e88648fa4558ebc418c5878f17e002effa97f9f031cd8fc2707df3f000cd88889205746522559dddb1f5d2793ca000000b0051924de84864c347a4eccc9cff312d4caa401c91603be975e19ee62c210639a493238ac8c237a62953f701fdf1ad9a2f769bfba7de7018069fd593fa24ff1a00389c8bf1734d5164025be0c50dc01a050c8b04d76d3fde943a89da7d8e66cb75d61411293ef3e5ac53425f99e0bf6ba0b3dc12fe7b9b7cc6ec8be35d31f9cd2d6b94226d471e8504f7f50ac954f61c6053e9d49013e8d1209523247d0107d1bb094610399d763dd007f17b9e23e55c10000021c000000b008b7f8ce1689c3282661819c34ffca3a23d22ed32913588d39076ec0caf30a72df946b7d2da825ec074441d9d12154f253463cbf0d09fc51ddefa07251bd9ea6bab15224a991b2e787ab010bd5c4b368aa36fcd5d57a91590bf2dd8fba4a5c2cd47e4301c52017327bf2ee4f65e4af581c43d2e11b10b5a459ae021d05a365e1566192650468e146d24668632ca98e7f11004bb90a9bc76ac61f0beaf8f78d079c619df74b590b93fefc9f054f57ed2d000000b01785dfde0f083170f91f2e685bba7c362ccc8a529d3c75646801052de8fb0c9e6b95ac45caeccda8212d9bb8b450ca888d7313e3829247abc5238f974d4fc7b9aee5be550a4d8549fb4aec7bdc7e68bd35063d65db090c6b9b6872804f6c505ca258d1e518719129880819a019df836908a147bc46dade68548c698bde6c4bba10faa163a7eada2b747037e8b5a68a492f48cdaded1f3b49e2f368d18424129ceb54606a0e5cdafcead3b2e44dc6f4e4000000b00ebf6db9ba4d351c19dd9448f9df1f66d96cc789fd1f6fe1637f3f4914a453c6b60e8a73f14c4875868b7ad231ff894eef058c4d8d967f0c9a9a465d967e89333f367fa21a7ac0ceb1437db4345b3b1c5a741f994484f9a59349edbfa1a491a932a2d9b4f5fdcd56ea4eb1555e47e0db2c4557b49e39938d3daf2946f6ea9e4e08024b548ee1f9a8cffa3aa9078dad730aaeb6599a2abf15b1afc6496d1f6781585fdacbcd904acbe5b100febbb336d60000021c000000b01bfcb1bc151aa3f747a5a9437e9f375796b323d3f1ae9676538a123bba55ac8a4d8aefa39f2ac1c6863f4629235bc8248f5ca57fbf35dea6a01b5cd9a2da37a3f270867b0ffa0cc33e3942437784be9bd7e9751f9c8e83b7b1775a1225df6145ce49bb8b4e08dd27fcb49c62a12682bd2fd55fe97c19420ef253c95df7609e217018c4fea5cd764fabd633d9e10f69dd2bb37d2621eaf575946c840d5a120cf262b4d57a337bb3291a34cd5e2ba6f382000000b00f1b8b49c1fffa1c0e3c89c834d66862cfc75f4cb1123d3c2a654b90fdc49bd93a00a599e0c68f5f2c9aae2cd2567518d417aa5709f05c71d22b33769ba95b071a85bada910b917036f112881e67df3b19d987bed38c41a373db23b5cc5eeb8461731d47b8f3f549ac313cba8882441c0ef080c081250afa2487fa1149ad997ea13297dadf7b4468d8d1c231f8553c772fe6720ac74ead255656b469ea54d173220bda1916a3481688c58811590b19d8000000b02235de69dffa13692d0a67754294c7ba7b1d90d81cdd232570b85ebb62e44b45b334f28a8f0733ce16bf5c9e7250c392909d8ac38f4a0bf7f5691b3eefbbffdcd2fa6c9b18270012dc5c8a29e4dde5620b2864de5c6ea3e2ec81e05cdef4f4f490a801bf4bb6065abb231fd185fff4680ae4dfc0858c4e2b5238c7295cddcf90198696e5aaef867bce8e5dee1cc713f013ac277dc4291a8716cffa2a8399040aeb71b76ebc266916d39713709d1411460000021c000000b02a62832001308690d71e24c493c2776909fa09e07670d1b04d4bbeefb7a6ada0e219a6af440ad0e04b0ec875a1eebef4a8486e7b7a4364388d105d5dd04fbf9806b50f843eacba971e555dadf1efd6873be0df6dbe78e1728765a4e3881ba2de364370cf4697ee849b34df4d2f1b7762269a38b596829f4c5aa0642adad369a106cbed03002f38cec3e0eb30279cf91623a8e62713ff4122fd9cdfd28113bb65135e3811a65da795f64f9cf7e14ac281000000b00a70562548d7688e2e2eff3ce7f2d0686f2a22b319f6e1596386d2f88170072d219327bbe0bd01b93b15cf4c2140e705ac4f6f5f9adea9066b95222e5e090fd3d4a5cde608cb2a4c403693de85cf5a6449980e4d8c2a495f2f802d3a7fda9e5eb360daecf00f5f6a3be68e77c3a3e0ab0e766849259ff287706dbb06ef5acecb68129a88a452a0060d567ae85943c0b32ec525818e8a0a976fc4b79ae062b4dd1550f1c04faceb302a2deebfbc80b82c000000b02275a210c377c86661dd245974060872317eb49bfe575c7a567604fbb16ce815abfef35ec78a9c6cbef624a3571da8d9c1504339ce87152b1d2e8402de6887809f72f1aac49ca40980a347d47994d4f3a6f46c9bc04386e56c15a8794ec2dc5ba7964a8ee2bac8c357ade35c95817dcf0709999265c6062328334ab176e08cfae547ec5de7ceb5ad70171d46defbcdf72f85eab498715c787eaf848d4b7cb32210bf29ef5682dce790365cd369c198610000021c000000b019802d2986a933f02e7e08ff1d8d6a636b6a656659519ff355af56821b851dc4d69e2442f25c665cc905a049d92b021266a7bb213af0c5df55ea5dce15c829c24f313ec3479d6c7d6701238cfa687831658dce781220f156fcf8a59fa42c3a05093dd9fbe7bf103af3aba20fe6a1f73b1ff148c55139ee8151ba9c5aeba9e35fdf71f26dd0e746387334d1c123086e7f16901348590d77fe07a37256c4f8ccca8c33493a88c539289e3591ac0e0a40fa000000b007fa142850d2accbde26f1e9fdbbdd8fbe82b4404fe4669888bb4ff1bc7abb3d2903382569588bac33d01f5303c134c0abd1893432e4139824c0b8fbd1fbacfe6588e2373f24489c6bb8d37b674440f3a9abf7c6033c283aca897532c07570c5a733941704b4d28d2dd751dddee99719142014b58c044b01f0ed606e3ef1c3487e256184e246befdec9f941f8a9806c62491f6b86e15af2f26afdef47f0faa391ac11489a676fff4986c419f677c524d000000b00a5b03656f887ca17180c7bd917b7f0a966fa1e3435c6361d9334908ef12c9aad8253ea9deeb6e52267ebec91e1add12446adcda04eac14b61913d16459f1ed1f11ff96d05d67fb09931b68630bf94b74c13ce75bf41ccf6a4c9266f963bbc3a2bef7b6c1fe8625baa36b031eaa9fab210c2f513f1fcfa619cb26d8261ea333d62ca4b9dbd5ca513ce6a9460fc4547df2e300f6850491a9fe1f5a6722bddf1225b7b45a5f244b52c6884b52e01b720800000021c000000b0107f5d2b2a3e4a1c4b8ee22101f2c6a676af6cc92204dd6fa877b4dbb0cfcb5147e5ab792dbaa4766b3ef22b4cea29fffba2b6032a3a86cae085392dfb01b80142b309cf5b400291f64842a01459604dfd418a4d02edf30f3fc7e0e5f80a165c4edcb9e221400b6bbfda8a25de56b1da1a8da20189697fb8d394dca78b4950732c1c077d8229d68ea5afd29f7e05225203a075a0904a51b8c142a73d0d9576750598c06a19542271e7ecad8b8f3135f1000000b01e7f5cd1212e8faa40e39943ba916b4c031989ad3c24c660bfb8659e114d1c2efc577d19ec17070a100fe02eab05370755b52f1705395d48185b51e5ee8c1afa87f654a3937831faf132890bf1786bf2348923dca5fe49deffae2bc3473758307bc5b4572593853349d6e4b52571c77500619d92b82c4ea4924b99d916cce7e059acbf12ee1dc2177681472bf914f9de0228f803d41a1662076efb259a4cf4651bc89b9b21cd54b94c4d404f600b7d8a000000b02af42015aa807e09be6ae0e666d22213923855ec83cf99b10da0ff170addfffe36b73a0583e7a78a7e2e8d7644fb931b543a02403c1cd2300db07a7c4dce29171155de6d327dfc6ad05ab5609f67123b2af01f05283f5749235d14ca20489b4ad8f0ab2dc50eb6664306e5a7d2745ef2245001df22ef3f10952cbed8a78528af5eced922c70dd2be5f602f23a5dd73f70ce5a3f992d10f719b75fc00ee1918d0c44bdd12148ac053e4210804b611ac6b00000fa400000168000000b01d391cb51b4c874add2f0abc8a0baba6b9e009e072ca04e4c86aa5c24e5c8a327c5f1041e6a4cd8d2ce679d46ad849c3b9bccc488f254252d5a5ae8e50880e6027b691cd68ae5807bc494dd81e2db0a0613dd4c139276fee835513224b5bada4873ce7f518d522d5b02dc6a5934db49d1994c81f601fd49ebcb240c2bfcb384ac896165db5c7204fb88474ad49bdaea8038471f35a0d0a56fd5a7f0c08b485961486d65f37cf43bc41cfcbb11853be10000000b00ebb5cd5e05257ec380708e879ca33928caf7fb489131c39cd51aa81089e0d6bea5bf8f279aa72e48ac6e3c452be520f652fa68266909a7cbed98b16375d67c437c13ccf06dba6b295fc18fd616f6a8bdc5be06eaad6f1520ba214c00f55573b684acad30713014b3592f54bb59342f60c8e7ad750f488d2ad74ab3ab4ab3217a972c0808d529e60f4041b77aba6e86b032618683dbc4be05ee7e3c87d372a6b96707625ac7c783c88e0c6322a909ad800000168000000b02c33a07688da6a715484fe8398be65ded38cf250661bcc2b8eb24f2bed7b8c2a288995a2ce08586c498e30715de1b33eded2423ac315e730c04ffac6a4db7743c2524dda6c26db7bd9e29231ba8034e28092445b4a9d058e4076cc09674bb3aa6cd397b90595f4bf6992c007408c69a0298fe8c9061cc6ff82a81ace55082c5a6629f29246a06f42ca1f34150590bf0a25c23f6f319fd4ac9c1b7e2c3df1bbcf23281b6811c0c3754ec784ab22be62c4000000b02517b867f7b85a3514589358c9bcefec8c92c12fcb6a4a267f020c9eb829bfe8804e903198fce413675896e0592481ddb59ba15bcd330993f2222bfa393d0ceecf958fc74ed1796f2dca08a2a247ac4cd662dc33ca7ff7dfacf3f8f62cd229777b596fe6e825d1c6953fa8f69de7669d02684430639f1b5e26ec158af1ff40b15d0ce23649d5fbc2ea940f57e7ec4d5b0ec1d40a8de1d9f3f0b9154b759cc876ae5161857c69b1168bc8ada41e422f5100000168000000b0168911b2e0af0661ff739779493c9b3c42452baf1ef1d26c348253f6052923a792a34ce2e3566859d7e787b15e865e36e679796f5bc200632d93fb01b50de3726499e013f5b95d7434d2e62e7f19a59cb1ca0d8ef5e021168cb54e114e5d5fde99ffa6c8ac77b4c61627a56541d5d5f223624c924589214af3be3ab0faf389d8d8ad795992ef6d4fb3405a6009771ab12eb54fc2c07d1801156bff21b8e36a8a91412d22e8b73e03076cfd1a8c99f784000000b02b3d2107234f52d1e1a8f17a8474711d8ac9d48bea0344abfad1a0e374415d538ffbb53f2684cead58503db7f723e8df9142eeddaa7840400af4892be85fa908b1d5d0a965a957dc666c334b1dd6e36881a2867d92a39f4090b3efd0814112c1d8904c91a1e25c827cf6a56726eb6ae624c006ff7ea95f7ee980fdde728a99cfdb11be87b74587c87bc696e0e9e373bc01bf315e362eec7baba79de91f267c9d6dca6388f758f9179e4bac032dc8d47900000168000000b00b5523f39a065de4cce6f8455c74f7beb6fc567f15b7829905a352057bb1dd7c6797a5326bb6fee94844954bf6cfb24b12f1a288167d6833caf03e7c5aa862f3301151c9d8f6aab3dc00dd650a68f5f72f7dbc5cc2a80ef7356f09051139f922d61164cd92a054c5cf23a2360647605e1ba9a36469d54a783c5aea80bf86d34af9efcc499594a83a6415b6591c5277f72bf68699a608cf3f9010ef7d56bccd4be5a17c771fb50e357db6ab20221eecc2000000b01d754d3d40b986c8bed8ac02e0305327942f86311a48a5dbef606496a7bff4c3559ab977315b8eefcaca6aa2f6b79107fdb004560e8027a957ac745b3708023ad2436f8ce23ffc5a619f7097c958d3cc9268dc9bb80ff1dc469b78eb14868ae16bd3ae2290656b79ed7761d4153a0b2108424817059f577cd06ee855bffc81f197a75fd010cfcee4e0c50661dcfeb07a1c25f9a42b98002f1bee774eb96db97e7ce688c58006526dccf1355509d859ba00000168000000b00f60e4150f8a42167e7a7508c73b28636ecd3a233deb626220d6c25b66e9a76f2b5cbc477c9a50dcf903327230bdbaa7b75174203b9f43d86798d0fd329ae613a813a8de4d3f79cfceedae130bafcfc6dc27ad9b4f0be922f871d2238cbb486b378791c6c9e184b912fe61d0f53032c217356b342a63908904e43d4d77f516b49ed8773d0ef94af2edd7671d44e0ab7e0991ddd44b14027038829902a306ef29a3305cefbcb575a359fc17f746fda0ce000000b027b43e3edae80d8010ab94794b2e3a1b1652338d115fd1bd16dc3dbd69d63ab9f062ebfab3f229ac9cda9e962aff48033bc7ec77ced8efe586f7f72718095a176e9ed1d3d7b9abace2a6ecae5dd58240a0e68e76b60e58aca64c78f64dbbc3ec3e2adc01c14d29bd1e3329a9970cd34b07d0c7eaf87fe4c01d66634840b27313426f26cefd9370b5fdd2325da8c7ee2e1ad483b6dedc9f3ba0b82ab6ea78a76027ff6bf5cfc5529345a913c9f79bbae400000168000000b01fabf4d6daea202a6f50dba6e46672500c76092798199bc152a4d704a0ac739c086faa94d50e3f5c43d82438018a2078c60aaaba9251d35918a220866ab074094c3426990b17285daaffd6d3186b15923e7a0420ba164dc8adecfcb19d3d7d9464789f4746c262b21d6bf03db6400c991feac33665c593df5b00f4dfe9c5a4f880ffc8ac7e8da72f922585fb7c260a2111ced8b5093676da51a1a69308cc5ad700ad7c6e33f6a2f0a43ced0ddb81ebd6000000b02efa70158fb381d86cfb5853c85699d2f41f0bd339005afd07386f0220504e6c623c507fe4d292c6e86f8cc38c0858208d02cf5573762b488b5821424fd91b1092b1ca5ed215c22d2b86ce2cb6219b89b9a3479f69c002e22c93a0378ea27b8695d7bd416d9554e6053a7b025f1f096f2722468eea58abebc8484d98d69d81438989da96ee87543ce9eb372586e6f7810d4f3e4670f34d5dba24093b7600396ffd291ff7b64f38bd4ae5089b887e0c3500000168000000b00e80484c7e1d2c103d16a2fdf4890ee43e9b0754106104ffecfa5799e2335e30c652a58548fe10588bf939b85a6a996672c80296591eb5581fd589b01d236416720ddf4e50c92056252aa2108517de139b4c6ac75bfbde33e58b152144c6904eda75e4f7d64b7c6092085aff39d112691151290e8c0a2722e497094bffd0b961958a91b5c39411ba71c15fc6234e3f09050d1061faa04e9c49362000db6196030fbc4e48f0a08d56e8e8731613cb94ba000000b026f5008a0ebbe1e30ae63696e7ac0f745828061eb0148616fdcaa6872787044b7835a1d9e87aca2b5f7328c9bbfa2cc17d17f67ba3f915def1742a4f8665e0e3c967c9de2ba9e3c176eada439f4fa48add945eef9cb076fec74f83f3c65dca72dcf747daefa0e5aaa5909a500a3241380b807fb303b13e136a4fccf46ef912609f9044b103fc88dce5c69363a1a82b8d2cdf1c284b80fc9dd9810dfe08117fc995abed3d66a7ce13d948b29c37dde6ee00000168000000b019bf0bb679472a2851cb504123c4fe5a736af7fee08d3828943ed7225c8dd65b60ff8dbaf4a3c4a221cc28e0d8face5d8fd729457542e1445a7a58a4c5c8128c2914291bb7fbab2fa2f173aaeb2b6996a629591edee8db6018e6d835e9a65f2af776942751b0477299356c527c41bef8223df67968830f1d1451d8cc8b62ef210d04772096b9a29160b34ac64da37f050b44bfab16b450453a4d9c62ae0d61ea99357fba0c5d6283ed4e8b56037b9072000000b011738ac33d38197ec9a4b3c0de367070931907bc27ad1e1267097707a007fb0b2b76fb76c55a440737ca84c7c5ca186723dc4e981128c0c6a9e506bde2ad2df8594972b6e047efafd3fdacf7526155e996f71cc64db6dc0e12a3449616bd77c2834e37f87c4885ba04faa9e61f0098340ed1b87fe23b4c1d40d8d606ce98f64697cb732f9ea82c991a4101451157af8909d67413c0e7a9b7b81aa0733a3fc2da07d5388127b09edbcf051026170caa3400000168000000b02eafccd3e4b23c232f1522776b18583c54dd4bddb10de53ba60b2b33494470cd9b6e1e0f0ed84c56f76789495ac768f8814a0730e2cb08d6b5eb410bc5a9db0630f4d4a70680a1fe8d29cdc874e8c77a71a9ceff47d29daab5f67e3360c52700d5b5685ce369466482df6b9558a390192a0bde1cd84cf320b4d0ebc02816110ca6b43eebd575960c3f71f9116b0a3e1b2fba567b2e5ed9759821abf1eec143d3c636e1757e22645364f9bc98892cfbe7000000b01ae47fdb30f2d3a13cf0307d269714ddc36e1e29b3f060d085cadf53f9a18dc64eb5d782071c1bdf286c27d76b1fecdfe27a300a0d5d06443b86a7d93a9194bd8a056ad0b3b6d56a530e2cf7204091337a18665dd4ab379ca113b131c636abadd0b3b83ba5fc5866c4611b9d9638db6601fcfd44e0d38464dae6baa2f99947eee4e70472c5e6bf06bb8f296d6201c21a12a4a04cf4c46d312874ae17cf0004f9b560e97a1b02c23c972cd3c27901783200000168000000b014d5743757b5d049304624e0e0a2a3ab07b520003d6fd1c4ca70e56ce82682b2fc75e6322efe505a06abe1784c81edf9882b8471ace526cf2f7bd2fb0eabd6e88e2941f850c07f6970155b1a35eae9025897d416f64711c5d2a33e407eb4b04fcfbc5f73f4aef7ea218bf9b8eabb6dbe20eae3b616bb02d04c26509a4c65a44040d73af94f7ad60d7b3fb2e4519ea4fa00d8775b7f550745cf5b2cbe65d7d8cf1f42fd2bfcf08d8421e38ff6be12cee4000000b01cb64ce3ee861d3fafcc0716cc2a7fe09835cb287098a84a82af6c8746aff2564c203453466c38f563e70b76dc4e8adc7603ce6b13641114f41e18658c145bf9d1d4ab20f317e5cce3cb7dc5aca33c660a591e8bdb77644807ebcbd8de5f8579501bf85ed20fc5350bb3a532512bf73321f6c44e28614622f2c97d69885fad3715cffcc7fe4ae3b16cd33bb21d0fb8781be9766434c59462c8911f0ed9c3b7f66bafa636e72aaae500fdf6e36bf1cd8700000168000000b00524aa987c9b96992eb381bcddb3aa351df1cf3cd283baf3502caeb5f7be991fdeb40e75f585da8d8e2ffcb61d7bd5095634775a71ecec756b6fdf2329f1dd559fa344714151bc000cfb20a68f44cf8345ce1a488ec3c4f62fb03ddfdc85e6e905aac45cabc37e55dc559555bcb34125268d24f9ae3f5cc3139324512b94ad38981b15e240e34ec880783be53ea1aa3805b35e524d41a7e531795308b26066c4211098fb4cb8c0fdee45cc066b2562a1000000b006f2175f11664794970e9eea00adee72284fc35f55661012b3f1e2ce662294972515f37ccf1ec2cff3eb7d5796ad8c0011c160afac147fceba6bacfabeeb721307837eb69abfee5c2a22f7c46c966a566021cc64a94c864ccced394d83a5c07f53bbeee5ed313164b9c2edaf48a7d05c0ede2b5267d731d9311d77e17e6c49b8b58eb294cf1283696e3ebd6f50bbe9eb1d6b64369be4277ed710387434ec1db21b0d365f22a6f9066ca86c7185253624003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b003946dccae961c128e511709c7a6cc7a630b7e4927a6fcd9c821118569350bbd3be2f6c394c3fdeac9271e2b7154b3f44a2262d56eeecb458ca1cb2483ef8e38dc3db01dc5663af74fdb50bb2a66abd34e5009dcec3b9164a2c20f3909c344004ddaf96d6e57fd0f47cc2550bcceb5bc0cdca3dceb22a82d533d595b0fdca2aa17f5a115f03448c8106e519356aedaf6178a67ee73d0f169f2dc3357a64e80a89308a97ba47bb8c03e8fb9f7ada0a702000000b0070f465625afd6400c7241801a2b4e91efe2f68d2213c8931ac147c4a06ed14806b4ec6f0add14f8bf8a25349bd0d59c8c77cf58366ba1dd0cf7141982c7cd5b715dfd70d58a9a15a3371e9225fc8b78988dc96b70c53885ac2578a3edad6386bb103323af88108b3fdf48cf24a27ca01e6893dd5457db7648b57889535352d7c2dba7c8b77b005c97b5ed585ca69ddb110ef3ecdac5d4472c8096444e8379c5ed7ddfed9b740604eb03e0534885f9d1000000b00d0a01954174e2d39be53f39f04c70392029494647603967a14e36fd9436688f21b5efdd8435a749f1dd8dd56a6de78966a61cf99c6056ebd2e2806a730386b0702fd926da921f11d97aa834e2231149cadd33e17535c2f04eea4e1cf3594c35d84f0b97c0d30634fc381fbebc5d9132292d429e651960f5eeb64784291bd27364f6914baca7f3ef74db18f926a7067b186e260f70d113a9417b409c16ddf80af0c784f53563fe0b4c73ba3fc45d7c7c0000021c000000b0126589f7ad4767568913edaf756942c6dcdb0a9b7b5918121e0f1da9483cab009df0072412a090cfb5e7623907c8951c1507f48c861da98e80ef4e7c4d77e87895ba9dc97fdee505aeedea251dd59bb19963bb612b554aaef7bd4163b8e801aa1974fa500eadd90697f3210597503cd10f96a416401c88f94305d1216d1c31dd5c206c2b1085f17f3b809ec74b56d1140867d584aa06023cfbdb6ef4df49ed793053a452fd82544cf1f89faef5f6502b000000b011e2336f2300b4f2cdd3fb7bcfe2235e6c03125e31df0dd6cf2b185fbcf3e676d380ffd7d3cc86436bc7c8b8e0e9c3bd8b70cfd73ab4cd165cb37178cd0c68244e1fcaf04bfff30fd9e2c32d9a5ae6300a018d4ecabcdff19fbebfd30c21dbb54f55b7d2ac42d168439efa107c5b33be25cce7d3840ff1b323ea7c9008a1f68b67331c6233752924678af87ed20cbd581f657f556efdf23ae999ab4a608b0c8904556b61148d6678823baf0456d63e8f000000b00740203b4ecfa9f45d04aee98b1ef65aa1c58c52f19b272b779682148728d50428a73419edfbf099928c2d7eea1c508ce813cb5b8d85cad1b054f8074d17f8f9aa594c6101e7f931e0276ebea88e75c070005f10b0c672c38566a3282762758ce96469f8fc41fe63c671ea6dc679caba0b4d8b022fc6b478ec940f4f0ebc221a8d6c6fa5ff13eca06030fdeb1abaa152110d623e1938961b6626e1dec2279e315e731ceb10e96e24a114502f0e6512ab0000021c000000b026a7db2826b933d2451fa8e178fa90f048fd12a26b17e93076990146721db3a2d98cbec7ae26d8623d90345a45c9dc7ee9a7ed4621f9cea96df7b81ccc1104cd78ba8a6b9bafaeb2e52ce1ae39cde83caa36f7be721e2f4f00783ac644268a18c280365c6b448f19a609d84218e2a10618cdc7bdfae31c72db3bf61b09378412808dcae3febf5cd01918819cea4df3940785a01b4dd7edb95cb664ea9260b1f26e8ebe2b1a781be3f02309ccd2c2e3aa000000b020f31ce0d64bc9858566f9aa4be385a416c781ebb9530c6a08b46aab0bf26fbf20d6f0cb4a82e7232135e5830a6ca4d35fadd7482e012ce14fa9e2942d59c2d34911fe6bcb3a626f2f1fd95cfd5e5a1f867199757960e9004c9b2aa36ab84f05b2e8576d4ef786e96e5598fc4fd6fcb92607e25b993a7cf028e0c654cb0934a5e4274f71f720f3ef94771f5b5902ecf72ab5e377978b5755004b9802401cf1f923b09341288fee7b95018a387426fe36000000b0010330f3d0c969b395bd5ebba7f6791d98b7149348039a08d4b796047a7edd3ca424ca22c0398578ee99b96181419d63630cdd7fcba9e4312681ea3cfcf13b44eb4b025e73fe1448bef66dfe721c39270387b0bc06f93a03988181f3c8f758fd358462a365344399d99426b8f5972e5f161de687215cb1faeba6b8062fc02bdacfa061e39c7358360094a628b792003523ea6ada2f69f6d0f36dddb50b75a6232f080c8791f9eaab4b10926f062a4e240000021c000000b004abfacd392462db23bb3f101900f29f2c8cfc55a93d90ff020b610390c8ae45f35d8d6affe08599a09a3b6ccb7d5151800f93b665da0d295f656863f0f349feb3a3f1b1d6fcdeedf5f48805bb845f66cd653e62928a1889cfd7b6399fa9510e93dd0e363b822c167c5ae8d6a28d3065048da30242414796b7473545b30012906aca492baa2c1dc33d90208469517e6117e0ebcdb3fe501ac861923696d6396b1783614b3d3e05a979dde3cf1c6c1446000000b0170849d0016faf70007aaa134d0b6e907d93e75bf239eeacb1928039beb6a82014d767f1f6ef334e7c4fc3423d09f39e596b3a5dae68f383bfc3778dc40a64e67eee1416b84fdb0afcae7a08136d73da75ac671c196cd957fd159a075571e0e3e26586af1193a4f5b09b5f5b409f0fc71aff06e99a7138dbc8fd11212e705b1a3e84c90f84d934f891d9f9ee78c7a31b10bb4881a62c9d5df6f5e8066d6d3d42eeecef9b09de5ed7fcd914b6fc3dffbb000000b005e85bd67698869c80016c8a51a11ced3e346000d335181534003acd572827559791cff1048bc8408f53395c8a5d835119d3788cb32f2afd75539feea9b703fe6ca11ccaec411c8eb696a0f56a5b315ac97689022d61085585d178f03d255c442c364dc39694536534867ddd8ab159c01e58788dabd6bb3f099b81fed94c4303beb1f5f63797f2b1679c55b0245cd53a1469695f27ec08d737042c53892271f8687da2599950c46ed1a273f865c2c80d0000021c000000b00a655a3d720b4f1cbf931f03195456e851007e0abe280a33e898c8e30790db0a079f0d659684776be752490050d693bb1a47645e48d9db616cb40ffc7053f2aa91d4e5f5a903be7b50367bc42e90c14609edfda67e71ed510049d7abf87992d0918a4ffa2ddb6615407a9788dd30ca8e1aaf761003625e3e2ca13e71fc5d1a6c25b6c06df3d25b2d15c479c4504fe4c62b3ab913a2b6182c8dd4acde76d5cbb1c2c6fb9570010aef6bdc16b21a371511000000b01930622bab6c635e5e47efb54d918f4f75318b1cb143c75d9f59b0e02ae661d473c5d595ef079ec960ec39bc3fce086c17de18ff7c5869a4d8c62020648f7aae53905873c8d9a7173f245aa47a0f0c32c151ddb440e25e78012cb2fb60cd99d8ec01e87146aaf387cf7597ac120544c51b40c747a5352d7f0667de4014e981cc43e4e58b8a32e655b35bff0073fb78ee1e2f0865819fcc1cba03ee6b71effc6a5db87a2b17a0a217a96e6f0b20785d85000000b0286406756bb3b496752af09125aa69709b4c671f674ee989acd65c756a86922eacc98e891e7c564bffa5266f8fb46e1200c3175d2f152ae2174eaf266789804528b60b8896d427c3856ca5cd163a3893ed9e6a66186080c9bd74d131a2d56f95d0f93f69e496ed37fbc2d54a51321243197e9c7a6edac9cbd612bc0793ba31a11690965dfaed5f6207f1634a7814dd3e0810a9810e179100e02ac4b5a4c21eb46c72241807dd78663922233701d54f720000021c000000b00e7851a30c5df4843d1825fb8c1f84a944c83c95891f3082050d908099c810f3e5a94cf6d6d5f88376994e0dc1ec3855b18a0a59c11efd4667ee06bbd5ea0db6f08305bbcad504504d2a2d45b820b49d184a0ce4a9a4f4e5bea4e94c097b4871ea8c4a0dec116127556babc0f095d2a72202989f184373b97972097492995cb97635800f4892c1a52b9878d8c1e14c522dccfaa06d2d6d2a5dcab0f2d0302acb6b7956a3bb7574e38c4d8b67e3edec81000000b00d03125c4326064dc0c38e73e760c078ef5b9c7d7268ec55aeea295af91fd73558ec3f321a912c5f840dc9ebab7f8aefde4f1005cc60018c1f004cd4e4b9e1402a8f2c1cf54844b9542de0b248c66a5f1c0b7c39209773268839e2fac461dd7034629d75a62e47e67925028c5a598e501ba15b29d8d4a2d02bde204088fc874c427d640e6a594613aa810b21de377808090c603b906483214c3c49b491269ad2b1a82b31bb3904593eedc2c959be182e000000b02b0fa1b3e7fe82052c4b23dce49e312f829f280338af6d7de984c010628f435f7ef83a5e69a8c42a2c0e8167e118a51d0a1a58d0b767b9e2556e8b3b692b34e15676824628df734cada6908c406586af5d76a68f85e08693d6834aca208fd4215077ba448a375f02e736fc6856bb92e00b57f78a7a131c5d32ba5775bcc6327b22a9c1fb8ede126d44284c0a9bc6157a130bc6a16f60ac1dbd46c02804a2ea10afd119503976825eccb47a3075b7495b0000021c000000b02b33ca3da334232c699cc2c3b7c36e303c1ba26d95d4d882782ff8d5ce4481230ed9f2b9957628105ff7943ded1f0afa4de6a14325f930f88003dab53438d7dfc44f1182aa1d7f0b39de5a546a4063c0e0c22e941ba1b022bfeb9075b729619f38101acb20d429516a0bbe0e620d702815e5be792147c29f7547ba9d3854b77fae4639ae2838840458effed9e17559a926ce21730f1adf08f8244fe81a159e8340f04700fdfafdef9fda3049b6eec965000000b016a2930b52f799fe37c98b8e516d8325f20c0c9ae18ed0b6902e54276c316d240c48bdec8eeb4c40c29c1591d143fc4b0b542c291eff23ca5069347700c1a6207227da661b5aceca7a3b350aed704746f3835e8b0577a41da025aef1babebb2d76dade3299c2bc7d984509e621088af0033fd53ff4efb4ad84749470fdd6725584dc32e23d1e95c1572c5854b00b59ed01f367fa8de039a314ac972cded9cbf85b41b45965e57d3ad50d32e2f9099cdb000000b00fce360518978af03b69e845144f48bb57516e370ff20c2f3dec35c6a17d8c3dba621ff5d661e1525bb3f856eaf83b1c17e7e00e6625bad34587779af64e948892e31b4e84cffbb086472f9406d580559c48da2f190638922bcb304534f774eac64b73e386bcc32366c6a54d7691ce6105175b8a490b1688bb6efa2bf26d7260baf446cf53edfb108130cd3f734fd6e72a98735cdaf7963751793368188829ab3ff005b3436ab069d876ffd343ea19550000021c000000b007333879c08c38d0c8b993e886e7b74e54bb8e9a544b20fea7af00fde3153d03af4b17b45bb423a02934b4d65afb85bcea2abd5733220fc532d456e7465ca4bef79cf4edf8dfbd22f216e019f23a2bb8cafbf58c7cdc68c3078eb8536a81fb359df072cca462749a39d9a5803d4cdc7d0d61e5bcb8d76b948d279b02dac70cc4f4cfb3d3a7cabe07a5093ed205d955e4248ab7b98dfb8b4b058723a9f446487a238b589afcb55a93c059f669e48142d5000000b00bcf182143974eeacf533abe31ec56377d31aabee3c30364e68788d87bf6f8f19c7c2ec43e488ad3c6c63c242080b0ecbfabf7d04b8581909fbc232b01405d37bbfb4df976bee57cee875869a68ca76c91550b8f437c789dd1b5173b0cc3aa990063faf9d4c600b0d75fb7fd500240e7030046fad7e4cdb82f7c8c5dbd8dcf88a03aa35610c07888d9fa84a38a726d021b3b4b8cc87312be8ac32187269c83eab65576133a7735a364b086d87abfd3a4000000b01707e297f4d0fb1ea74d149c2c77566a96d926f2479d289784b25045683d440cc4b8711a39c6f48d03bdd717b2d42fe5ec4af1f8f5262852d6e00f0deb23c76bf2afb0cf137c46ca69b1c95f67a903309ea61484cc223d82e75ee9e6d9ecb27d0d2f01efaed2769989ff95fbfa66c76d0b078b48453e610d00f3d2391395264846ba8cc80e7618dfdbec09a0bdeaca492726e57349b64f0fbdf05478dd9a3ad1f829cf7374eb4be7f10391e01c8384e800000fa400000168000000b029990b18c36a22ebc3172ecd92d6aa7d04771a3aec27b5512c1300d1f52c8005561e4353b5bd24431ff0f6dce91533f6bcb796ff89db2ef2fe691bdaf358ea6362eca862806a43444b1e0e4c3aa35deea28542ffe239fb4d77fc098c8ac906d9f540f10a0bd3f7a9c852bbc3fdfa72dc25f520bf0d4651d15cdbbf8d791d8be63ec5a01aed79694143caf82e7273d4651689d9ba3c9b727789fd5f7f6ba0e1e9ae13ee5d4a616dd3dc5a912a9306dc4c000000b02da23d9588ff6610d4cf962c758109a320d31422bdd1ce0ac8cb048783da38466b149bcd4eebc46e40aeed893b5ce0c1c60d56fb4a3438a61be49898ed0d8c6d423ce6c74d8fbd1247c5dde41ff5b84b1c1522eb801cbadb7d8dded420aba8255ad17ba28aef70051bebfc42e762761f14b48a7e7bd003ee8a258c3dc04286703df628d3438b2e7056725be4340420d9259499195a9939a6b13eaaaa036bcf62584f039648276dab8b29573cff7f359300000168000000b003ef05cbe9576ae8d0d28bbb3da292e4c3eca3fcd25e0c767dd0d66f97fb7f3bde147b8b04b699224a1309abfca7750240683dc0adf0fecfb1c4d6a6270aa4c266280d4090b3a22ba8ade7849ecdb4b6b75dec6ce74cb14a38e4caf57d1f832f82a55ffca78f742020f4cd2f54d3146e14ecfb0ed2240432e65bda7bdce1592d59c2c41da5dabee977f1dfc2236baa46053b601e083397c0ed3fe1107f988ff307d85f77ce2ed9aa9d921c9fc920c5dc000000b002e8b105ea38122af6149ac49e489d3d8540ce84f0e79522d59d532a4bb34b2ce3b94ec9e1f55c251e12378ed75b9c5de179293af284389b154c3ecbe09a388825b06522a6e6ab9a11bbe31dfd5bd0e41c83d8cb2229c94d5f05385e9eee7ffe6d7f24d757def186cbcf7cd5a6efafcc0170dcaa1152f9228f509ad4e45e7c436a3ec9eff15ca7f94930e7b0baaac9f71d74a0d3eab03cdb9dd78b251534d9588f66c29cfcc7ed04c664064058fc590500000168000000b02e49041ab15d87e4ae513949ae9e5a0d995d97a6a751f2d7454c20640eb86d1599057590ad148ab9898a99f668270594ad54305f4e3aa2c7dc3f16ddfd3b0a1b4487893e4c5ee0ee8c984d7014930ab968d29612d21a8d00d4a783c4bf7aa8307e43554a3436bb4318adf37062559c342d9f40db1ea02c35493d140c704c3b0699812ec0cb42fdd74d151372e22ad113223ec09e2262de38c6b78e5cb340697fd8dafa68cb0ff250ae6e5b17499ef6f6000000b0182528092432c4038815d3d3bd1a8addaeb66bd5c188b3ec2034d07b3617393a5fa70cb6d923a3e0b9187a0c6dc8466793e7cfbbaf84b3cffa380dccdffbaa9bc3c973282c3de2de83663e241cebb0798bef34ca4bcaafad25ae531ba4ba2012b470ea0f69ebc61bc02e0e8af10b204f0f04bcd6084c1421f5d1cbd598edfcf8ec10abb8f7c2c7f78f149d1c545e48e10059e6d4a009ed513e4f7ba52869ad8a58ed7ce2a9e4fb28762cc90f4649528900000168000000b0100e754328b8341e566a0f86ba3bdf564149d7c09ff66e223f1ca42943477405e621ed2c8828aa16fd16ffaa1453cc4759c4666419ae5fcf204097819bdb8f75f55421f9e2a2397e9615e11372dc571bdc0f14d5483d2eb937e4bf285ce2c2b01b7f405d08fd9bfe6a3780d07fc431521deeddd956e394c499569bcb5a14478188c3665a2aa4281a37bf629577db83ae2667414959474b92fe42f199d44fd78be0ba29abda4278e26de3d51933a24cbb000000b00b5ff9a0f1c02bfc5ba27848dde697e527dd8e9e4ca0eeb3f6e2708cbc6f9d23f70823752c6781e4d24259ebabef09c7a3cd7ec14ee2e795ad102031da4a58dcd32de9fe1ce9a025d8cb12ee7ffbdd84a949e816bba13cb7a2bf0f8bcc8602fdfdfa79c8ee4c4fb1eb27b9ec06e5c0fb186cbd9459a115dd5f6a29c8010b7f3aae05f0d1b6cdbaf41c582855557612cd023b293a02ccf54c4a684b949e88a67bb9ee90a5803e26b01a75da8bdadbf03500000168000000b0150ab893fd2bbdf4641a8b7b4fd47c6b07145658a9af9afe4866d96df241dd473ceaff133b833d1979e31f84b0833aadff180a84281f1074f6e8445c259a588f658a369de31145ba42879356ee9105de9314642383fc371a2b92e0b57be2061797e3a384782cd5819d2e92e28f2a6ab61ef32c414c28c574f05a13cd8db76b6203dfd316c2422ec0458bcdc1253df7971845d5244962312b14da04c0ee12ed45a2cd6ff6f3b3c3f11b98d31b2165a9ca000000b01cf36d2c8fdd332b349e60a28e916cd99454fe3e18d6caf663b8fbe399d1ba6d37106c338f28234bbe58206679226aa7c5d688e36d27e28285f106aa0a6841d720584905ea0486a4152a7dd4b71bb7615a1be806e6b59830bc03560ae3a059089f4fed1eca387267f2030c67fe3b9971111e437e5feb8f02eb390f7b3989dd364aae9b46c77f51c62acc811c7ce236fd281fe4e6837a03e64b6b518f6564b73308e076d6c6aecc1538a29dcdf831a4ba00000168000000b026fe52c9cda50d4c01f946a3da967d2647650ef4c5cc85c861303fa82bf087a28265768e5d0b120f489f464d3b04d9247ccfc9c7afab8269168c6f8b3c22d34ebb024d4959fa8a182e853bb4b71c6000bf01f44eca2bda266bdcdb6becf7c6149b3d1d3688c66ac578aaae91047a82b924aeeddc3d2d0a7118423e2d07ce99ac51c5f6886ddea1b9bb2b88b841b1f37028370f5c301c5d07d6e7c869effb3cd6789c0e47c1c7df4692eded6082f5488c000000b02b6b49f15b7b6b73de700853c0e3fdd14f40412b791e19921d17e546e0d204cf3212c3819d4b920601039ae5c58386993fc4447792c108e7e58d886b8f4e875a86c74c1f5acd6f37bef6e40f5459c988c430d0b37141f3bdf281ea8bc9097327368349f8526dc3fc760ae3f0ffff784011bb24a231486bb24f1aafb1ec08efd01cc87f0edb37d060f8ac5cfb0c0f022825bb3385209fc149f427fea710cd2c1f8d1c409518451ae6d1d20fb83b55943c00000168000000b0156288b5bcd11a259e4b5924859e3ff6885ce38cb04756f5dbd8bd7b47c012c91eb730a294707ca88f920a2fdfff2b97807050a11cce8c1a0784c27f0a039e28820d58daaf88b80c8a6bc5905e0e342bb9d62f911ffa63ca3e7b8dc6f692c596e0427205fc7578e68608371bfbbdd8471686fc18303f81cbde6fe6a5162f1605f76f060e6321867b07d9610faf8d215315bb4fd3c83026b577c31918a023582f5235a86bac7047a0e7ce65f728c0ff4e000000b004a13a8ed647b8ff3e92dc75a39b82bba3e85c7d6183786b19ba60a3ebfba171ef48ccfabb6792891f2a47e2e7165e4ff0c52989ce7451492bd8674f810b2d434de4547bd762100f5abfd0271d826cbfc81f338b6b06d1601fc4ad58d33574b097479598f554700297764e47619d735e17ba85f76810efd87beb3eb60d395311776514324f4e5b8e9a2df0781f8b197b15a27198347f55f6a5bf694900d4c60e8fccb62147ef5b81bc0785374edd292200000168000000b02193b1007c56869fb1a2346afc28d97611e4b0271add94b4db565a73bb187fa8598b509db7309e58896ec8ee7cf8a87429cda9c13320c7fd30fba6c53178711bc43bb7d5afbdacd752edf92855a67989d0c9178a1338238cae06969be76fc04368120c9e4b23f40280433f85ef8610c014acc881e8398430bf19638b07af445dc5cd2ed99c292c03bcfbcfae9ec5a5402eea686fa533cc17199eed6cbbe4d8dda70818120202839698d3f3a3d179a026000000b02032df390e29f1c6b8614e58092f1722963b5f23e789aabe1e1afd66d02e852d0d9694d74ee55091a63559b2ba0f0ccf8332b6a895f2ba1d3b561b9fd61e285db40eb02765ec972e00b11d484c9379693d6d87196cd31bdab29dc2dcad804fb81ad74912db0ba044fd52346bdcd8716112bd02be4fa09f41765469d55ffd77e4c6ee56aa88ebcd4b3fed9b7d1dac07fb209e71643a723ca3ebcdcff710ea7764b11b22faed302cbf4afdbda943cddba000000168000000b00faaa02dc57603825bd5f12fff2921afc735e98bc0159d99794677c263792ddd9375b94a053e683b22be906c80c872db10c9139617a68320f0f6f40c62663a5fe0fd2bb4407b4dce4c966054366d8003fd866ca44442c2019b7546d2419e59029f2e95cbed5246932499d1a9699e484023fae61ee1112bf276821c3690f334dd6b2a33ce50a2c4fa1f6280dc8e65e22b29e05b6f12f3b9118aa2b883949100caa6019255cbce4082d7ac8e067175a671000000b00bd33bf9d97d98b3331c43087c03f197ed645699250840f55c0b8b3759423127378fb0aeee60e67a9c8903e9a3376a507292712190a48744d80ca6e0f06ab6d7df60798d96f10fbd20d02d5472006da363e0e6fae3824a60120f734aaddc9903b877de9191b823a4d5a833bd5f33739407f06f3f7afa800c3532fb8d629e0e519461449a84a1ad4eb2096c3ca30c35c82570848135c0f7e410c81665709d6585e63868da01924bdb1f30542d738fc3c000000168000000b001acce755e1f887088e8590097efc785d541537ebbf15599059a676205d4847800e7a5797e12714ea5e407c0baa6c856e03640205163a23f4d9f59d25e105cab465cc683cfbdf1c9c38a3869769a5266f3e998920b9a0fd12b3b79a84fb0cc06fc5de40e1a3bce677d614da30f89fc5e21615872f7e38af72c62b831b166495ad408a490cb63f8db3745d346da092a4915b8a17c4c47db0dc671611210a33c8e4f0933c204157373bccec050914c1c5f000000b00caffa7993bcc9450f489d12f0662b74517be8164c9f56674da22bbb254c52026c4799769934b93f89d115e220f2ad7a323b6f65d4b1cabb4aa019160b0ca8b6daf44874b7d37b66477879e379705d38003c4bd3e9b57a0037f19a956be3629568a288a2253fd0c0806b015c09a7de211dc55441ffbb64fba69a46d4aaa87dd2967a2a6ebe4ebc8dbc59ea44352f52702e96fa6680fdd0985900f342e183a84f2a8068f55a61ac835dd78a1bb508e5cc00000168000000b0031765163bd977018ef88e8a8903b30581a8e7464fc522c2b131a6d4b2d30caf82fb219505f9439d9011384eaa66a3b22dc7f532f578fb18dd2195e3225b7c9ed494fddbcea225fc6919b9341350dd726242034ae68103642bfbade49881a4026dfe03fb00e012c77fa99aa1716fd519252263d042f2d5d92817f9af2f4e5dcb285490bd0a0cc1c793d7e700fa21087c1f8116df5f466e6552b26a2f97fa4ac4ff319c6da49b219c2be2964360dcfb5f000000b00c5b7a2ca497e0f89fb4ce1b9fae8d0f7c598104f79467e39d923ce9981fa2456f39215160af5c6efe5bf85c63169f18f31c3035f236a6140719756a824f703e9cf5fe38e25be71b46664da7bd0740d95398109dc9a8828d7bb4a02b9b8f7b4884c19bf07359a5011a56b85001b27b352d47b23140d97b0f377276820a24e3adcacf9733a476edeb46aa054e802f5b521b9dbc0a7396ebcbba54db250bfd919c14f3446e986f83f3f5ecc36494556cda00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00479c1be9323601bc381cfb4bb5cd436733fe4af5565330a111ff97894cff2e1ffe51c9943c20077a5cbcb69194778c034aea9c992b62f5926c173229f669fa67c60d9d78478c578a823fd2654fdfefc0df1ec683664cfeffd38effaccfef418e9a2bd7dc7672bdabdaacb04bce2a6060553aaa0f0f4d554a123ea12ccc64adc82f4653bcd46447e9abad8c84d3b984b291aa322e76d2e821f4fab6493b9998a028745bbc8368f691d666d3c014b4f3d000000b01cbf564972cb1064fa04725bf92a227078cb3ea77fee629248bb2fde5d28d9f1b060e288ec50f1ef93e4f4593cc0eca5f506ac9db008fc312a0c93fc56419fb8ce69627cf47c7b8a9013a46d4d5b05cd078d0e89a9917f28023d618c2951420fcd9a5f1fdaae492496285bf301888efa1170a94cb7d5b7de62a4265ecb7983402277fab6b13634782ea3398daa0d66021f1180320cb0b459dec37bc6dfb0f6b5f2208cc3792200eb2dfa94cf37d9d364000000b000e513084ffb2b09c17815c886fba848d4ab2b13a4ead5e046bfce4fd240786c482b002b02a1165845f134e934f69e36fb09169ce5aee3e37ba8d111ca7ea9533e38bcd2b82af9caf741602e777c43c6a1fef58e186cb3760d21432951372cda53d10255a87125114e36e3e17875b166171bf01d1c1ceb9183aa0d5824fadebe29994392c53a083f30d0797c1c4604911bf2ecad029881544e6f32872cdfb1b699f4d057dacea56650a4a8f5ab10d70a0000021c000000b02c83920dc7f2eed6d9eba1abd9b70b2f3e06ae70f2fc5cd54e3b7407ed26b18168ef855ab7a4a4452e9e13c9eb3ee22d40c12d8a74fdeb16d373c6496603e8f997247f9b7aa19e2da0ff28e0d61ef722267e29525b4297c7bcae3e4d667c1c6c4d4d10e37a5f786d626909bdc214eab2062c59dac9e6116ab4d0bcfb7ce497a57bd5c8f6998f226505fe5a6017fa28ae29d5593ba0b419f8294c0c1f9b271524b262c5ed5734b87c5b7794e03d9bb595000000b0025c058250c6dff33adde16af89440353311c4e689a83feb957dd6fe31f9332b19b0501e8dff196cf5d4ce722063fdcdd3f6d71b9e506a0532e81d958da9a7445ba7c0adef93af6b85cb3889a3c81f9954a5930df0a71b683d75a2874beb65723f59287ccaf373ad8107b812506488a12797e1903534620e4bf07b5ddbc2c04f0186e4f2950e9c8c89999cb183e2c0f30f3e9019e442e4091ba4cc3241cfcff0ea873c8abfa6ac938a7a9414349908e6000000b00d91a6fafc512462293ce98aafb4d776d304961ea8e62224c20610ac7ec2f3320072a538f97f96a300f400050d81d1c8316ae226436e12921ef9b73e69e0bda7b4d30f33bdeab3d3a370b781c2eb0ac530b0be1b1577a5217c0b3cbc66cfcfb09d0c3abfad5afa1a5cb14edcbe193ffa05a399498d6157604792bc1d866f75635db89b1c1d38b7926534e2d2122aa4741f60999b10a551fa42447e3b789c5547efcb97ef893b9779a44d2ec9c250dc710000021c000000b0257eaa42923689583543b0137c78f7d41c0e5421516436bfe8dadf3c5218845d9ec30ec0011867779daca30f6cbba29098cd1c6f827fc6aa770def70ad5dee165cfc932e127b4b28fc824b20719e5e7f72f1ffb50fa9a0caea1732dd887942698254e1502615c89b6adc25f88945451405d0381241e3a3229f07999cf829cc13a60a3b3602ab5b09e04d1232cf48c6620117819352d289346a17a791e4ccf16b927fe46228b03a300baf99f84624e6f1000000b00b68b9b703cba726932aa1a52e87671bc24fd5441a72b8d2e7094ab56dcddad3c2d0156fb10ec15e7796a92dac4c2b8d37b36fe2d2e4cdd77fbf571bc51f8d5384f0aab5ed924a13f2de201434058f87bf74614da2d806a662bd1dbcd9a0bfaa2e7540703e7e724057afa6a9ee91dfa808d28290e91c2c4aceb199f1a5b8eb264b6dfc8b09949b7c50532f8168fcb70b03024ce43541638cb3e203016d315f94baa2b65c0903a060b5dca2845a3300e2000000b0211735a86a4c2f0a0aec0d42d867fc94e8b242e9cee59cccac7a38ca860f05bcc59a537d4a9262fac5100d147cc0c86f275be70bcf7ff74b363f7f2056d307465ea1c6d6c67fc85fcad555157e5efadbdd9b4ee79ed7736549ddcf492567499f4a9f322d8319edee89feb93bee1e21e80fad38f0cb9d17a69d95e4a521aaa00b04f3e8761a09b4a0a84eb1e2789128cf06d9ff671fbe0edb673a996e6376bfd41cf703ea63ec2e47971ed23422846fbc0000021c000000b00ef2508e4a60d89bcd4ca31afa8c6ff06d72fe6ed0316f9185db23b849e09fc431373f04d8827b033ca231028e2f51a16e74000b37af7e4715cd490efc475c512a4bb2f065896e1621f2a7951bdc3f106bd94d4d9c28af1fba1b4a8f53aa84ea336912454eb412950683f4b0e6a01af7103244711a93accbb0105865b638be7f481829340ad4a5eb36a25de21b7e927c003bd42089b2b135bae5c3f778b822c0746d0c4491b8ac3eef7be5b174c1c2d9000000b0114357a742b09cf8ba18269f929ba3eed9d5ab5224c616dad40188e9ca819f7266093a2afb044363efe17d354d92518514c655f1c1c23fdabea9dfc0f822c20dc03d8f96dc1538cd513d01d2f58f1e887aa5d7f0606474e23f5c9571734bdc0109fac4ab9321d3ec49492bb0b56b3e7628a42c241acab6d2f5a7ed0bbf8db439da95505bb11ecb89c95ed113daea89ab16dba6473ee02ee006098c3fdd75a525595993c74d5d20be31137a71c5e62d21000000b006285b593f99d01d5c7fffa5a5d659c3a29a2074f77d386bedea159183ee0b95a2c997fc80b02130c5c8a3c85af4a8e9e30579a69117e28451099a9541b0b86aacbb4de828e04d2f6acb2ad2c04366a3279918257bbf608871ae846a032e45dc5efee18d78e9ee4f1dccd742e09b80b12ddb9e7eaebc8560ef990f8b5e5622dab1c305e68496e73ead4919d8d94a63d00d1dad4796e68cfc62f185d24de4f05ffe3f4ec0b8c29d4d767bc5cfa52aa1650000021c000000b01db54de7e2178c1300b8101a404856482669dd5367bfca4e657071bc08051133addace29d6ff3c55b252f97d195f533d63d4005abcf4084c2320603d527b794e5ef119f785c87f56f732eb4eb055898154bed02adfb6c93ebb5f4d77f28bf953b7a8c7536d6449cf2995fb705d9b78cb2cd3fe4bca615d12995c7f4c4055acaaf18bc422f0c07a9af4fa20058782f3680bbb75488247e448c6cbb939b061500af2ab9a4164430d701295285dcc2c75b9000000b015b852352dee308df1348fe95011b261e97a9ba57c2f68531a089b95df7b7c96fac5859f1a54be60dc41413112d3568dab1dedeaab5c40ec3e5ce17169e421d48e81417bdda6f3a9b492e6e21547e1c86080b2a90301ad732732f41386076bb8c76a6ae8dd592657a66fef958fc78e111ae68ded247155b31ea26d6273fb1765efaa1ebf8dfcb4474404842243446f35124992d551426a327482c2fe225e2e9ce7e4bc5781b7c47f0cee2d73c8aa773d000000b0034cb617a0125391aa2602a4abece6148ac2fde8bac440717e0fa0a50031435b1df9a4a88f1796bbd2f2f62d4d4a0f3fa55ed7c3d5ac104c6d1a5f692eb818211e8e4c2be6844930b63bd5a01a73dc2214cfb82503f01ae83b9fcb347623eb496a1e4be96f9f0d60ecd2456d44a8ce76108233a3b5883e8650234ae81efa9d4ac18ac486975a110970a86cad63f9fe2f2d202172e34ac1c8ea62e9d2b3674314a556cad88a0efdbbdad2f51cfade77c90000021c000000b02bbeffa581bca906775bda3a296f1e0212178751435c37b6a5613fd602bc54dfe34f05019f886b1e9f5f616294a9ab8358356ca8e46da50190af411349c65d0c8a9bcf3abd2cd35c508ec724c17a1b193bdd3ea827fb917c0c9d29b719b89f804226b928f0506baeb550480315268d3b1fd7bb5f80e7e9acd40ba4168db2972c3fbe3a17eef02a37a359772687c94a1310aa5729febfd6c382b81ec37b8fa76f2e45848ff571e1b651c9cb46bb1fc842000000b00b7b2bfb00e1a2419532ff16e3ef8baa1900fe5f76e26a3854509063a6f71c417ed492f1eb912e9c2faa7f2a3dcb6dda87e48d298fda41c840ec23257d6b75825ecb22aa663bb7b36efb26caaff964f3eb2fb1683fded171c95a91276e22554e42e3e495864a2e8ef9cdd230944f31c708175306de378308dc28b502bef2b8f9c90f48a7b848279456715ca4f2bbebcd260e227e60feed18c25473b4fd23227b36944c7888e5862f2736ffa740a611f4000000b01979e57a329fb2c27eabf25ca7d2331dfe8a1088b7fce07d59a8d572e8caa4966595f33865fa1266defb20b694377e1d7adf85b472d73eda71a640cd47dc0344082801f8ef871cc7cf7da14316de66ba0c0a09bf7c1474eb42b1a28a94a91efb7cc0b38126aebc7d42f260bb3809401f165036f9b128529d6fb2247450e0ef08abf543cb27d714fa7ca1062c50acfab82d63971374222472ec174ad69a66278bea1eb68f3fa1d501d7fb8e25b91d9cd60000021c000000b001b1774e6a6b48325e120ac971d414f090cd2115c44327055b7e4c329c60326dc4f9377d8a28a1791672c37a0cc730eb47724384a527e215e261aad49bae9beb7b51d9ded63043f2f2ff2139bc3517b228157faa0af61b468b0eb5474149701b195de54214dd2ee5b7c164feeaffb1ab091e44909b8cf164abb10bf8ec0b8d50ae4af3be7c7174b458a47bc435bc130c3059509095ff7f22cfd231373809a0210361efdfba9039b38aeeda6cc8055945000000b02d45818bebc1e112df1fff5fe709fec62c66aac1ba2ac1fca72b2a3ed73e48772b2f439ab8d7f90f8385e721dfddc3556d366509a118e67dbf44c0a416fd350c641aac466edb2af3441bc8cd40eb294f85fe18d954ff2555b963c9d80672426e79a20f61601454b63fce8cad41f005eb0864a7901c060b4374ce3d73225b19971595ce0c3b0d8db338eb79e50a1f3f8f20cfc822e916d10d5c2b67c95cc994645149e571cf0643d705649cf95ed981cb000000b02b72ba7fddfd1c5a9a1fce8edbf91cf0800e24d836426220c13f7bfbe83ad3751ece1d2d2a5574cf364a745c947e8f36f86986cadd5d2515e1b42018f9420d109ad2025478b341a2009f86c90d52d6f32d086ab2ab0a0ff483301e952624108621a74b05d285d0455c4ce0a0c05ec387101dfc356706bc419897c01e3cc76b6f8976170ef04bb883c5e33dcaee9c695709ab7348f30c85a2a582f3e2085e0b3b3944442adce966f7d9f5dbddc1b428bf0000021c000000b02d44eec53a1f2a7e0aab0d73e82ea1779d90914f4689ee3c2fbd207d62c98a3565f1aa56344ad48eaa3c95e5e6b9525d6e03ae24892080eba79cea8c92cb7744147435933400233bc01e40dbaa1678fc7fe05c82de5a2f4b695bbee9642b76b39b794dfb5cde392bdf624f51c9ef6758155c5c8ea8c58b6e9252973356390a2ccb995833128c22aa6f015da14f9c1ce52aa331b4fea0f408bba510f7ce03735acbaafd7b1bed393e5be927c326a521fc000000b00d2a456536960ac7374b31b5e98bde005d2fb87fa293ec7fe97c1ea4faba7ff642e30f569e7ee770bd75a0fd84045cb3841af1f364584d1a8ab17fb4f69d69d7d336c524ecba7889a9f2b386ac0203bd51a90f2d4b587404ce1e7de320b0aa71cd064c2d1a9d0ca801824ee6c03cc16003646919829544d33644add55c51b408fb7410ab2690e175d87980ea8438547829d83f1669478a8d015f40d1d0ea43074eec4558728004d14bd3f032a56d9762000000b000b8880ac96a9184e80e0592155fca6d1b01e293bba979f5a759e948e8c736e587401858b8a70a6ded8812981c03df3f23ae31d7f31acdd996cf9a413665b12bb5fc234a07c29bb218eddfd5ce266d262cedbd0212332859d83c81e34e88e331da9f2c929dcdd7ff0e021493feea411016de15280428046422f8aaf74c4715a98fdefdc7ef6c8f7272d7fac7684101f51aaf10e9ab4f560503365a77e54e92974299fe250a96b20838177c5b6b487fe200000fa400000168000000b02040751d62b87bd98d2713bcb358524cb2ec5c813bf2c1cc71818e147f36b3e9ba61f1c6f2f2d2601ee131ebc8bb9c6287a80d360b3f4fa85a74ec10a12baa9b1fadc503ea33fc1fdb75965f31e61ecfa19ad4b92e48154c951f0c9b67190c19aa4f2bd793cff17bdd6355cffc082b27285aa7c457dbeb055f35c11a23ec2744ca0439c020f6c173f538f472128524bf2d2274a14765ea0216f3dd87d6ffd02de631131c90c48f38efa3d210f393680f000000b027b70fb8fbaf57ed4cf5bd233d2d5e9e038fcea8b0362660d3a2838b71d3aa0ed8ef67e9df996d998ebe1d5a94186ce68683443ce8d84306d710b632a5e22bc51ebb3e1f41f480a24efe159f700e8e22ac87b4c9b32bd1cbebe3ca3d66ca3f2cbe7f3e9a6837a9711be3a3a6d99e04c115586ad90c0e40dbf1a507b56648e647eee76cd9df3f63224c989ac92f2083790ccd64a6bf67a789b47955bc910b5f51e3e9924db928f94977d4900b92968ef300000168000000b023abd9ca0e4cca827fb59eb012474fac62f137202c679383477de63052a50125b3f640a0143b904bda5c99a222168e6523c8de339bf1ae6c8d424548fa6b354627be9c72c3dd73817e4e3a9176b571a3a65b1cddc0eb8d8f1363e9067f63eac7cf2dd48a18cf89e1fa55d75bc1616cfc29dbf81615e4bf528b2b4b7fba97850ce929feb63730b3230eaab9ec574864802fe055d6d95f03fd87dfb85da0ba2ce4b92080258d3391c8936de60415c5572a000000b01d4dcb52850927f5d168fa63eae6f3c30deab53c2224a38360f2a797e5c3aaaae17ff78f79a1c43929bc17bf58173c84f45a5ba08e8b72b71059a7f0fb8998cbfb07220be6bc4ff1c3f817e3956ae5b8781e0c27ee207451bf7360db418d3f627fef00e9f5a34e193c6d30fc605cc15028465ec8e4827efe7f660ab00384209bd2e41587d038975d14c1b29af1c06bad1a6484ba4326f6dd2c727da18c770a5178f951b75fae47e1011ee626ee421a1c00000168000000b003b49fb3abcc14372f256da63030edea6e2c34ff2b8f4929093cbd9d593ec40082f9a63456524640678f57f3eb1c397148c4d5422eab07c57b36e213fecad63b2629a9d519829ac6a10cb554aa7ef8df17885008b3132bd21f1105c5587dc90eeb82adb18e3218015a5b0bc2fe764b30272546220c63e890bf36f02a18a360b3885098fe256f241634bcdbb7c212902710eee4f8ffe8eba12f424070c018327f16e53308569e500988b11b9cee1ebf38000000b000b06aad91932ab08849f3311e131ff8f54dbfa59c0e5de6d702cee806bd3a63da81a6f7ca28ff1ec14be1a050b923f1964d3db5ee69ac58ece6883bb8b0f77e18988aa9ba996bbdc3208597471c9e59a5948b5f74cb6f276462d6b08c3c45f4439190d19c33674cfcfe427292aee00f1e1fa471cd95314f77d3778a19ba1d6fccd8ab8d69b14123c7c02f361484083d045fb1bdaa114e0ab0c40a979a7a3d998d1b753fda2d7a484a968283738c2c3800000168000000b022bd82350cdcbcda2793ad19a3c28ab7378e5bf6021b99dc6da8dc04fba44e5ab41a966ffd5ea573c758fbe0ab3cdcbf0b764040847fad005714cd1047276acb43b1c9a866e1e2932ab5e7293d4d68c52a85ff58b393b6ba0fbf94a3ea132c957728c96b11fb79fe45313e4d835221db1d6a34d535e7968a98fcf1019d5749598487d9d15dbe0a53da241d110e53e91402b84e50e1e40ca2b79078b035b8559622d74d7316897d450a161fc8595088e0000000b00eb7eeb7509ed3ea471d85caf02476a875a99fab2046b3801bb89acd7687f44039ed1c2bb2bd29f4624e7ce7379167ceddc4710481949655cbb37840f64d6396c09deb528ac6bd939646eadfcf3f25fb0328e42a69408ae31b1ed680c8c1d010fe716c0dd0fcd73f17e91d7a14446cff1b4047a5e40dfc94af482a65587ca88b00df1516e0fc427e3ff3b6446afac0610d522d82a98a0239f333d9da4436aa988570e60c38c3a24065365efe44ea17ec00000168000000b01906575d77cf7333395067f309b7b137c88482478e3e44f240a847f052d3ab19a55bff8e95f97ba5c9f5a092f49d437100b268a2ce49d2298a8dd4b449a8c372af4ab30121c7e768e9a3c4ce1ba38fd3e8c5537a5b57894b4eae9b9377b55bdb8e1e8fa45e8fcbe44481103d8b95a1822be8e790cc76943d083617629655383e88352e638b3c6d7d25edea8bbcc3a0120f32909021d1c79b96576bee489ef1ba5c2d39e3b5abb12810b1b805b4581dab000000b02a0d7abb0cbe256dc2f13ad435566dbb26512e191351ae5be0ec20b4db4995563c77aa8ecfd8260de5743c788687018ed54a8aefeefc515b4d564b6980376721e057896f2b6535ae3708d8fcbb859b5cf57a7ec03e952febdbfaf8b004d5883a82f57bec69e6a4d8f916285082ddde242ca9ed4cd696cf43c8d37e0d0676c6f36b6e12dafd4e6e8ecaf1ef683608775a20768901d3f0ba616d514b85d5383e6ee5a21fae928dfe9f12357504388a938b00000168000000b01de131b1776552a0b946c0317cd1ee5205ad03f350183305bd4852914ac0bf107b64b1c7043ebd5539876e3031527f5f3308aabe1588a98e60e76ef14989dfdf42103ac566e2d31ce4417ff69e2a7da9c03e18599feef53f477feeb59f871ed202ba72cab0cdd89e8fcdd312b41144992bf210839c120fe5fae5d591859817d3ade23a79fc7e8975e6ad8a4784bfe1991c4a0ac5d7117c4a4da6d1e4d228ff84753773991c64475844731ef43a5ffb6b000000b028e4ef7cb76d35b66c5207df39cf2fdd2ce1b55c82570de2d3c930064648546d1add13e8aea834c319069755ff2ed1b7ad1a40e2f046a7bea3be48616cd63d775799c11510edb60f8be590ea9d139add98bf7b17b4cc4f2f56a1c30e88a57436b69599bb6042252ef535ea0533d6286f10da0acca0df2cb29a28618685b9cde1a0aae97cb1afa292aacaa1dcbceb8b85233ecfb94a8a9e39a303eb7d3f889397be2f50873c21650e903e9e248d88361f00000168000000b00b16c4fe42bb9f6c881c83546915c589db9aef6724096575b4f71ff23b11f84703fa423abcb18ad9b435ef819fdd8a6bdf6f742b52248067564fb94816672a73a4614bdf26638652d9f0923a88158e35032f02e6375b05b91eaf24b3a76a2e518507f89116292e87e0d3bc97bdac489422f21d36db62d65fd337122cdaf83ba935ec4b5d0c95731957e82a17702ff7a41ee4fd22a79c51893680191ab038fa3da13deec7a33547f50d2ed27753d5e711000000b000d6e8c7416079f484a74604b80be94ac98a0d0672efa30b07a147529bab718880904fe81043eb7a16dafa4a450118d7a04442f8fffbee3a4ad08d540f9d79da62bc1d2484afb9e63980b57a386d2328dc833026b4e41899a3de77334325869d232e68ac06528bc349caf63f82b19673287d0fa2a9683a7750de4d2f211662aded9521f7b7216cdcd403983e977fc07d166abad8bc1d0430a35365c0f3406fe5e86387fc911fa5a707f87d3b51c07a4100000168000000b01f74815ea6117f90a3e0731d92d39cd6e6697a973367697904d0b37defd377bf8485a700cf7101e73bebd7b4f44c78b4967b857b60f424738043748ff35fc438b6953bcc343d5503635dfd6295c9e91645ec39b3d5748f9bcd3e5c3b91effded52cec1354ae2e877025f6304788010681a6afa97b036965801a3baf7cc1d830562692733c13e713e78842aa1d853faf9126f945882ffb5b6ba532537f229a4894df0732b034a8c127a83dec8abe9642b000000b01ed715efda5495421af3dec214d4a7994c7d47e693025bf70a1e8c91e27589bee889d0aad91c585d90e8ba6517be9fa3f10c96ec1846196357decc6904866e8e14105a44cba9cb395eb081a0128886bdf12eac1a16b43c3fd5eebfae318a14bcd301874f325320bae951b88a789f11ab02f510f8c420258f08899b7a6277cab9fe6bb18e4fabcdba8a4635fb7050eeff23e9fa5153cee0b355b4357a3b37dfd1435caae2f13baa3b3539ba239c65a60500000168000000b02562512a85bef00476abf2498c1720c7e3ee4acf81edcfac888cf527deb86216dfa23dff14daeef49315155db4e9075782ebf14ba4aace3308ab6fca9ad96fdf6dfda4476eec983cb88f824054a6f1e2a65d1fd611a99860725fdea7719c7f93ebdee5b5cd2d9e4a0793fb846134cdfa1627f873e7c11c8cf5e8c41cd8c7323535f758a2129b6d498c6b867a3d5f1ba71148836b75c76012b333ef786421f4c8d0dfa4da6a6248b8934ad5699a56a855000000b00e49fe37e3380cc6e036850efa8cd0f80f1d778d0168cb3bf367d331400fa6cf9be2d750f4bfa3f79b119c4b5c4b881cdd4697af764146422406789f0b9a57edeb32891a1cb45eb000333708e56ee3de863bba7b57f2662d7c354c86f90d200069598fe582b917d9161d70339cb8282f0def25d6aaae8192dc22befc6a129a73c428c6a4095812ef3bc787bb2cb547b9071678db16b1717b43ce6b2d6bf8a2f85d9caab75e848435d32bc857341f6ec700000168000000b016bc244a65c120bf5e833c0611245d6c68393ec6e707d2fa72164b8e680fa2e2f1dac4ded9a4acdba9a72492d012eec16feb1ce0e10e6eb11a9e4b313bff1e270f4c03e6952b00a84cc5605855f10d87ada4294a9c5b5a9703bfcd55f023d2fd3cc9aaa6cdb31bd0fc11c10055caf3ca0128d420c49577e255c155a6c148742175e549341dcd83645a22b641d09470c40983691524624cc2f467959f78f659481336ee3aa2aae365ca690e562f2989bd000000b01dfcdffcc9a4c8d09586e578e549900e7104f87b2c64c2403c475c0d9a6c63ef7f5a003bd4eb628e5846bb6a6cb95803b5ddbf15c176bf4b858c7af0eea8f7991c7e75c440b0b10ad1d19917daba90d10c63036482c0cd6a606d6ad137d0b9737e222480231b55fbbef2f274d8ce8c57093dfdade3d73716e37cfb43b95a84c37dd57b14cb019ab245e1f960f8df12fc1aca4a10a419a744c4aaabb3b697984f0eb9bd518c02fa5bac911c5e6224410e00000168000000b02b4b6d83d1d9e14e9565dc3f09963572338007c7e6d3d729b7af39a274800e81b3f52dc39f9235ae3ea81c52c7e26b5049485cdf304edd9beaec3ec0b2186d5fdbb53e75cf950953d3c3e8bcc03028c4a656b7ce0551cc2d5482a758c420bb6f1b43f3f6279b2d3e6c1b07f73483222620df3c2e6a0464e6a7e40e89e558cbb6b0675b1e7a5a1d84c005fcecb06b3779142983f238f4b0a1921604338cc5860d2d651b5a83e98743d439ed211a208253000000b0186bfcb5115255107e585e3f8ceb5a98345442bdf44a29a5f88b5469ac6fa5200093f33fe1e532c3077c6309da17ea6338deb9de1436b6c3c455d621d07450fdae9de96cde038b9b507365ae366a8bbce296001ac7eae6e21accb8d4e9aca4ef02015c2c81e4b86fd80d63e971bc27c613964d8e259ed8e371f1a15567fcd3ee4c66c35934b50443700e256780dbb08c1f520718ff33349456c2add9cd81903d316298bfd102260fea361dca10516b3e", - "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc", + "archive": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b029f7b211a9d086a26e6994ba100b176854fbcc970ec1ea7028c7c5c2d0f10504bdd006bea3cd02a46920a29bfe388c9d9bd8b0ecee05bf690b6fc830bfe9b07b0dd868c0e1e26c45632b0d256bb4d2dd22776d071ac8bd2ef03377d7b2ac52ba57d12563b3a475dcd73e6f9cb2aaf97c1fdc25cd6eea90f9b8ab964ba547c5bb3ac43b3c524a00727dcbd4e13b60e7581b9d1819ebf633c762d8e91ac1a741bf4ade0712bd9ce266bdaded143dc37ba4000000b0001d84267ea559c3df6a2d5b44c400f60b6c34559abd0d8445a02ccb30da259ac7e2bb3e9c346da31e1ee89e666d129f725f7f9d3a27b9fefdd78b985377aefa1b3717042e8db18d1c4b3d49cda72a1caf78053b8766d9c270cdab44e17f93257db7548077cd3a50bb44b146c166875621e56cc3038c40162fa14d279da84f9349449f9b2a2c2700213b7de5af4c7f8c2faa21aabcffdaa6b78f3e666aa416f893f27b3672aef201904bfa60338c3080000000b010e7992f405492c3b9ec7bf2ecd6f0fbc516df0815d6d10da558808653925d1fc8a7e09cf462a5a485d8fe0e4f300d25c756d2d6ee0ebe3b73f040dfafd763f13f2e2cb41c62b24d43e16ec8e2c642ec7fb10ecf06aece17b0fbd5d60b6b61fdd2ce57c843b6d22898c26b1eb1a1979918b87aa27ccf80d79c828ddc37991c53e4b754601122fd7072d6467105088f7711ad1bb150f2152f17d3c87ad08290a6d78f7682226ce56096858d4acd19fcaa0000021c000000b00b8db9f49c727ce480ba6aece934417f21cd71bfaf0b1d78a1a0c20b7d1d6251eb7051ed40f869e286cdedb79dc0cdf2e1b79a6b10024c1c52bc178620fe550b851b659ef80928cee6f7d16ec9bc46eeac8a1325be49eaac3c8536331e68a80023445d0e8a5d3dd34022adadbafa7a682523cafdff5ecea3345debcd52549a70a9f0772a66a05029bbdae140b12a0874051afeddcec34d1cbee98e082cdacf9b2237b8048c1a7df2b52e24421dc22ef5000000b027c67aff8c2a5db78f2f489a8973feca18243739e85fcbadfc2c008880b6b9a92e546f8281a0a2afa5a2fe793a0b613d2a4a6016e81e86a2c005f6c7a4a2b85142d1bc38f694f696ef3560d49ac47e9333846ba47eb8e52bebec449fa9b76d736b4fde6b2100e8512cf28cd7018c9a8d0b02ac79cf51db70342f3c9cdb203f80e1653df2f04a1d2af79d784713e559e1022359ca21d0d35f27267c68e51bd6da538454bf0416cbeb6765ec7ffc1d9412000000b00cdaa48b191189f7b8c0dfe369d6cbaacec86ac511d60f061e79644bd117deab034b8b03e0c73271a0cb33a7c91ad66cdd98e95bcf5e70c05089269355f62068a665890f4c58979b4a6d2537397c7c6079e3e9fd03af7e7b90e82cc3c9eb38b8c48f828b04846cea7200b4c1727e1387127bac420b48b50b55e5926fdfff9daad5bd06d88de48d95a713928c448e05082c5e9c019a86430b48d2bd2f0c84a7f04c794ddd3ea8d954d0c90ca3a6d89a790000021c000000b0011bae6fb7bb3cfd88db7fd362b8cfa905579b22758b21f74cf865fd0763407643dd34ba545b1c6c155068ea6aa218a22ac6c58079a97a0d0f75e0f3194a4f7c87bf07f3075fa0766f15f68ed2cd4c058d0b2887e2d177e9ae997c3ebc7543f222510c989fde34f2b982fddb0b22313f04c22441b672b8b5fb06797d0fa070fbb696d9c93421fc86e41135413c862e22089757541222fad6291edf3921646ddd2ba037bd41799636b8defbf33a8eab05000000b01ee0ae273775c8a8ed666715a399c3d2191e7185be68cb7b6c62223981b1fa5a3217f77d50e5af6fae9def72f77918a7ea2a294973463442c74b87f6493c3df16c2b2c253e83f90db3551c30c7e60526e49612d03969afa3179619dcd5b4b029f3304d70c7457c615ff5907dd4155c490ac1c2e5e0ea63fe3f637b6d91409b4d4c2239b0eb948142ef1610bc95d6635529fd3eb232a9929593f303259b19922e2260421309f535f9fc48eae81e15558e000000b0061e4817c7f4b065e999e07908dfb6611419d34e7604591ed9f7c6b01f66efd665844bd1d9ca026b6c29cbbf9d89ffc57048fc59105ec7b1b410eded1f60e84a9e95e51d1fe344160251592f2e8c06261953ef93cdf1075d3e704e22fb47867130ed1114ef8710fd83cdf3fc683a3fc416788cc313428cdf229551a562d0f590875e7a8b3292cce57eb81d863690ff6809ae63831bf0a829d3161bd9968c872c86c6a23bfae0a4490a03bdf2a61002b10000021c000000b001d45f1058742f21eaa9dac0dda9b2e62680cb7b13dade281e2e7a7fd0925b8f5082bd0030a3e0674d3f54553ffc5d90ed09f924d1e76a5c8738d8fd9b96ee0ecbc59180d8b880717c9d8a0bf41a4ecf7f1ab6476c64c47253762f7925f1b911be501541ec53a45d275c935861ebcdb70e026840304e0d782d2dd5b2be6ff88dd2cc5344298c03d05c1cd0f4cacb5a441be31af2a5b10cac94e5e61cd508df578b926a3b1ac3cd210f03a5fd37aae352000000b022cec5f232dd9f54bd6e4a784f3d3cca2a2f8d5f630d289209dbe90f605a5a4ace90229bd08921eebe2cfba6e2a7657de572f1d8b56f0b964823500cfbc7baae150b6d7526c745b02330bf5e5c3fa51d43996171e8f796fedd9519999cf09744ec2020a9d8bfc8b56c1d5eb9f5f22889224224f17269c0535c79ce88830acf415f72391306109082a86e2af90bb0b9c5295e8d7825468fca4273212469c3d846acb5f4848eb68f11500210d755c4492d000000b015b504f459799e902fa91485d5f03a8bc049301a6fc35afc332b21d9cb61eb8d6df096858973687b93ba1327937a2324de3ac56f15606fa8c98b467cdf73c3cf43c84fe8ce37e28ccaad555ad6246c141560ba67066da4c5bdb9db31d25e51a3c551728e2c53d8bde27d37146d4a15ec1c143ee08290888c75bf9f8b65335646cf731ae68b39c518d38edc1c173f157108186249cdc7a9cf73dc829676e3a6cf2a2c49557b9e8c151f406c2d86e8c6e40000021c000000b01c914c0ec8e2cdfc01dd0127146ede083936cd3d447cf99a02e892ac9e36167b467a755052e871763f20df92a33f303e284b4594ab56714cfe3e62e316cb02c423fd031b2c9750fecd3467bf955dea41d0fd10a2958d47e1f50cf908ab99c4ed4bc05683505b0deb41ca73ba87e047c4125ef251364f02cb3a950555cc66dff7dcbd6b24a587b18797492b4b61a9c2371ea49b029956110458d28b5a8b9357f21dfbbbf7afdfc8bb3dec7587dee6c55a000000b00be48c34ac14fdfc0db7d4a1ac23485fbc9e580a4bc9d8d3ce711f849c12d8a301df241bb630277baf4b0b0e489768e72256e94ea77a97bd654f182db30c7621654b23fb5c96a13aa223d0a89aff2dc35a546434e78bed9030b9b78e454659afbcc39c7f9012f8357bdafb6e07aa346e165140fd869040b958baed64c14e67bc8a7dc570ceffb34e5cb52319b4e45cdf18a827721db2e277684a9e4a14ec92a91e474c162a5f57aa2b4a0d5da9bbfbe1000000b011e88cbaa60d49be19d3dd75c04ba520e6904bfebaf9fadb1dda0304dfc4e7458b17dac78709bc4e21d6633e8bfe2db4dc15219bde9550454b33e1c5f218eb56de3daf6aa25053041e1c0affc77179513763e273bda32661586a1194df5a14514d1c734e186c3cf58a29c097da67852e2facb38893db8955c138cd18d054adcd271b3a9f11f02c69a6f57c50ba2c58ee1df64214c2ee2051d86795a3839c815c27a18ac408f84bf22a3e01b3b4ea867e0000021c000000b01afe1947cdfcd7c2cb6337535aedc4cbf3fa8fcc282cdd8c1e38c485796ce0d46b417bce3204f634ac91ed575ce6bcd4b7aada6b6bbdbf3b0ed674208bb16907639db9742e56244a03c4c4a48ba50910bb2d8d8317ff48fcf736577002dd4ece0ba222031d17ae62c90dbe1e3e5901ac0a841a2da5274cd7beae80b7ebcc8f183920373f595b0bf6d5ec4ce1ecadb27f2eeb70fe02137898f7a2fe3a330f0dfd32c2fbb0d219bd431f86fe49459ca2a5000000b02abafcacff40ebfcf6be1d54326874fd9afa738865b88938fc003f30e62aaf72e01e5705595fe30c412a652ed8903da34aeb65c8dae3010210e68d416b8bb40cb6eb23827dfbd4d5c988a97003d0922c739921564391fbe593101ecb479e3aa8838bf6238a9821bab17da66169e506f228060da8bce67bfbef9737abe444ce47eb5e60198d1e31a761cbf669907a90671330ed0c8f65c01a6ffc33ef04d789386003b4f1274ee120afb980f6e9e0c47b000000b02ddbbbfbd3b967705c7d0a111c366214063cbe292cc8e792cc0118590cb97f93a2b59b26fc7b0d798530fd416a92336109f39d845de6912bea7d4d8ffc06ca4cc2a0c59856cc8b65821c08582d7326a8f22102c22555cd4b31a264a5c7532c6a66af7970a01c46de3d8774332463260c17adf46b4d3d409e3935c630656c501bf5eb7eb17387da5a84a17562cd1f73890d2b16ad76f4be39e07f2cd397e13fe7dc80bbd49bc191d940e3ad1ea54339d00000021c000000b010b6fdeeeb13c8ad9fe6d1962fe978c0ffe2d7aa298c371c4fe59b3fa76ce74ddb875f9422797065b0f9f5097b14362391d08fbc0b37761f33154d0b9ca534577cf77b1d7876d82a2e1c8fc0f265e7a77c1b12dca44ac1dc7a48c22caa91347f9886109a28e72f8f59a29c5ba1e9182b01316635684a261d4de31bbc2e76790f29793b30b13484bba532df1e90c7a6a314d2a8bbfcbcfe0fd753276fda1cc983d1b0fea04c375ef2ddf1b2876505fe6a000000b0095d9fdffc47da80b48c225396ed5339ab2842775b7d8a284c1ae636178dcd7d9b2c26f14cd8e34e4335fad9a45a7d9c804628b9755ddd0c7cda59d1bd5f27c2ef735c3cba890f5585eafff17d7ba34ef0eb96c4d809acd1b9238ebc355b2b933eff0fc10714831dd065ee5d72aa86051769c8a5696643571ca9f38fa0eff7445b71b795aec3406714a60d175ebeb6ee24e5a335dd4252efad035003070e4ff1961e5b9338aca22ddaf216ece52f5686000000b02def530ac9cd630cd09b253d59973bf6daadef0c339e62bee7d94b25a27a7b707d1b1ce00a1fb9885b4ad19a6b8ffc79d2dcf82a8d8c1f0538ea1ede865b63e374939080fec0a43ef497f57f0aa8b7660b46c3f73b89809a93569ad9b1b606cd15d462740cd47649d633a8542d7df376059e81b01aaa36e70eee6c626a75034adb91f4d24acf586825179ef8b187936103e394b00b8648ce75f9a2d798801836cb8c4d626e08fa11c908f507f954285f0000021c000000b01b7a7f2b7d159cc3119c8e8c8f4938c6cd66a3061e17736c5b32ca43b2f4fa3674e53d9059df73a65397c0b410b50471bcafd7156e7dfcedb0f349767221a94d45d378af594b039a219c2653c645fdb67da1289dae2092eeb4eb6f69003f9a151517b14e937b4c419f376d82ba24dfc60971e14a801c7fc2db2583bf799e365ec6acb229b4428b44040e18d77b4abad616b1d4d5fa00df660b7ee6227579efe7c867ef4ab461b08cafe3456b5965ac90000000b02ab464f4e0202a4b071667f48a277e01fd2f14f0a64d4f4de3dcbfd05d7535319e34020f40e8bc5fec5b339d4b9277e0cc0f34fe0c227de726a9de2c13ec1e88dfb585bd33f697f8e988240c9e57008249cb5ac79ce438d3e8ce19172f201fa2cc0805bebf6b5a91c56edc64359e52e52a826e945fd2f02b2dba41a2f4db3b750a8ee6b46aa1bbfb9d93e65fe2168d4d3033f87ab1d21dd82339b0f5caa972183aca2b5d48816af4907cbeeb8964924f000000b02c788f2028cf7c1dd1117ff99b2e219ae3d0bb5563842aa631c1bd9a294babda0ce424384c947dc8d671849de24e90ed135d1c010dad9c83ee23d541b03a10cc31f3ce770689c90513326fa9cb3d7fa31727cdae8b9aeb30522a9226ab89e4275925185bd5ca152aeb8ed09fb5bfb1672f7740a7d3470579beec43dfdcc9cba0bcd2b323c8f568983c5212ad9f247de41746d8eed0bcfdd7fb0abda598e96cabc6134c4bfffbb495d6f7c3b53ed4261500000c63000000710000002e02e9a38222f55bdb7b0b7014aea024becccf2e14511fe28479cf0366f5fbf682333a01a00000000660fc62fa98640000003b259336d641ce52e3351a7a55291ef8cfed9598237ce525bfc2ac14cbd8eb9c475b103fe60000001358d1a8d2022b2de4265acbddbc160f521feb1e00000133000000b007478c9981a0a50a30681c390cc166f1ad412d1716ad30be33e797ef95a0bc841e4f505900000088dbf2d4ea3dd4485f13c12863171110f8338914efc6fd96f32a69aefe1f3fa01c01daa2c4d03d2689552697e152bdd29228e55c6f295bbe7ed17d8d8b429a4b625cde8d0d05f8180bceb0fc95f21f27c520ceee25bb01304842f49df0eda7170f621182e5fc38917b13fead08f7908867aa25071f0a7f05e75c4b809cf9fb85d470e13b06f9beb6ec0000007b134152fbbe25255f4da961b4a866aa377e73b406cdd9b7a90ed03f7500fb429dd89734b9000000533c149d34288f33e6b93b8067a3f27cf4eba9a876799a557c8928f7d4fc95bc02c268e18297981f6e7d7649c90f33f49ee41588f2c0322a3cc1d68f4b472905a6c6afb325b826254d256f960bfd04d93fbb5e9500000198000000a202674fa1e4d3fbe8b365900c3d07717929bafdd52ddd8c0db0a4f5c1556033303c3d76ff0000007a727a979b92cdcc23703a319cb4fa43ed7fb8ed12f7884f064e85a69061387e120270497544b346805ebf67c87860e083f03f1c793ba908c8e9402e8796927dd9393bdf8bccc201e1ac6c0e3731880864da3bb0342eae899325859bc7d99a556de71883f30970bb98719f71b969d10b7a7e93a80b151acfeea79f000000ee26aa00a2b83ee15f9024dd20b9609d24ab7870183d433b1c03874ab01566983fc91d0720000000c678594631f20fd8de1d7eec8c5ce646d3ebdcccb4eae40a24531f2e3a0fc511c5191927cb188d0a237330d7ff68c8a5705a754cb35c0d4ca84d4ee42ea56fbbd327c373a5e5ee440ac5bf9f41915d24680cd64d19ce0a66f117bb18a1dec67da31ac129b8e0d6b5d030e6972bb25c6d73dba973f820a8e8fd2b233e2a3a986f3955ff402edc78ee7ab71ca98e1ed89f5a69de22b0b50c89de9360e16c4fc5678abd8bc7933c8f12a48f69f82206d455eb6efd24eb4284a91d650956b6999d6399af4c9a04a33e000000ab0000002f0bbbd9d697a518b6b41c71ba260567456fa2f9ede24e764dd1f925a95cb2489f3c5baaf10000000705784e8e81c662000000740fcf1c8e42ac301ce684fc83955ccc2168041063917af001def6515e254c1a3bd0ef005a0000004c815375aa21fc76eba97bee9c23aa533be5fd661b7558107861dc9556ce5393a123afe9fec446526e138b973d35bf10829731495e771890c645a056c71aaef53fb5048389e8211469560e7e47000000ea000000790f0658da94642f9909e9a4d230d9dca505174736fc1e222b7fddf3c1b99a0ffeeede1366000000515b738c8d2e18535b6c0ec271b5ffcdf75155e23f7493fb974ecd1090e726b16487d3ee9da7232b2ac6f3be7506efabb8280e0e6be87e4eb420f1218a5f916eef05429ad1686223d564506b377ffce770b9000000692d52199dfdbfa3657cb6d7495d49665b93b25e421f288718b6a75cf79526f43bcde98563000000416f4d1c177577514884b130656fcfa0b9cba7ff70144736cb0a07d50c31f7591fc176cbab401e458f3d1d458c536830930aadf56219306e9373add19d744d4071a700000144000001041f669a4d4e954172f8a234620c5f4a56c864c8112129bd8ec6ec72680e10afb8ebec1679000000dc06c6c3d8d31c4a99cae61147bee32ea5f6f6000c770fc3c216025110128bf1db4f687da16bdbf51d39fd41466b71ae9f34d90e64b4fd9b58e493064f6392ba13d8cd2a5756ed5ea9c3429d9e52df2eb9a8f8442cbbdd24242e911aee08f9fd6f4f9d29a7b449e756f41f454af2bda0de7e729f23ef37e05ba6dc7b5dba86928175a6c0d99003676edc5b203a9dda35730572856ecb0fd3b4cfb8a261481d3a2393f7d095daccaad64ae2a11dbec3dfa591fe7b42c9ff772a2a0926c39997c65a8f0850f6ff2d42ce6ae32a087c52be43887845fa0755524cd87f943d0000003812fd2cdb5dd071b35458fd74c92259bd4486c1ca05b74d255ce0a9366f8b57346ae02c8c00000010f1c3d37eaafbf812030ded5e81050842000000b70000004c2d9005c63d3194b746a1d04c2bab984198af68886ca7b49e919ee247e27639d03be832490000002431e2f7c0865f02dca35bbb7ac03a6d4540e438697ec035ce537c4e514d99ce089a31beb6000000630951c28c5f8346ed54fbd11303717338e3d32a4e6bbd88f4def2020e5f66ec4f139bb0860000003b08d890c0ab9f0ccf404a6a838187a7a6e9d6027d71fbc3ba4f91875dfacdd88f8d9297fbe039e35d98bbc9accd931ac98e13d761359f262447b922000000ce0000003823c8401d00a2f2331bcde4782db4b43e23baf1df3748d939648e40fbae7dbcaf8d12c3f00000001052ecdc4e1b594d7f56be04163fbebbab0000008e1f9971238e0252236b481fb52eb42d90f0feb856bd9a32b3bf1bd7f8dc3f9cdf317b11ed00000066460dd69fe83c13dd8677da67518907220f10fdc1b8f20dd2041cfddb175eb626854c14c20d03dbc9e67e337f477f0c9b559c6c12b00ce915855fd146010bd146fda4988605897269d99a19674908ef987e1bdb04a388873d7e2d5b1db8d5cd08cb34a9f8ca0500000212000001220a5a9672500ab8543d0c4f4b493eaff6b41def5dbf9b530256f0415f72aab7d66a3a0625000000fa24a34d3483892ad223e45cd4423a0ba920a6eae0e00fa8a2a3e4c7c6bee1841e8b757fff333a22aecb1fe4cf919a59458c38b80f073d5082bf4a30cb80713d76cc1868e4919cfed2dee86b70380ab25daa3c5afc1d4218dd984284b9fb597a6b7f81a27fa9677be2c9f176c0ab54a7ab82d60b3bf3fd81804defa90e4566d8fe5168367627a1f7a0673b4abe4b7b6be6b90603c7148824cb38231d2e8c336b6d113c8b6a2ffc89ba46716671df6183acd0c266715d7b90ec5efec6f7b805205f0ddc48124029a699d77481f9f8441ac608cfc32ad54d963f483c8fb13336d889c77f2322352379082bb82913fc2e5ccb03d1881159a70b7a9acb000000e824bbd75b9d39c4bb037a14b4fe3ccd1db2cdf7e1c5308f0306a1be897e1822e8239c60cb000000c00004ebef9596822fa1898a90a6d5b794958f2f701d6e8d1ad0dd5d5a37a4307ab7c17398d583cb86f292d4778f3136e62450c900a1c9d22cb2d289b79ed06ec50973a3fc3f2acfda3c0b35635dc85543ba48b77ac5893392002eef5c78ead7edeb5a5acae696cd9011e1abd1adc1c3356bda710a1e839cfc47aba030139be9016af925a550dd1ed705477bb72958b7415bbb7bf7d1abcffc2e91d28ccb5be9f72b045665266f91cff5cd16fb2e5151569223fb4d8b59c503f8a6362281c702f6000000ed0000009629288e63eea9ecd78a34f74abde0a8e3f1cdab7a19e0ec1f5d19675ecf350b7a5852a9320000006e35b3eb22ab7820d19200519558fadd1e6d1a6160b329b1a07caf13ce3f35ff834cf4b5de7761651c3ef9ccae55475c26e5ec09cf41bb20ff3a742836c5a8013ca602a70d95c92bf7117b72fdc0bebb0961d2571faa15b7e5abeaebf4e1530cb3492b707afa36759c4bb90adc538c0000004f12efd4e10f217294d1a4185c2387aee5a129e50e3610d088788bff76bfa9eedd261bb2200000002775f6845effeb33adaba3d28dbae72d58453255b2709bec3c317413ed7f801894e46e930f1b99610000019e0000011b0d30f786bb0431b8a611fcf2c221cda56c67c469a7f1f5ccfbc797dbd0557c53ba61b087000000f3138661fdda3c31c2f365403249ccbad7c169fbd70d88f78b08a29966aab0e70dd5937e3153ef81870162dec1eac9b0841e80000e6d9141db44e0aa2b3c88836a2c726b1eec34373aaf9410d01885e11104ff51dc2155298f26c961e4c30aaae2b1774a140edb13b05c76958dcbbd2efac386b26e77435c1d04b97571bf9074dcce5a9d83e16b121a3eb1760d5910958a6426c0b85e82c2a6b503585302bb75cbb46decb5af9222173622115ce2dc5044f87f0979d785d23a1b5a5b4e18e9f9cbc9824f79cf20f80d7b738b767841f0a9733b7eb7b651fc5dbc34cba5fe57c20ec78e0c0b2a78170dad721a81e65bf9e9fd046f0000007b2cbaef9c64f74db0f7e5a4b053ce06d6b5a44dc25fec6f463b76e2b6c2ec84addc3b6f540000005340c694f07f694292a246f028db7d5e459afcaabc4a70181c11a450b8a03dcca236d7966ec706cebc8997d8b1ee66c0161056247d026f0d48d4762f5e6483bafc585e57e2b097ff21778bd90ae5c44aa9e055ef00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b02c20d5d785915076552446a7b2ba4a51540b6cc93f1f4bd81707710f00565f0c5b7e655410cb5578e88e038010bdb5a164d086302416c158b2a92326a496e145b39217fae600b037a5e55f207bfb5a92537e53c1617edb1d25e01fa56fd3cd577dc4487e03678b351bd696359e9230f60b289b873fd3e2324be1ab3a1c56cbf343e2c6f257919e418e19c87c333385661e4b726c4a1e6a96315d6a80995651af726067a73927d051693cd523f68c66a5000000b017e5ce7112371a4cfd59ba1c31ab0caac3f5fee0d2e35d8a38b82d53dae9327bdd932c355840c996a6528517371be08c234bf598ec50e09060c0f79f988ad39232cbab93c6a6483d155da589e1c4d53f7b5519f38d20ff8e753aaf46944aca84fa7c642e9105107d7d3c2b2b7969ad182522dffc3bd2649355c87493d8fd0bcfd34f97211583365135a035f087d946bf26670b1df3fe5d49c6415587a1d3c22d694da26b900d5b3be938e16722cc4b85000000b02c7499bd7e885db02018d485316b95c472c4df9058e5e2d0fbb6321d447a8664844a12fe52b518d43f26d331b8b8248bea0435cc7b2f25d8d3ccbd49e3a76528937365428b1f994ac96f1dab1d0d4dfc98bb5cad0e69f02379e2e42c5837b0fc98a2fca499a3f00a5f4a17f7c68ab8ff2066ee8c6dfba341f6fa2fa3e250d32b42e3009e3eb006443b575d61c82a55820b7cbefe0511794ca79af1dd8e82951af5ac785813e30db9f95d533246dd78a70000021c000000b01a254cdc0a562892b40a34628a34fa138cc14e299ba92a182c4193888b8af6ea4d9f489f32cb24e5e3db017874825b5c2039b09393b20309706cead03976c3ef2d1f1017c7d0a1482c89b65540676d433f4e73edb5dc29ef8f0c6b958b43d7afd9e0f8f885a267bd3ad3640ee5c5d7292e59e6b875c32a28dc5b3efbad6b3e1ca86bd90f56a33bd08a2ab1f9e579e2460dd8ef584522ef624320bad566be667307a8a9f11261b6d3f93c88a6949e722c000000b006d23ce4e8480a204d9f8c94b85eb918a1c1c8919b80bc60895c2625a0ded8b11093017458b1dae70b8b9900565eb5759d2b3302794b20b4849ca2c51d09eade6236635137ce78b13c0432a26b3900d795d21626fa05fac6cc56cd703598e238a30f93c5ffe08a0d9afca15307003ca807d4ca00653f33c2b30f6c1c8cf3b7df58372fec3462d9078c52d9180b8246f12348ecd84a41a5c6219579cd920e7ee2a4eaf208de13e115ba3374f1581181a1000000b01905e6d6f9c014ec10303cef2ebe54f1b2dd89f37be33c0ae2d5dbae9498c1a4f3c0538d1c6170d6a416d7b492bef9da1768aa93286af2335bd040c53ff2035b00966cbb336464e57a817e3439d08f42cc17455ed785f5ea6615f93551cd7b2c07b8c06552e1538cd10b6cc36f6c869022efb8fa4081806e94f960b3fdacf91592790cf56463ec679d16b83806fff4d00dc8f7441371a11e21b70d425383c8a3ee6e0831172440af340dadf14afc14920000021c000000b02130c08b612afca113a365365af152fedca7fae2ffc822570e5b0645c9c985a35735d94e26db3865d2b02be3071635591093ecfd5406290a0af6b411c41a982b4a92c75ca2b33ffd1ec1e67c382ea6049f7992ef1a67494dae1604b906baf5145f4972f9815d4f41d452182a3588d9a724cdc53d56256c144705d86f9f81e40beecb47c878ec9f14afd73964cf5e379007e46e774bc526b3d0c943e5a00ba437460583fb8bf9631ecda37eb63a085c97000000b02601fbaddae05d62767b2cff321815aba41ccf20b27af7afce1eb956cdca3dd888d9fdc6806428b6c20cb2a4e10ad5b6334a7a8a544e824e74e0607ad9685ff417d1625ab00e4e27d5fbfc0f4b447cdb3c23e753bd8939a46e14356563cbf8deb5ac55a2b3f1b3c13fe5c66e4e946daa09219b829f8567ad288bf3f4c816e7e66f0c8d9c1c970bf43d9e42f4130a9a8a21282be52136f37bb599431930b4af08fe1bff9046e058441e7b8b0aabdf47a0000000b01b74d43b06c19465b3bc43b4fc597d52b1da40f1ea91173b1130070693705221d9f221f5cf20ccfbcaab553e06ebe51e9801440bc58442f68b20b6431b2af01bad20e906002bd8c5d31dc6e5566ad957a6fbb06929acdd34f8362d092cd91f1756449436bf48c0a9c38324868cb4bcf92c09cc047e83e8f295b2c6db49a464282792f6ca9be875215c14a1a4ba5a635717cd0040f152af196e7b65ad49ac844afc7a36b17578d0ef6023a87dc310d3e60000021c000000b00187837b26140d29fc0683a431a02c454d0abc9413b2e93e7550c5ca684969a58320fc2a41f119a988db4c9d9a5b20c3e6690708c64a7026536b7486319436353550278c11f80efd7042f78e9c339cceb04ac3733dbc82930eba121128485bdc812cd0b03d66f9d94d6aa1ca9f2d1931171a4235a0a11f3c89a6ffb22c6ab0d93eff1e96f832bfba000b7ed984317f1a16c5970009e744dd6ce49caf17b24640ad5b8359aca79c3e4bb811da156c153f000000b00afa0901d3cddbbcf8940a9c67c6fe2a94856bd7ed8409e5fdcbbc10b7837d1c3f0f34f9c116dbc5a2fb4049c983055ed9d00821e0e4ab871d4e43100d2f85e3474e37d8bdb2531543e640f097945d3c3174a3b621040f758cf7871690de38b8633edb9cd91b22ff8af4d0ad51dbf8022634ecef0c2ae27bf5cc16433da07b590a7c57bf390f246446bd285db11f4d7207c1065f21e630c1b25b1e968d188ea251f686c02a9912b36888ddc04c3aaa97000000b01c24511b3cb146c919c803ae43592ad40155f19e952765e89567b90792d0c95e01107c6552ba8a0c9060856f4adb0217d59a9f06154356a71a3fbc1a083cfe14e228be350b3dfa82708b4c293b455719c0363bd9ea718f3cab063ccadeeeb45aaae299957b1e0c53b0ec667b5d7bc8b8028310db19e38385e69fb4ca34607a1c94f828cb24959e88b5d16653a12c8dbe11055ca102b6d81b9c6ab61a192a03bb78fc01aeb0ce2302813f5044ddde86b70000021c000000b01ee203147502678073df7000752515c0ef0a4e54f3987d77f71dfcad4bfa32c033da91255a0a7c97a90044d3d1c9a9d701fc3446e047ecfc32ac91795619e838f52ee2c9353d1cfa13c2c084147fdd9ea205f145c1469c7592e8e1fa9dff0767aa116e0867fa553bf819bfdd045d2989083353f6eeeddddf6d84042c9272265ebbb0a9c8c224902dac8dcfc48a47b6711afbe17b99ac34ccf90bac035ee1f4e9b1c864cbf780ca02c41e40662632c5e6000000b015eefb047392b5eda0caf483f74badde59b26053489d27d60a23629a3f58ea5e6497dd1a9ac3f9cf57d3ec1aff3eb8023815abd05507ef00bbbd6f5a82b8695335a9c11cf6fa8a359130bb3f35154eb225c577a30205223eded6a076cc560ee3bcea184594db092a8f9f1b4a89bed3160d31eb0f663a331f8ddd11d5486fd505f5f855686fbcc3cf09bfde03f403deca0c52d508804e73330fa5439da62eacc0ed58bf767bf3c02193a2e57b7f8e0703000000b027f34eef608a79dff204ae2a2125361d5b8845ab52a27a7172ae6d1a5dc4c70ff69ba75d659f3480d107b3c256ca6a668ad7854f4785827770660010c622e23a8453b69332737d13fc5c0c6de744953e59d706fad7bd61b2624607eaa3188125ed9a0b379dd17a785d3636e57dfe290b04a543ba4960d2650f772f7ea085e2e6fc01ec5c1c54d80d7f31d963fabf42d32402ff119d300a40f4149fff6e80e0f4048a715d7f3441294a7858f13f5025a40000021c000000b025551ad5a5f2aacfa78b71e36bdd743a55af2f02448b81115757a25539feb9671ce8e6dd557a534129ecf18ea7d1a69f559c966efaeb83e64d0b18bde13160e2736176f0354657c37d0f6060af0b919b946c3d9e9807e1b779469e5c478ed02b25d285cfd351620c12948ddbc25e20c81e4732dfed67ca4ae414834e4c6a2f3fe28acbe05f3fda0b809ffc1eaec703d2141f0632dec5f58deee971554789de2d540ce0369127bd5b02c311b56dc6e818000000b02dc0a0e5d43d2fdf1c9e45d3cd917b6fb6d84fa2d8959fe0f76293801a83562844f1322721c9a9b603d936900bf6f7af3d045491bf1373f60a30f2744b5c750d930d642ec2acf7474e96f3b4f2f963b08a56af6fcb594ea3a2bde7b4644115865a34d286172a3268c57299ee25f8e4931c5add5f9c9c0e349ea3d62a2c7cb1a48b6bca5f7f52d4521d7c381eaf621bbf21b90eecdc37300a648c6fa8f492711de27ecd1f190ded175533363255298442000000b016d795b4a213d70088223ccaafbd93589001500f5b1daf0c086139feb7a09df3d5fc76725109062a2550241fedd5e55ce6d1b364f4addbc7eb00f4a2d202a4f1372af2db6c4add5e9a3f86318a9c08d9206f96d530b322feb6e3e4880da892bf4c9b8fba08d424a25156b6c22acfa8cc258545913fc6edfafb1e17bc2b2158ec90dbbb7deb90c596a7e0725402364e7501e343416a990dc074e61da5d5c0d7097e4a87b78c83c9530953dd1255688db10000021c000000b0193ef73ba8a853170a0c1b78e4a5ad935674b08a72b31da120cd48428b42baae610222970f7c49db7df332f291497499b39316180468a005cd2ba342dac58b8df7ded6a187b97c993298476950413ca506ee9c17e756b4466f05b6ff99280aee87ac8af4722cc491b6d2f2d009de55af06034a393ea93920290785dd434be0bffc6b7ce6d93135da0cf5bfc2b158ca91097497a8028042176627c9ae48604ba65264683fbd1987771c260ce59ea0fccc000000b003d268b85f0e2ff66c216f22671dde3778cefd192acf90b7a23e307a7750a93c6a81bef8272dd747ed3a7293f2b0ce77d76eb10d9b64a336c810047a37e7985e96f3d7b87b2fe47cd1ff980cc73dcb6910a15fce1c119ad93ec039ca45d63ae8cf3e57f8adef2750c90977cb90167365213c82297321d980966d3a71ba5fbf620b88085caccd14e91182a4ab98c7a13d03f073fec6cb3dcdbdb52bbcc14084571913f460f613f06f34c926467588c027000000b02859ff4d974ae26bce03e6281e722a1da06f53cc2b70cbbd4c6b4c724194cb04fe4de246bbbe0ccf932017647d9f30e7601542ca6c94fd8426b26abe4e60a73a0bf87ce9b8b20103913acfafcb0d22d17abe7f0ab2beac87cad9622d0a7026fa4399ec58d4dbd911c079d0cec5138b7507ac72aeed6de9b2b2fd7493140edab9b9c65ed817aa718f604d1d5ed9bbe8f616e7392647e94fd05fed70ee9ebb44f39f4a53cfb674c6a3cb85738787ee13cf0000021c000000b00fde4fe01016059e1c78894ddd1fe79a24ec015fad1ecbab5cef0e44eec97ccf4960547f41b8488f7acd9be1fb56735d27835e9b6803eb10c25017c6f152da380923c0e2eaea312baf422fd5b1b073eb246b93932b77738bdb479fbfa14612c9bc352761014e40f4cd8b28540a8f0ed0203ebafb4a1ba98997df3f7f443aca92302cf45132bf42d602634d99fed55cd60b0cfcfc4d7de8f6f1a3326aaa539acfc35f363ae1c1ae9c2f16a9ae0b153a6b000000b023e62326c2c527686bf06aecc6e35a8593fbdc6522b663debddafe7e198c06e3d8ead6763f7565e6c8ae93d8f432a7ac8db7a9583de797de997c209b91c14ebf5076ba37ad28d2c7e2333d8ed485d7a8e9c5e00118984c74bef31e449c58603180481e18e1b5eaced9cc74ffd3df9a861a223306cfbbef990a328672d1aa056a65c4d2676b28d998a96799fec9d2a93b150534e7ff1362bdecfe6e7e47b32bb7b674663b7dbcbe10f20fe38c0e40d931000000b02941833d5b28e027138131f03bffdb52ef113e48d5cb102fc8d2ee2526526c22e73d0dcc46aa722ecdd616ca5ff647b01d502ca5010f097bb883e3a9a2863b2fe6c3de9511012ca2cbd3f0e61e8a70bab220f575b9fbc8faa0b7aa980de9dd7d8a3310365c50ea42715ed4275fd64be71780dc61e88083f027882f0ecbd2b0eb852af9201e7b111863b37f7c3e1d38042846ef9f654c60752dc91337cbd9b4bfd41c542b9fd4a78522abeb0093173d2900000df80000013c000000731db0b1b2d155cd230a5142ecf8d49d39d84df3430762ea2a03e32657e958003cbd8518a50000004b78d6fb9007bc2a825a64007aa9ea62393ea4f5e65667f2e25a2781677eb8c19378abc5ef1d6976473468168eb82460f584073fea528f8079aebad59f63caf0b87006a64f00a873ac3b1ec9000000c11e6aa9065f0b5b79ba187862257ae2f6e0b430904b7730bb64c423ec4e54580ace3c2f68000000992464542f7e9f7efdb26e7bace95dadb17a6bc35eaef60d54e6a60ce766a152d02430f4d1edb368e9df41787919b4e0bccf06cd93128a74cf4133d8997d6f8f077718fd20097fede2b0c4da39ac37213b6218c5417abbc999d6045c24c2f8000e386d5428c7b54d50f66600660fa43f8fac4f09d0cdc36f87c80f7686ab35cfff40c2b8eb53d5402ea28d2101854f55f990081c9fac44303fa0000000fe0000006a05170b24e89ce36877dfc248cf1fd1e39fa4a07f05fbdc7030f8244cad6ef492df9b7d7500000042012a4b4f8beabe2c6168eb45ef0e8aa3fd65606e76f0a636462f7ae2962a0ba88ea70314210247149030b4b08f26b28bd47bd3b6fcc106cc6f79a1c3d285bdd052b90000008c037964d2acf5a528b9cb4c1c10dfa59f63cbcb30330fbad9b53eb7dd86d9f2293d754b4a000000642116b7bd6c7ab869971f219507d66e13d8268ed79cba6917036eb922a45ef0d4a9f77cb174c00ce5b27afa891d83fa7a6030c55fec8be0166dfbd48e6ba7881d693e54595cb3fdd04f0bbc2cca8c2e9256c005851265c0d8890c4044d535521d4a219e540000016a000000b225e965912227f217e182bbe9205f242c540bc7b47f065284586e4619401fea1148bc93d50000008a392837184e90e5678c29c0df5eba809a02f08a7241395a9be39192f029f5ac126c90fdcf7627fbdf7c5742d664d4479a8bc0d3206aff684e3bedf859220172d86e2dd0be10e6b145b2248a5a8f96ffe601b8950b74aae3b15217796a30f47b0bdecc506c8838924a6803d46f5a9ee0beac4d0d683b75335208e5a34202240fa21d04a9ee51d6121d2c26000000b00509173a1c32f4a0c7f1f136d1a9e29cf00612f458acc2a8ae904f2d209d511f549419da0000008802cc6d37357178f731c37dceb75ab6e2efbb4b956b1f466d7424158c8b0812f3f8216d68eaae38a6445b414fd32d683fb999c39e768f4f64d79567f7ff7715049e83404e860fbc1bb3b3d30f246a3d4a616fd42f8866b771ada7407e05ea77cf9c0d0af8b7a80d4a973dbb8b0596a4512c45d54fab63fcff4fd03bba06ca5e36abf19e7ec8b787c0000001590000003023eb0da74ea577471a10b925cd2943b9636c89fab5f2823c4e69481a2c702c13e49ffe420000000803160c0f401019ac0000012119cb12fa8408e77a4ec6ac8b19802c8bdb739cddcf4e4669b7a91d733685fa7fcad4f5f4000000f9d6eed8646a26472e59861cea1e33e44f23193b7597ed73a7c5be8e35aa8971b9204712512f644cf944994317f5feaf52b3af9a6376ef09747ce50aef463c07130bbf5b46fc518f04c47b96ab4a1ba5ec8c196673193a4399b907a3c7ad01569798a7242a84537e2c7b93eb0f52f7cbd1a5112e1cab6845d86c6581cff00143aad5549327b7302bdff41a8b614bd09fa56bd3179135fa1615b535ec40b6bb750eeb77bf8da92ce3c3bb2bced778e3d17777f9ce587b08c2fc075a155a122081e6d485512de93cf7bbbdb9a6e23e3d0f982538f163bc93f32a8255c2796f9379d42d4e9c7a25ce71b7341d16e717f85795f028454fef285718980000016e0000006029ec8567ebceeb032457d8a057d539b25bda41089d322541c249d586a6f4e4a782f5051200000038b94355e0a40dde1f0e98498a6bc89e567309bc151f605ae8385661bdf09d1ca0a17305dabb33792ab3655945d5712c6d373a8bce9c8afccd000001060cbdf5503bcb2efdf2a72dab7aa11cf98297c7d180f36a0b03590923861d1021a2d3b1f1000000de455daa0ebee4a12d08c354f41735b3109dd270bdc69e224dfa16717bc48f1e2cb725bd9c195925b24e2889b85e4d89d2940758b17ca55c0db7a322d10ea8c933b7a26722d6830d1629148573fc7c0698d46c410775d6be408f6ee97a137695dbd778978bcbb0af307b2b7891824330c2c691e0c618aab8507c377c8f1e6ca06b8ec7f67e35203d581e1a5e304dd4772399fabbd306f193418921a2fcdbe7c3009e293320ab2c2620f94b790ed714fbb2baa74d6dbcbc3fb9eb817124ff90f202276abbb1bc48436500bf4eb328eeae99b4f8c0b4fb9f387c67369e242704000000f1000000441c36c84ccdac199be340728250f17334dc94752a03f80be5b2bdbc0842e254dc7d9a04280000001c3b9c2ef64877a5dc4683ab7087c7124da5ea02ee191f943e1d6b60f5000000a509eafa8e0e94cd3d956d4c3aa2e1feda0aadb73d8b7a017c51cd4c0ed8b75dbf2ec200a30000007db718e6e5bd0f02626df33eea5a3d26d92db3c210c12b433d4c60a2162da3dea3d4d46e22eea866b173b4375eb0cfe5a1c6ed4611d26d65864fbd84b7109d005a607154c585ed1d2881f84adea4ab4120b1335192d8c3f06280b573f85c756b0ce84e3783d1e637dd6fd177ad0dea0cdf2e71216731ab8897731292451600000190000000cc13b73d6292dd8682d0aa57bab042771a55bf13a9f31469e28919d75637b44da1a07feb2c000000a430416808100977e80f84c4bbc51e5243d65a1bedb2fc971d1f00519aa5ce40b8d42d386f55665c6fd525253fbb2857ef6aa90161e124f657af874601079b0dcf4f9f7e076ca5028430ef38eff24e59cb130ff59d6fe84fac85d2f93cec9e2ec2f882d569280e64816e60ed15009b31043b46384b73a5df53298ed58b9caebf0050bf2af6fc572447ad636a3bf53613f6b2863108a8669d4187e209f72724a6e743fa3cad000000bc0dee4c76743a23b76001e13836e1f993a4d9dcff40d8393f576eb0061e7639467c0a4c120000009464daf4db247f8c33c4ed3d69545e253ec008a6a2d14bfb96169922305d8a0585213fc0837ee377b32cfbd7b55fc0dfdde73ad2c80fffdb423e8d08b6071e49bda984eba6296a53f229b649400712ca1c4dd5a6e9706de1e92f931c30c2f678cf99e179882f17891eccfcf9e0cedd1ad0ea393ab0d3d1e3863ee07c245840fab8bb17be62e3510ed20d36efa19c8aad8ec55f4206000001d600000119063755054d81d841075859da0b50cfdd00b34e314412d4d31d764fe844164f9f6768edec000000f111fad2a256a392fa15bf3d3738e8c4411460e8a515ccc4404a98c63480a7edaedeb4e15d4fc4ecf799705c3d3351ba2c2206be4ca1130780b3e9de6df4330ea28be39154a2176a979b9cc1304151afb81c27a02dd544d175466f63caec1111dad5f7f8a556b2a7ebd63236dbd69f8a9b3113e67513a4d4422d821968cbcd82efe28b74cfd3220d49db2762ca25f32062ab661e8b316ccdf121689ff9fd0f36fcfdf1f7977e387127168452de132e00770c4e00a169f46c2c975e7a92d76f3304696498efd754b07cbf6d1b5ef74cda7ddd13852241654ecddf561b5b893e61003ccb330cee6978deccae50457e3cd91683000000b51b8f4fc8b18cc1e110337f0efd56ffb0efffec267d286828aad4c7ffb03b0e196ffb7cf30000008dc6200f86168edf44b2792734b9cc54323f5b6a00ae24a1322eb3a7a77c9f7037621ce393d07868bf617eb74cc85aec692c788bd84780aaf0a77aea4b0395a86fa199dc0431354692d92348bca337d137004968d7306d548186e11c5578ea743ad5e2e5ece12807a166422a90bbd2d5dae71641f9f889125f36003211b23d93cf8f5a298a7bec53ebb60a3c3fce00000108000000d0182923df4cec1a752362ee330d73e1af8d9bad164cdff69703a1751fdae31762c8d758e3000000a823f9d61e0c5693f862bf3dab31abfe0bd90ccc4e403a31acf0f0b4d67985a8cfab22d3af87b500c9e96c5fa8c49dabcf7b975250980f8386b12cf3fd4510f5a6ba94c0c55311bb119a471037793d534c1a8e89fc6afcc06b079065efc65c0a4bfb16796a1fdd54bceacdf79355654d2a143d7e02a612eded5f9f3afa72d7bf4a8b007ead22a3f9a304309eac05f0dd58bdf92ef545dfa4d5cb273e477fffda2a32d7f6e0f73bfc180000003017ac6f169aa0a822270b188d76927fbcfd332ede3aaaf9ced702fac5be2db650d456651600000008a59b27e24b61a6eb00000152000000751071d49517fddff0d7f7904cdbdb2b0c96281da2d88cb1e7a9bbf6d9689d93e6ddac68a50000004d76e8b338117efb2f76c98cc00a612e4e61481a6ac5021f273ac96ccc18f4aa6b26a687b9efa63846b986637860f702b8d7c8406bb725c9533224da9da850e8db2e4b9c1b9e07031423f4b06fc0000000d519ce5e05c6c2fda766c380b92cbaa518e05087cdf83d694f478e7b212f4ac0cf49e1f3e2000000ad46bb1fffe7fb7714275a340d5cef359c994c6321299bd525fd95adc4ea15c14f80e01a53013ffb39089a6b6f5f64b29e1c80293d1ff5aed7173bd8b7626f513e6efb2ff6ee9d01987e100263ca8cf3b7f2f3d6630387957029cf31d41a9f530e9d7a69cd952f46b133e1d07e8087c5d320c553968cada4a1c042c9cea7db484e046595de10982751c2adccbed30e97682e3dbcc941fcdd466846878ee533731f2f402dde2bac1c907d461e749a000000b0000000321c50ddd4b60a6d02f440f0b503bdd22a8a00c6177bb56fc078c9d3ef6f27c17855c5c6690000000a7d6d00fb863606ca5f55000000761239e92d9801c8058efc4fe066f8c036caa530076fb1d847aee25bca8319a0de4f5410450000004e906ff6bfdab8bb353cbd9039fa0cc0f9dfe7ccd151e267139b6d7cd3b3f112a742ea17f7d1e0e382dd92e5f0b46ed605422de7a6f823c2c8614ba5428632e0fa7f05545179ffae6622cbe5d10e14003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014fdd2cbb10739c20c2925482aea56191f19e821390fd434083e83d15f7de47ee7944ed5ab1f101999c2b8035bb331bdc056109692ab933d96105beac16fcdbda281912ec98016754ad7bf962a6e65174059d81d574054b735ef54c68738a230820cb3f295d91c99ee196bd7c53902821584a4e46bb517f7634cba11776617fd66a5e4d4e552b2bdc42a18d40088053301d9dd9bc2e465f87e4603136caac7771f3c9a6586269d30c61e531d34cdb220000000b02b0e093c9b39a2ac1bee51876c77a0d3bf3741d39034bba7cdb357b87aa24f16aa9f6f5cdd8620e136d065f878597fdbe03254f95607ecef1b18a5440b11ebbe0068e9605a53937275d5c63e1844550b5391b1e965691c485a3c8f3ef1bb324a18aa8691ae2d9bd02ce4446d047c63c314daec1b4af6ab61774f4c5c98bda4a1dc74bb43b996b921fe11af9eeaf23e45030d21f5f36f802048b0f07c0c2fbcbeee28208b89773e8700b075d066e79977000000b01d1e562b5d6c89c542ec19485a94729c3a04d84f505de762a542dd650d80fbf87c04b53f95c736ec6b7da8c58415cc98d1c47cfa7bde48a1e6193862ec6e5f238ba35c677cf229fe6608a9021707d21a260dfb582746a600a3ad389ac03fb9b0563042d115e590e763197e37533c7851057d73c03f5802ccc68624acf7dc97f4e45c5606d95d568fb82d8e18af760875002d9b50bd75864ade12b204397bd7b9d9d68d3a2b667e83d6e5a757ea4951160000021c000000b02431601a9fe32bbfd1cd2e3707ebd754cca72ebb79fb49ff705c0ebccf13c8c35796a8d462f94338e3b9b78d275698b5ba0308085f3075ab678b0a6d5782a5622ddb96a2b470ba2d33c09503401d46dfd13ff179190ba8183a759bb9bfde0986bea56527833d2919e13d2d82bc416555099715b44d7198a925d74e2093dd4c4ace4fd64f3cc541c9069043d84dc79ad21adc8a4359bd0ed4eccfc2ebbf34f1bfa55135bd3a36414b791d3470481e5bfa000000b0224115f75b8a729ee2ab0568d1ced4eddff698359adf4d0a301caf21d1fd747bfc12cddb0c8cbc9d8e43039b20c55ddddac6915d56418537e6037a9d23b7e352a01f65c3e3b658e3067fbc48cc57b502fa3cda8a0720787b1c54f665844d0fa1fc7f41ffc3cff32c63fa2ee2131024882032519ec00c222c28719b5c6671e4f9dd8dcc85b859b9fc56268aa657278cf6118827867db047cb625a1dd5f0f0f4f3716531190fc4dc5b1f8b4f8a1e44cc0b000000b00043a6c7cdc1ca7e814c504ef67597ef2cbce165ac226d9624cf98c580d766e0d46a64e6bbd2b7290185111d1af238e69e2bbd60283d5005a94953b0663b2a7331bc9d9f44232a1e2ebc90c2e06b4f767dfabca605750f77ea3c61ab00448ee89b940c317121516ec0cd8234e40dad4a22b3aa36b950708d1bae87ede81eec461b2c058d282694450da888ecdcd8572a2962775388ee20afac6ea11abd1c43464b4b71d5dd884a89f2f2668ccf614f980000021c000000b028ad6cc13b022afbe3efcbacc4d6d7936224e0b6c7ddf9e327f4eb615f225a0d0447b799b6ca95dcd412efd9d839952eeeb8a08b6e16cc876279e99e9aa4c53e5e899ff2161aae373dac5a435edca7a53763cac470d9f4837742dadf05a22a5ac92acdf51ee70f2271f72d030a4f14ba0e85ec9ab592a84507a2e1bfb44402e837680b99a30a10f1e5c6e5b2d6b7b19e2c7ad4f84d6ba6ec518611ad3578faf6e56edf705fc4a23c0ea51bd620c3ab40000000b00d241fc3d9f144b9284f17ca7092cfd4209fa513abcc0cb163982dd6ecbed0adb5a7164b0f0253ef3ee9ea0b720ada9cc089422c485787eab4add7fcb0a73611889db4bee2fee3a958159ebd066126defdf293e8250882a3aea27b6da868ca168a91c3602bd3ccaac7240bf4b9ecf01e0e10a3fc86062b98fbd378b3d40c4e12981eb3a2d34bfe74456a7fd4774c3f691446b1138426a89da4ea98aec4a7cb3839251cfa5954ebb998f707914b87ad2b000000b01b6ef917e2425915fe07bb65b037ded86269ac83e074724a6a9fc8cb7270e91f12144ea4daabecbbd138d01cb031af9abb1bbe07b46c1058335204559f9f4a96671aae29589c48c127d4ad920f9e0b5f86a1b64bd3b664a287ca0286cbc10e5d81a57501354dc36dbeff8dee93a1b00d0f71a484140367c2bd3bfa5f5f9acf160c8ea93692d3cc8c9fe9e9561a583d992fcbc7aea5f5ad6d9d0df69ee97a4998bc468358021e140a3ff50514655ac3010000021c000000b007fea6e5e01d5897d6b0c0c83bb87c3119326c9851e92c8663c678a412a04b491168bffb2fcf110c974cb0be8e9bfa8077da77fabfb1d63ba90131292e0d68411bfeb3b848a93412dd2b0f19308aa20f01f8c4bbaf1a85f57f9f0a600e9f1cad908187b737c0e94b201e71aca1efe829103710a5464e151f34256b9ea19572cbb78b5cbbc08d355682ba0b66efc0d3a919c2744feddd8aa36b698fc14e2f3470ff12959b6bc0b32e0e59f775f47deafc000000b02036482affafcb7f4b0cb82e97543d322354040a37f061d590b148f355a8f3440343024f08693800ae1b4dde93419fc9a93b16fd466ca775722f0eb4f2b11bbe0dafb881c6d7175fc9cb90cafbce8db4fc2eddf14ac914f3f5599494e72defacd1e6ab58e449c33b9c251936dc7cf6ab0f83f7673027ad8de18b56a6688bbfcd1aefc5565ad8296f36e85973ee5be0d6172bf56bfc9157974d4dfa26ba023ce065ff9f2369278fc5a6cbc981e471143f000000b002af7aedc76f5651864b7460f49a0ccf16e52b65459a9f6ed121712e7fc35c29057ca0b658e67e1c51282101ab76831e7060632b52d5f2d8d1cf6f03b892ad7961c1dd927e8d9fc19ae7826d5bb84307dffc93eb9ca3173a7f464740559e95bd6adfcdea2d0f45eeced62a98510bcbc72e977373d2c5fbafca57c4906b5864b265b62c4372b3cedc4b806c575fc2ebc30db2de461b7d09ceae1a9cacec23cf50e15bc169c95731ccd6137752e10619970000021c000000b01839f21664debf8443efa60c4d7ab58810c0e8d52ad11e988d162f72b5607b380d9f2fc3c6dca8cb99dd4b80a22e6271a2e0e0c3353f6d8fe436764c8b93db26ac68d57b5eeed1c6240e357e7cd6b58222d1e732df018214ca6191f7594aa728a8157d468379cdb885fe6b783a20ce0e1a63436591be71024ae6f1dd86d5599fa969fb35b66bd45f5fad2cdef1f08cd3130813b374bbc44fde01cc6f042195089b3e8a2e99c832ac3b261f891ab15327000000b00b49872de4c6c51bdee16da4e542de3215d14a10fd3dc4a205e46548b82a7c38a222fc423a791ae55d8801c06ae9cc6aeff5bf8565716dd14b7fbc6b94090aaa7a184dddb081e7d02dfee419fb0a5178e90bc87497353e385fb8fde0d123c14ab6b135d2c4969242423fffae3ed88a1f169a29479c28bd9130f53c8d066865a084db0c0fada549b5046f2a704222760b2f0a30139b854e649891dc472e4948b64152735886cc59bd50a5d9a55195d178000000b02d7a64ca69214dd3bd8d9f4fcf6b70081a01cf89b7fad2603a172f60caef53f1f012deedafa75542e0d342ca751dfa323d38910d42a6f866102f51879748eb5085b8e5bc9ef74b72676f1aab1a40e339247c03d0e0601b77fd07b8fd0f49e603ee673ddbadf5cd110c26448ae692e59a1b02269b019a173ea9a1def4c2df17bed94d6cbf5f967a901c39ab1d1de3933b01294cc30596976196fff364924a384bd5bcb7bad44df31257bb6551b9d2d1180000021c000000b02b630700ab34081a60a212323b9f12511699e23cb4dcde98a597bd0e4d7d7ce38069a835b6c6f6f9f6eec3ab9b7d390177e3433dd90a904673da187935843db162a1797b9636dd07af381c6eefeb67f12e1f2299f83ed1bfab2499dc00ae310155c7a78f7d72023b7ab14dfbfb720da70141a3770a3b7e300074ea70b42e142d867b12ca8073be1fc528eaf625066f66097d74a1be076de7a43707710440a8cf7ebee90bb9ef9379e54316b27bfda5eb000000b00ce3ad1cf7f594412949dc98b40f4f84c2f5e718d5d68e3c3fd5d7520eb5ae80524b8de138230f531bcc9368da617fd8a598fba6ca8130cc06cfd60333863a747c84f036094a52973339cab94453f2f043b2b2b0e50ab619824f25d88828d9995e039b1a2adee777f4dbbda8654883ee2977adb8e44c98cb56c3cecb88aa1eef5989b9739500f63d61618ff7510ccef61de609ded482e210a6996b3b7b64b73b01b403fbedf19fe77dea77dada9e65b0000000b0138f0758de36c498d8c61775d60ae1d50a3f36f373af656c93261b51cb5c044d03de1b2290f253a663814c4e69a1dc7552d74c31470c10fe0b767069dd73d874f214c211c047b9ebc90321e3313a446716f6ae26c38d6c9263552d1e700e41d9565e53d4c9969acfb989b94f65b8dc262ed204be569d3070a1f26944243628bf22038e6194fc115ea207c0a595e63a1b224d9ae92c6aba1c22eaef93c5beaaff07e24964dc49e074f699ac636e42b0c30000021c000000b0059116f008b6ef6b326346a0f55845421a711ff4129baa8e39c64d77401fe083df838f4fc65b113903adf022286d5ad6a7ba411f7a656b556be41a94802c85ca1642265551a9332cec05456003496e9bbe36f005abad06a902149a8c11effd2fb9c5f0609e3b07afe9312511587975c72683dd76517e5e13edfd59ffb4fb560679ac5af27bb45566157a43a04f6baa731e756b101c24bde60247947356a546e03f7152983cd3557c482b40d9ecc01cd7000000b0243ad06c44efaa685f38a6a988a82a64bfd021a88968dbeca332a11db2662de74e508bf80da95002aa96a4d3fbb9c61a24d4bfca7ab7cc381261676fff88e03dbf7c7550b91c5099079728bf163f6b6c446e9274cc1199df040101ecc962d950083b071fbcea11b26245c233486c62db1795a5d0ae06dc797d6a9a8daad7d207fe246c9705c1f6809c0ca94255801a4608a74eb8a90c1797ae6a988d06a95bd30bc1718353ca4ba4e5a2517988227a0a000000b020e524b90a312c220f3ec3eb61eeb40e493acaa77be86972d71650e74c36dc8e7fa35aeadba106f558bf255c69856dcd6ed5f6258a298b28d57dc7d8f53956bc9b263c23318a83839e3edccad3b131c5cb1f5f9e42e99fb2b1a240cb593bc635d4f634df82ab9bb844b0f37b101a946f2c92d3a2ba02aa40d852eabbcc4b805b38e21cd60aa4d05bb36d2701d68f5c960f10c9d067ff590f778c34012989047428f821664a3701db77cc68d219c5d2d60000021c000000b02022f20164903be8cb79ca2b320d82581f09937f8dddc77d7103dcfb419b82360f3ed89c00316a266cd1d2b9674a74d20f1074481dce7115c0d24a2d3ea99d1ac4855144b7e53ffc0b8dcd5aa6f7eaaea57eb7a8c247fe74c7c1c97f7f5a0c152f9889c564630f7d7a43e7e9fc0fab3204a9cfa861c08c6bcfdcba7f0949b5814fbef32f21c2477755c940bb717dbe4f011ade6f04dd778c9bea2e691b6df7de5da7667fafc77a692db8aef71eba5764000000b010ad3d3538ffb7544d95a7707a40933d123433e46a2b09b6336d66f1b6fa171ff22cd536ee514ba5b0e17786d1c7d826284a293757afa404c519bb51e1440254473138e184415b74a9fd21a7d403379bb032a9793d081f8300a29e20d5154cdf8112ab163fb7942f435529133bfaa2b8132d9638a7a8b4981203e8998d464543208d0545c2aefb2c91648d93a2a0d94c16010723e20fb75081fcc65b90e4a106d08961c30cb650a0dfd02f1db2b8aa05000000b00f4beb9f6dc48374d54fb38120b1a63f48a16273ef1f5abc6234bdfee8978e02b061aca9838d3192cd1a2591a08a7307e0af09d351bc8339611100298bacb465263ba329cede6bc31c76981af457e1f547facf2fa47d943640b17e67426535e758d6dc1beda7a470756420dd87689fe81d545c32b40eff937e83bb67ad6169f6a69965cbde11b0e046f6e25838406a54265385763e147bf2bddbbbed33e6df1289b99b9d0d2506575df7ca62beed420300000eee00000169000000ef29da59c6062db61a3fd3cf61824cd8714b8df76c46c1409d7620469cdf5c55846036c621000000c717223c618a15b86043c40ff22656da1a03653a3361260b7617659248e7e9f81727fa7234fc67eb09ac58175d86278d9adf64e32f62c27a2554570f142f8f69710b59a37d4535c22bd9c16b1944257c10263e805cc63236ac69b17f1a3da7f7f9673a5c24ee0c3aad6d96b557386fb19275f8f894d63017470bb873423deb301aa3b0b62de2b33814d17bda689a5674b7105a46ee79f667850c8647addd573a13229a80fa7776307fcc3ba14e1cc7697544f9eb82b7a0d676e6e6ed7e020a78a011803afaa32c8300000072034aa1e001cd2db35e1e41b1967b3d89ca134f296b1edce23e9e466e0b253cfbff6b6d300000004a3eef68d38f0cf5b3e0e490b691d22b60a4908047d157c0fcf995ffc57d2821a1adb0b1d487f85b372265cb39894caaffaf8d0fd50b9212d4d88b61a609c2d32958570d7157dddde744af0000017a000000572e90aa02c3e3bdfdeaecee09008ab1e10f979d87d46be6996ccaa6ab0d7eaf7d245086bb0000002f9899ddd72b765fc439a4e56ac82842f3a81d5052aa941bfd19307ba7b35dc3864dd7c3c2b33d478ed9472d46c8e5b90000011b093575631d231d5b5e1991b19a8f412e4fe1c02b948bfa9b2f7ee8df7e4d5d4f1759e348000000f36f7db5db9e33203d99f40a3acca6234c9891a40271cddcc3a1c64c8d89544354e5fc4e9941cf94df2e691f28441c97ee01d2f07e453a20a77fc60007a506a61cdbb3d0d27aae90f8b25777dd338a0aa87a0f82dadfb2577885ac933162a4682e698e0678ae92f501117f44f1d3cce608db40d697b5e84de01bf65db17a447e1fcb9e8179c0d7ea8e45673888e28e241f588e2cf61e67242ac1c037adb914023ca712a5aee7019198522951dd73cab45f07eeab30447332eb76669c5aac024cad9dab683e542b8779e2e8f44d3ca4fa24912ce947d9ae9ae5efdc6b9cddae532aca5d761723761b0bbbc1a42ca3de8430eb984500000127000000420aaf3d7a723f8ad0a6ea8bdaf1834892b1e98a4a21f6a1629b401feaf962db554eece5480000001a262b378589ab4688eef7395a9925cbe251782d5eed613fe0c78f000000dd2cf3672dafd30504cc81517a77c89f4661bb2643e44140107531a80f2e0251d0a985b937000000b5c955ae971a2bd92cb3cd438b28bfbaa10d0d2cbb90a45637451ece3143e8845ff11ce88ada7a472b75616ce2f5e1a45b3dcb29af8204bf36b646bf071dace4d106fc019abc73f881f0748289348248b80ea7e27cd2fb337b8349691df74765cf147778547cb52a36fbd7e89b8ee48c9cbeca3c884c02c9907cbfbb8ac7a28c91c08684693b85de00d406693926d5f1d6cf83c81f0602745474d33ea7ed623fbf8767359225601d5729bc86165c70e12be3eb2411010000011e000000320ce7b0234990df87beaf4f79777d1e5f23ba9f80cf30fac41929d7264f3c5d070756952d0000000ae00c81104197c849a002000000e41fe47dd5a991573a2fa3d4cf901d20619c67de269e5277d4968b0a4bd07b12dd564f10e6000000bcb403de96d87cbaa69c3d65970f2f03a403a08a5861720add1a0fea7d5524ec042065ac189b50bef2805c5d5a82c52a31b44f642749e6b36fed587097b7e437d6ee5ea5a353bf36ee28dbf29718c10f28dec1f49491de36fc86024e9b5c6324051eb812d43277ed25ca2d31c32afd820082e8283f056a5fe244e4eefc96b304ccc3e659cfba1f6e16d956e94014e958e228cd947758e73317272c0e40f8667966cce104934e9aacee0f577ac01319f85fafb23bc1ec7315f551f85d24000001a4000000b706cceca38805513a7dc125ada5f382519ac0a35fa9fe5f430de22d83c13b24338822015a0000008fd3e8bcc873009814f97a562a6b2925ae786f92b18fd771eb8ccfa2739c81ed7e4d48db442abd1026f272386dabee46a3dfe85be5adf3e2f3f8dac759a90f9a4066fd061ba8cbc0215d1ab74a2b19fb1ba65a0b3087ccce0a8cc74e3fb912505b357284af45c46194108a092b6a054c5755dd845d3102b1ff5b45a56b6c45a9b6ec36ee2934444e74e096b98534b97d000000e51b587d4775cd778a6f86b793daf88ea2847f3631613ef5f741be87eb4cb9e2417b50fab7000000bd8e011c3fd6fbd5e528d4620004a25b3adade6a5c7a9b9d191141fc1120da34c6a967e0342150822af74df2fd48b2e2fe7a3c06285f87cd4f25c3bde7c2b30310fe55682b93b4e01528972529965f0d5bf283e270b7b97188d22343db166829f72736a873a48c9dd6cccb72e3c520a2f99bc70a051bbcb6579f7c2f85056468371e018e63f1911df70786a06307c821b396220f92564675671d6cefda4d7688f64e7afbda44eb5fef15199421bda333911eea738c386fcfa3ea01f84dc7000001bd000000b903136e36ab2b2d8ebb01017b5fe5c9a527484ddeb2082385fed21840dc6cd23380dcc02100000091f131c0ee531ded2a602e72f01629fd46c8d2eb5a905992f554109b248eb569df24eff4552d8e79c29a54ad3ce8b8cef1b6e767265f6cfe55cd43b4cea3682ead1275e0895e2bb3707c9598448c6e2d871cf1fd3341cc33c126287500361569ea2ece1d1c39d02250c4c72defab58fb3d4873de40a3af07025dbcd841af355389ae91aeeea0604f2563361950cc879b979b000000fc1f737b65169f95325623fcc87703cf233601ecd2c3331143b2d9569adfd350fb46f49fdc000000d4a47b172a146662c318f0ca4f314bcd4292847be35911af5030f8f08934487c0177e45a489227851f2649e661d0142621a1ee4780815b5b0173f05fad726a4fad9bd25419939f5be703359638be08034f4b14c18bf7f13e08619806537daa48553ef3618d68c63bcda3fe6e2126c195f9a0a568ef3693e84182e946a5bc5bc523a156cffa3b98067fe8e78db954b2bc4031a5ffe7bd97e0b547a41bafbf339e2b4ac1c6aeb7999cb2e1435fa865e5db17b67ab9fafcc08015271b1cec49613f007d9856e423be66e46607ec91b3e357e3fdd3d1aa00000121000000ca117790d97ceb8310f16cf60b31817dbc29d12da2d46b6e3ab1cdbe1acca634bf4097e3b1000000a2c5feaf4b5e74c70eb029b31b0d0e0b5c743aacf98ece5d3976401224e187fc2de9090028d4d5f1e6ed6d8f14f34bbecbfc8182c90d15b784e4c2375a3028f960d334ca577f80f77678c8a5beb66a79b9f572fd5b7b260a3ffa1585b6a9f5440d340fa97eb4f5f353d350fdcb208ef29c668ea5de02ba75ea70c02644a03fb8d5e19c95e9645dd2e4b8bca297132d9ddff60bb6568509f93525331ebaf8164bcf68ea0000004f12f617a0eba5d50e297665d2bb0190e4332d65a8fb29244473847d5fa6e5d8a0d8040e5a000000278d819045315b7bb3cb3f3c4af6eefa064a71bf9dfaadfc13379512005bf1b15bab7d7d7039e73e00000151000000671642c53432c2111ef6083436096e82f3c3a24b6170e8445543f87d75c93c24bb1df270110000003f20f1e8226cfba677512bb6801b4ef8852c6a964c4355b5cb7e76f4ad578019b32aa5e283a12285df2f6cbe1e6fa47c08d16661d9bf2790cd1a732351f11edb000000e21f7202f8284a6a0ac94ee5eec3d4505d337b8cecf918d4fe612a9b5480f27189c156ebee000000bab62418bfaea75bfd74d9cd3a2b8f60c034909aafe6cde28b4f75d7d34e08519de749d6a8ce6c9281fb19f7185613b59781faf7154b75b721cde8ec372a8b14ce6b805734948577a47c897e70feb83db5dca35c96be5c874dce649214d34b502a6fd7e7eaea2526ec797a0d85cdec0937a75c41a5c2b83490a8ccb7a951a62c5270f14c1875592ff8205803ff670fb37ad92eca55970abc0f2831f880c29f90b567d28b42139fc26f965cf526532e01d3db720281c8fa7d3471c4000000e70000006412ab253fb0d28dbbe57b32d1787f74d8948e239294185b9547eb657ed9ae7ce3610b3f530000003c805ab0af411e6c0bc7d8b4a47afa711430fc55aed5a214da6a0903f36b6e7f4b673f7ab754dde7ac8c9fde8dea2d13def856354a3dea3b85d7c114440000007b0bea06b21b5b53edddfb58e4ee430d8bed330af63363bd76879e6db19b9266cb78bfc54d00000053f73a6640ffd661308d6b43aa64ef7017daa10d2bdec48c4308276eee7bbf4cb198de87589b506d2a7557bbb7b2b0d31d9da2f84827ac439d8a3b2df18825e33082a99391799cf86cebf6f757885b27b96697bb0000017f0000005e26e43499e82cafe44b4bbd1af8e3a36e15a150b1c0ae6cb1e24e20d78c92d939e391a40700000036496b2910e435aeda6f0a0822c21b7cf8d26fecd92e7b19e6315a983ee620ccf5035d2d53320a2c95fd79de5b5e124a00cddff63edff20000011923e632232a5eefa2d08ccb4b46c2a1e56ce2fef400f721cadbf4aa5e22db57da396c6e1d000000f1f81a77e21cbfd7ce69137aa67bbe70dad9eb09ddf4bfcf34bd3f160c90a5e65efef44ce2efd26dc6a23d78fc8801fde420068b4d2e130021b27365ccd8a01c6e97017825c81d4a3ef7de123a205f8e99ea6cc03590cab264d272af439692a6772038068d7b0c81b4d566557789208c74467975799d28f01ae059106e5fdc4c90d099589b4b79afd4fdbf8d1af1ede76420b13c4e026ce57e42dbbf5c1708efbe5c77f054b68e872c2d64ae478a92ea8240060e15408853c723ed59385a3b27067de1b7cbb0a7364320938d40216fb949e6ddd6960eab3f85cd605fc055220594443f97d3b50fb3277f336e8deff13fe6fb000001610000009b24fab52d877b6277c855b9a9e86eb494dd29e75ac41490958d49bbf652d50dce61113425000000733f3331948cabbd1119b8c4209dfaa86594fe0da89d208dd489d6ad26270d685a3c9e3174bda48beb38d294a412e2e4b293bfdf7f3b3231dc9a931aa80207713c1f2ea008245bed0f7896a774b04469acaf4a0a7ab3baee417f0a513d14c364a5e021cc8c707081e12b1abe469ea6b830310e1d000000be26312988bcc279f409cc5b8ece5232bc28f319ceb6d7c6f4dd491f81070f458a365cbe8e00000096a4ed3641bdbf3889e6a5b32c6bc4858b3df5d03363559e13bf1000f1ad482638134092e0f2e1d9491244d5c5779e9c2b009c721a01f1648be79a1d13ed5ee5dc21c49cf2672e90adfb5858acd79e3b0d4da976e9def0d57d571aada694539738138bbf320fdfa6883bd2254b7f43afcf5c232df4ee36ff4fb7926009f1a836390aca966a7ff0314c0b2bc98d4237b3fa6ba662e6ae2400380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b02a213680376bb100b1bc90b4a245fe7d624b721bac82445cc3e53ffa4bc7c3a69c704d3abc08ea1f34e6487a67a2b15c48fff7475a2447df595bab38af7909ceec7ce20d13339d3a433cfa14289e423056cedde52f627e86c876d5ea719b3d40cdbe9503c0f7fc154d24cf49b5ca554c29e2a8dbbee334ceebbd23231bf06fc7aade7f6605814b3ef51457548fdd711001a5a9bd6f632e9d5854b9aef2ea5d080b18af2511e21b44c2dd178a6c47aebb000000b015eaa4d0880a471c881a52f4fc33765b9f97a5781d0a6d0c808e22018f506d251527cb8b6c65126a574fe18269fe5788cfdb910e22adfa8049b08739dda17bb534ad84d377fbac0096f7a373e80dccdb34d647f4e4b860133612c6e006c4d2e1d8316c0aee38d1673fd2e6bd67b621d000b28f96d42fb26816b321d45689d42a11687ccd3f63f985443782503e1d460a1a8b36f209720e571484c242e2457aaa161cae0a0a9f8ef3c5f2985837a3e49f000000b0084ce8ad658ab5b28cb389920130f98361222fd1688f27c032afb028d2b3facf400cb15f0bd2fd24b262943b156488c44baf188dcfc885064c2b8df76fb0b7a724952f1abc0457d30427591da3e3ad35a5e8b88f32ecd813ca3aa4ef5ce2fb6e31b44b3313ff0680c67d5741972e36b3240e8675270090bb55fed5e27e99ed64abf3b8bbc7b9327716c211fd42fca7ea20cfae873d1c382b8c0c614aa8fbf2347b388ce0818d266085aca377a1be596b0000021c000000b0259a60cb4f9548fb3d01eb15a5288b4b43f0ebc68f003b124a3b793eaed88c2bb7c93dbbaed06c3348818c6a3cc31cd80d8d411d1de84c785a5cbe16d99eddb5b479b9ce0fb948a5def25f5c208762f5f7d643fcafeeed57a789d71cda5b71595de32dbe94c18b02985ae37dac48b7820647c70934564203fd1c2040b1d2c16c17ef806fbf6fc56188f8a071de9f0cb10ad5bd969a6f58242a5a7aea5ab94f5dd540c9acea2c8a686319d01d04c89817000000b01d627f26c365585c965aaea47b21c3f94a987cd08d221760dd6f25f0f80af8334bf35bc18e42ae4cd23a1686fb8ddcee932f53cc4a5f1505d8180088485951c1e25e585d77c6c19551e83a40e1bd8cc864ab25c95b26452f1853f557fde5e368c419083ecea5f85eee29112547de2d912960f1e53cb0b0c7fb271f865591d1e44a874e775f3b487465f3b5fb502925bd05d45b7083264a076b374ee9c19de356ec5a58794a3b1e4fc2a29938f75aa645000000b00c06ad9f8a7a28b039d05b77f46bee713f9aa8e8514712ed29e545c7f9b53543c1a2c1fc6abd6572ffdb72fc2672876d0e83f4c3fd6567fddd90acd71a09de213b83ddc8499771cb69ffb4c64404c2b64aa4822a13e3bcdf2438c318a17d048ebb065cb825ca6cc93c6bb47abac573271a799b7e4517ace12432832f16d25299ae626ef3a21b2c9eda40e5a88032922b27df6f2c4cd759ff68df9b0700ef1f373e765d16c5c13cf3f7dbf67e191c06330000021c000000b001e8a3804fd3113a767c3053194bd7b913fb8c211ae8e1d89963abc046de1878291bcea7f89f8cc3197b235a554d42d7f1447e2f6f7099f508703b59e60f33fe337eda49bf3e9f80f0c28ffa4f81ed0b0b7083d4baf76c8a6c8335c3ea87333aa2dc6fa5c35b22bdb1929caded6fb20b303a14de9fb4982debd513c49403c6e11ca2f939882ab29d3f4f3bee3604c8202f0041357e47e0d879a352e26c16e0da4201abc62894b0049aa522eb488f7acd000000b00644165ab7655cc6c7200646f67f3f9560f7115585b9fa81cdaf31cd0de41d94c22b1df00b1f2f6894f229b4ed250ac69963bb5073bff494999ef0b1713015380c669066777fb42d748f31dc6f9065660e252406e13b6e9763c84e16014f3ed34a51cbdad892be80ad91ea62f55335231e061ae1ff6d74b4adcae1520e4d9305e9f29b0ee9233b53ea4e2eea7cde8f471f9b3ee56d1ce2e2701cfd2a0d991019733884f93b7ceffc5d559fc56c300d01000000b01f52b0d9f4b6ed23a47cfd3d49b8bc3b572939dc83ce6632f5a53719933f2bc2233808b672a3fca1d2fe6cf375b0b78affd49f366f0003fe7816e54e22ad58dd756002580f099fc2f44e82a078ea284c12bc328e9d24ccb97dfb631204a0d8cee824620b7372c47b745b707fc45bb233003e168e8dde3121055b59af6fa607b662a09683ccc0d20d2156810754b4e5e7002aa07bfe572118620c9faf04b232fc6eaa0f2d4fc87fc5050c65d63c9f0eaf0000021c000000b0031557e97fea630e48fa8a4dde3c6fc413498d348960a7d30073863449620c7a5b49070a7486261222506acdec5da8fb9bbb6ef112f81b1c8bec420659c410bc161d4988f199baf4f023fa1b4c590083b853a633dfc8a709704aca29d108bbd81ba7be268a1f408382287bbfcd86ad002b1a81d16f22ec6560ec0e9993ec54133b66af79b63f666a3f95c954ef2eb408192855a19477e75ecb44a120ed5263d755fa932a425873b508934b9ed55d44c1000000b0142490f7ac1c1ac2a236cbe5b412b63f39ae8e670ab97765d19806d1e60855bb167736b82f9735bd7c25c73086cee9443b7cbd4bd3fc2ce286adba8a4f9fb6b15763e19ad0307d4500fb47b5c8a835d130ea94e60b4fe778b3d149cf7b96abf0902022b250de468df4359bd07f37f6810b10148833c44f39b5d76550c02b72aa5b6faab3cf4711f9f3423ef16a597b5718a253a05f286e241e1999c76169c6886c187289ecc745aea12833eb340cfc73000000b006da6ca086309ac76f2af18bacf34fe80998769e70e74d77e8e12d6e8a64b55df71b1a78cd4fe5f1b278dba89b4b6372a57de509646784928c44d007ee08af098ba0e63327f75e115a233f3460bef8d8af5703d43b690f1c60a8cc4d823ab15935e1b854a3f585569186fb108ee6646102f8650b179055cfb0978b4b9a58419739095cd09868d416c6eeec4185836b98029a09e72459c509e380ecdde8d75b3956020082bb2fd41469959fe618656d9a0000021c000000b026c6c87f9464efd694fca194c421639790a8f2a225024955ebc745f0130ecd3d18e98282f264243f955aaa7d9a526f994494a74bb8c7fe5ed6d60b4fe7ff3ec36758e9ecd730347bfb798cfe56b55880ba6d91aa85e356fbecd0ffbb5402408bf56da263264621c0b9886f573ed459b504b4a8a1ca16572887bc689ad775990785fc912560bf40d71b319c672cefe9d712c0334febe6abb8e196c668a40438b43c3db5b79065570a5803922b2f27f67b000000b02d0f5498c34c6c591ec25d8229af1712d16f93555ac4cb21c59f0afec40e189ebbdad17355e57d72a5f1bd902d86a964b070ba62dc859cd2d26a5e39262934d5d364feb28dbb158e839a814dc85b919fd62d152b613ffeaa142420bad35c852e1f6d1487952dd9f56c25d30a4774308e22fd7147806aa0771f1f4bd2b0f8b137872bd6bf80edd8e12090c39a482a8a951b5793600bbabf12f0cd03fd64508398f2c2156fadb2e499105dee683c36de25000000b0132365e72bc2e1f8f50618c2954db52539539585200f86c24dbc1e32a2db94849611469e1fc6265030f5e958e968e1105f725dbd22266ccbcab02363855cd8e5155e2416d65a9d2180832fc72530599218cb993d82d4a74ad59e213beaac3577fbe2e0a3558e24552737af2d3e5e86a30496794133a4e4ce3f8bafbafa360efc72bfdb4f99d784874fd7d1ee7de689c91a18708ea441794ac770c27b4def55b3cbf8e6d66bb37efd0dc66d1326c4f7a40000021c000000b022abf6c6092043bf92710f76fd215f09b8526fa34ce00ae6d3062ca1851e965e022ce54cededbed0e6fe71df159cc7aa1573a47444da2c292b0b23fcce1d7d65222fd05927b9996df3c19108e26fa5d7885eb7d16eb957ee63a73c1d569f9064d3f6804966b98ac12723c08fa0a6274d016507edc5a92eb172da892bf605754898b72eb954d69e83ffcc6e37789c8748032946634bfc86b0d2ff4e0bc4ca669be7958c617753b27e1edd9a083359478f000000b00dcc78d6c3db9cbcb0bd3cab1153b0baff6c84eb7b09fad3756d4355ca48cb4f94a28287d90cce6c4bdeaeb12ceecf91d29077f6dded871e7bc3dbfcef925f6c38031e0cecaa1c293291f2357dc9b3cdd3ba06e04a44dcef51c85a496bf717506d32a18c5ccfba14ecf9d7242bb376fa16164f3330b1a806a0fb730133c5e19b2e10690beeb46a04737fb670912fd2300f211ee55427b7a1c03f0f080a52e21d1f7e388f753ea6e0e46ded8ec8e5abf8000000b00f117848e25cbdd7fc26a3c9791efa858068843a44a0d5712d63b5cc8e8a5d28db1f200b2ec755d9eb2f9395af4fca5ee7016f5c11cec87b4985811df1e9e022833c1c5eaea5f7954c38831134b5a3a44406fa3e062339b11d8d8b44b0803504a6095b009e24f05d24020993d77c216001ed81c10c6613a1f3f05de1f233879a232bb829742001f463df6f28cee0f23914368cf0b8e9953066af286afab19a29ccf0f7371c9438170886414f4f8023780000021c000000b006f08e88be190a9cae1f002a2329351ef6fe5a8df44a2a7297a2d168fc717526078c170b58cd82b086c2b3194d7285d680d19e701d6719aeb03b4b66a6389132ffe9e701bdebeb80e7927c41df9f04a452fa9d0320215d33d0f45c976493408e3be3957503a94a26c6fd82a867eedc282e71495e3cc73fced2814097d41e1c3b48709c94c6309b8ee875ecfc3b52ed940b8849016b15ced6a6c44984753076e3aa40b0e29eefac655e722a3b7a477385000000b004a6309e02f4199bb74c05d986c0a26b5b149afb037b436a1fa49312170bb72d045dc7c547a07ff666f943dd3b9a09829c5fd34b998c24bd23ce58e06658b55a22e353b5d8811b78398484176d49bf2f5c6d98bb21c047128c3f4278db3b332b380d11218128312e4e80cfd1b69d0fcb111b4db0c0e4ee553f9fddc3ccb554a680cc59d07213b2cc434398514504b12f08105a62f0cc580b3e6ad8cbd873821a8ae4605790c4badfe29e8602c6f0f316000000b00ed44e3bc9d3243a48715c434664053640d6ca4702a9779bc197a43834974536d94a7cd960efe9ed691d5f3f1ea06dff953d111f26ee1ebf3d5e28cb60ed91fa638a014890af93e887f0285711e732e0a3752e5af62c5c506ecb3b6f04a501332a89815811e093c011ca32dd68f9fc0118a9ef4cf8a72aec488c0ad523f712e7b5f8070426cb2cd79efa01da46f52e9d2f8d0f8f7ac425c43e7ab5eef4d6e783fb2365906d58db4aca9f3e60604dbb560000021c000000b0131a9a3e8fabc08130b43ccb4f864eaa292d010587ea0bc377b0f6bb381b11a2507ca14cd2a7e84a71b234afb8d516448a8a5cb05d26ac56b755f41fa81abe0ae5d34e0a890e190b7e464f468ee3dfe5f604393dbb9fe306c143e6f74a8de213fe317a2cd21802997551606ce503674f2c15b2d707be6a88b120390fbe3a9b7e0d02e0b75676dfd093f3b682bca86e13128e173d854302fb3b8d49e721edc7caa41baf7038efdfd248ce7f319f27729f000000b001fab89c460df693481391edf4963db5cc8100afa46095c685097151229f6d1edf165e19ae64adb81c026f8d4cd91dd484294f3dbfc559e8eee555c43520aabf3cb32d641ae13e0f5c97f12a3a605fc308596eb9a02339824640c77bdd57e389c8a52cbafd10fd6279cc7ab76866859e126632de7c3f4a685fe7dad17b9e1f3d830932837326fbe0e60263bb299eb96f13a7f5d31b8b8a724a3aa6b7a6001bfe55a09cff20ba5ca3e556cef7f821ac68000000b02d13ecd7e0ca48a67bac33ee9f92cf8055f5c093c7397876f6c8024e2799b10e5740259e5743e60bdaa0d0a94c3d98c7d97b0d2e5613324915a0a9048dbe3c9cb15068bbe5eec53a1097820a2d30e48ea4570c648f0e7ddb1c9637050a91c2e141c1faa4deb5c3fce57b5bb177c21ac011e9f4bda3061c4d24a7347cf7352e8a05f348e0bbcc1a7e19be36136bd14b211edb481b0e6fef0be6769c4fecd4174326a933a7d52c8df17f2b185b65729081000010c7000000cd000000682fbe893af9850cb5939b7e71607d6a607264ff08c624c1333552a8d2a8aa31e0735c5f7400000040d97ecdbc31741e58ed7e3a6fe31b63c16c2442e666956ab39d794c11757c91eb9c85f85fbccbdcc5d9f4bb4eba959cc217c92ec2f10b59a990905d12373545c10000005d1f297fec89380dc9b133aecebeacebc8dad267892d36021d6c6929d15af7d0c061e842a60000003545c82f6a2c6f6dbd9cd5fdd9d2b07164c7933c74dbddc54c26e6a6216f14daab874afe8e0722de0cfecd9d32d1eb1065f7af78284f000001d0000000d72344638a809c5c84167ecc72668de7a48c42d3a1b3a36d8d64c1195cc4aad3d67104b1df000000af0b2ca61c4b65f0a946fb6aa39e32b07bb6aea2491d89381a0c0b200d53c1389a11a00ad968267a5b9aba037a1eb4004edcc3d8e04c67f01241bc2c569370e75486e17975a2e5cf10929627bedca598bf0f5c486c8168f10cb83f2c43705ce942e5c90c695fa2a131577587ac5a2f54f7c50060cb112ba8b8df85bf19343771c37f3c3677f51bdd70a64f04c5466a7ba2b39ab8d683f5c98df2693eecf3afa9743d51199a6e873c9096392224ecbf49000000f11396391ed9b614766977f0a9f6f564c7a1457c61d473c6bc4a7027249ffda2c6aec35ef8000000c98a276d88f2277c6c0348cd9f0b5b7b8b18e408a9cf302252ca8b04d864ebc94c2f883e1e2e83d43086753304e983daa166744ad0553410d779707756dd7045a38a256c0431f2502c63cfcba472eb5d5a4c39da4f50f633b218efa21fbaedb5ebf7f1252a0c81d4c5bd3c996c9b6ac50948184e4883d5eb3f6f68ec7837b88f2dd2d69b4e5beead75921fa541bf5ab04163bcdf7ce6911d98eafab1a65f2b7b046c310eb13ca7a8c181f52b41c6213f9b9537c9b71933ee6246c0d7e441e03d65826ad04cc3a01390a1000002320000010b288d9a420f10a2f5701f7f323bbddc4d6766dbaeaf38066972f2e009efde073499b21051000000e303ff9971d50d02d77e95e1b432a32b371957887ecbfd703c20798d27df8f552fe1638e3be032f22c09d558b0b649f355c6d878e4317ad112a9323b9e23159d6a79d8de6696b851e44a54762ce1f50083d42e0616e41f292bbe893833a714c5c3acc46c5b228f077bce2c95d2dccc03910cce93b0796957982a3958d5dd8df707c5c4cc9f04171988d8038694462ad63d8a7328469569f65d77646a118f6250e0930d27abdd7408287849604bc9c7f0f82c65c463616efc57e5facab81fc37bf8fc80cab2bfc590476a3b2f2979e760e9c58f83df946495b9707f8836ee77fb5dbd190b0000011f08d20558498c41e20ac948654ffbb8da632fe796398b6bfde8825f5e7d2ab73e5a2ed674000000f7d7628e50943ac012020db97bd993248a8c8af0fb49f944ad50438b8625a8147f15c59553593540f9f58c8bee4107a64d481df7ee3fda545c4a724237fedd8a06df3a3ecb70279cc4a2a80a172d525f917403e38eec210db9807cdfb7463153f1e49104c3b2860341bcb1aabf378ae9f558828294759b3fe185daa86a71ed201374c427173239b9bb66ca16d16d1e4ef575b7315a136c30dd40244a02d8745c2e6b3bd479bd936c442459f0b8c137a4fa125e08cc60657a3b50ec4016fa8445e5ff3fe74ff6bc2a7d6cc0ab6a9713dd9aec1acaa690adcabdd879b150e87967a04b9cca59d14f21ed1231a2846871c8fb85dda866fc64c900000198000000930f868f0f022387adf0baa073f612c843b0917d75bceb7969364e1828a8b3469303a5b3fd0000006bdcb2e5cd398927ef97fac3fe4f5386c8d535e4bedd76033421b4f0314ec1093ab2134b90b89a1c6519ff30b220d4ad37847801d0ba9568ece0cb5ac5a11a42df36f47e4aa062a4819a69967aebee786491fd0aa26ba2b46d6694296a4f36ed51b1b75924796de3b8c8fdfc000000fd0d1201a467573862143605f566fc1c046579944b5a6a179db6fd27147c43f49c237f879f000000d5c34ee9083e36ef32936500686b852313a5517bf899caaca4accd125feb2abe4c4b4533ecfa4f5785db513746dbe4ce22d0fb94c3ae1e04530989122db8578274992eb5570ab6ae8c1560eb35a5ade14d82ae07e954612875f2c61443b3e21565a0446a8f65e1aa8b399b76864de90b6461ebeb67c40ea0d041628a001a9903d59750d3173a80eac6d0ba03639534418017615df07ce03d7ac244e78a44f0d20923c5798b7c33d5a8ff16d5862b319b11d37d6ca8230349dbbd4b393a72d47583d46869cef8ba0e6a44e1e0bcd88bc891ee925dfc9500000136000000b007903ab93d9daccd4cda8734ba84cbdec0c1b56db734c7719f77dad0cc40c950c82cbba50000008848442a33458233248ed33cc3fc110f0b5d3413630ea01f56e34120db39ea50c72ea0006beed15c4f6afaef630b188fb19915de8bc417a6569ded2cf7214652e356d7da06cd67be8750262974629a1f17258236e2124d12235765e1c0c68a28730e6a2aeaf8fefd5aa6a4cb0d2cc7c09b07a5483cd6a57f4671875d0d7292377bad034d4f147423520000007e1a96a0ac08aa4c318e04f3ddcc740106e2fb160ba4372665b181d30f7ef91a8d97e7fcf00000005620489414e2c98dc2e66857bc972ffd1b1eb1b8011e2d44f053373a2637cb95e8d69151f43e61026b4f2be3258619c577eca6e92b70c389aef7879eb3586de01bc84e0ed6698bb673416bf2330eb896cda10003290d50000001600000010804f47d904bc302ffbcfd582c9f206772b1c44b9c48948f42beed9a78c1bc6d05df161e07000000e0c6a837ec702ea5f333e54c91a7dd40e8d7e454be8d027c2353149f70c3d3357ffcdfde052cb4d7e9de52c6ee8cd75a64d1feaa70adade7f163b39f857c5bea4db672e026f88e9c105db2136226712473714136fac1fb7f34425308c564d4e22927e7264d899ac0f96d6f283b7e4be45e89174343252401811e94fce0b500e40c7b45c85879e24c8453a0d6c40aaaea689de11341caea6d43df8285000b1ba64030c554c7f719617912904bb8867171b50a766c2fdae8ac8f309954efa1c721a39860ffda3a3d74d50fc8d5b893b7168adfd5f77a473686646ae5f360e487ea530000005017ec31641c4f94a013dc669280b3c57bf74c838a5ba873bb4e08602e95a0e787dd5e8e41000000284e6792d9c3c81f6692bfd9b551959dd10043f2c0342ca4379d074f3358987c635b9de7aed927ddfe00000207000000e520c6110ef4af3b8c0cc1077484d7aeb23b6351eb8b3d1eff6cbba937e1f24e7007539a8c000000bdf759f4ac4e71597a7adadc5a17391371dcf906d7ed01d4e5e31af450c175123570425f8d8434ece58f4ba0f6ce2c5d37361552c592108602dbc760b8944b9cb7a50e888eb9542da425465a47c61843673239cfd029b13ab946a9de10987e8bbdcfb118544eb81f2944ca49d4dc8ef99f5bd796bd0a3114b3577c789f10a00faccb4d0cbd145752489bc2182e5d2ef28289f5105e5b75af2cd7499067d3389287e7a94029822458af6e28fac648f9f751be6d970f076ee0df1b89408ef00000011a1b0400e019a70cfb6a4ead3d4d737b3ffcfc36bbf82238cc9f401e89fef122e653af99f4000000f2740cb32b7e73efff6ae68bdfabf015f41a9904a1a6dead8cf5b1641363b78e5feace264ddb5237f60287c2330323bcc282672c96be925e87a703983ac877ff4a2b078288f9cbcd0b45a65139beb1d0119ef3724a772a1517c395f48dfae645405eac8ef6e4f03813da28d6eba2863242bda4fc081efbb86e1cc5383e9dc4412ac3cc9792c840dc665d16064e5e73b7fb2aeb793a570a7c456bf2a25805283e5f201fac5bd33e62dda4468f3043a7fb79fd2e332e8563abef74ed841b8402185007fa9a059b2cbcd082c02081f9abb61f73fffbb4301ba5d226c162a630a25dc7446f4144dc4ddba09c05858e8a83522f663200000170000000a91befd28b6edd1f733bc49f204484ed0c6caa7606d1ec64a64d16bb68776bbd6241b4ad9e000000816f867bfdb44b4bdbd86412c6ac0a18c1c31fbd70bd0be734ac85bbd7f140ebc66b6f14e148c6c25a3bd08bd0e65726b63ae37ec54b537b3418b7052e745d61b311d5e04adb8ddf3d358f80f6aa24b973baf46d364f31883aaddb4b849a8b3d56e880b1fb85c7a16a82a418f32967abcc101f0e88397d36f5cf4b4757416c1d1a8e000000bf0b5f8398baefc08627e20582ba829e6cb51e1365b2be269c4b9c2a47ec2ae6c86fc783af00000097b8372e49f80b0a423ce3c020b83d5ede2f8abb659bb68ab9c5bad0dd262d13093efab93862416748ea79849b15446f75ceddaecf3902e635808f51c3077367163e6de28dd0af24f6dcae6f5a703f39d9b4946e9e7e02e617751eddd16c0c798659cea98e53267824d276010a4a248e5adbc03d29d218c6d3c6842b74605d3a862d5e1a4d202a52f73ed732ae7289fb31d2dbe2aa84c70f000001950000008b1bba2bbf8b763504a325c8d3aacf6ee4c380fac4f71fb2f0ac507a719283334a03642c7100000063e872195aaec4da999f847be9f43bcf7cf51481f97d03e0bb16b54c871dad5bb5e993aff23a7e4931c2da98afb91306336e52dc933c1d90a5c16aea3d7e9a9e1635e8a7ff6fc127a9e60a074925a5da9d27c4bd66ba2b59dd1dab174cc3ff1272cf3726000001020aafa1be6af7a898dc82a82091cc05a72b452b96a2e0851cf978cf92c5133b784b9c1b02000000da82a797557b4c65b5f9a8619d8ff66808f94f3358f5a080a4be79a2c75e219e0ebbc0ca23c583a99d6114186ddfd510cd1b509302c3b10805267a193b8876f276d08e61194834681aafbf907a4642a21eeff3cef7265426f00d3e6fb0d8a9bdfc61cb13fc5c7bd12a1119e17e170741a49cce6f8acd4b28d4db8c98f1e7b6e33123096d080a259f9350dcda9bb6a4be0dd6295d828794dcbaa7651e484e1109bcb25d763f5ffd4f6248e2c4ed95fac1fe8f59e66d8d7c51843f47ea7e0ee507b25e9d3696a9d164c445f5e1323f62217707b61ceccf4fb5fa8fca0000013c000000e01f8c387e0f2d912e461ab6f25eaec319a557905de19fb460ec5db4485c30d02c43081a4c000000b885ea942549da739a1abea8138cd160f2be3318c52b05ce2622ce993e8666e42505f9e5d117336dc2c60bbae3e6c4f7d1b6dedb08ef3b3c2dcdd03a93f4c41aa75bb3043b971581ae3dd1e802183bc757a724741c8b1c759a7a88cb8c8ea1f0135f19285e846e66ef52bfe9b72948665accb0e2b74ce8ab3a1460468450594de44a63ca2140ce4625f3c60b3de088ab645e519e07bb8ad073af3223390e8b2e8f92fc5a37ebfa37dbb33b445e83257147ffba5407b66f1a9a000000542f37cda709a2dd09d782bb71c532f9bf1a5c820c5a36b74ca1599292e52e8081a19a3b490000002cd0b16cfca84c6a8d9289110f64789fb585a358bc964660ed22b16bae714938ff9242f4214e40dfb9f3cce0e500000156000001172c15a13ba873ba6a17284db65b14baf0f2fee5d8bcaffa93a6b358bcbc8e462b7d0ee62a000000ef311b4855ea95df18f2ccfe9c52fe271a4cef9ce0bf4889ec85210abfb2925d274aca13e1b6095ae9a7ef541075b4ea2da82e64cec0bf39e295211ff927256717ab316ab619e0e62c779c200ec0686c3c65fb901e7bca0fde6d971d2c8793bcadabd6d9bd50b3e18aea6ab55cbc20b93557c81fe4fc551e89ad34f1bb02716075bb86a5d46ea73144923a12a085866d3533b9d888cf319e82c7dd64f81a40b725a13e541b6d959251706f9003f7aff12a0726ea7df8b553937978fe3967bc6188f3ca85e3845c2db0c652744747eb1d1e70f034c6da24c4b4ecaef77399865cf01f8c0a3ed2a699ce86876e8616bf5e0000003726480ca77d9338f78e9303a29b4526d08b04c1159156ad1e3838948a40ce8e9c1d0768c20000000f3f103d15b5f7748cafa71474ede108", + "txsEffectsHash": "0x00543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a9", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc" + "txsEffectsHash": "0x00543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a9" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", - "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" + "coinbase": "0x419f369eb60187f6f2c319ee70c886d95ef96899", + "feeRecipient": "0x0a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", - "publicInputsHash": "0x00baaab13a492808ff573674e84ff0b711f479e3b98da9764726a26648c30bc9" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000419f369eb60187f6f2c319ee70c886d95ef968990a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744", + "publicInputsHash": "0x005cba0a458c1d6c5afe34f54c5a23c3389383f855233cad294e3de5ea91e087" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index 9786088eddc..ba2dfefdf6b 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x106b13752302ad4124fcf104f9675f27c31c9e83e0b930d68b99520fc0ad2d79", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b0092e3f60b9708a5c8f0b0e38703247905f386f935784e41e1b5761e462796ac8345dc77bf6d25314c893bf34347d6096676878a7195aee857a509c3d2e010579ae9c4c069cc9f6871516495dbde8e61e75846aef1e643999237a5bb73286628ba9b9c40abb7d1c5c6782437e8c37fad121e389258f1fe7f8fce17b7e851439ced42dceb233d0785502e95bf6002e949a1ae8acc67fe4b2e33cd04de86ae58c2f764a433a1fb701dcb9ba69b3c4cddc21000000b02cfc998123ffff79022c63bfa695c53f1a71e492983a6eb3d42e3122dfc7982726d589c3d7db78592644ee23a60fc6b5d6c5ba5f888aee5f22a0305be6bf8e82eaa908f78ca88d4b16244ceb70a2fa9573e07d7142ba31c0016e4e49e743c45c55eafa26e712c7cdab86320b4023b1df15132a40642ddb502ad8985db280834fdc7ff9416f1d638bd05cbd02937ed0e6069a2ec413889367952775d8038dd5e374858504a2b281f4d14f17dfe2859eed000000b0188a7503bf441aca62d9d9b1761e8a612e5e7f02bf1e3e5ea970de3beec0874c96fd837a5722b23189fdcf95953c5f3067dfe0aca381c873128cfd9dda28e20eeca8ab9c1384c3b5a62ce79f101758edf2ae08207c0538f4b969db3e35c843aea44b1cca79b6b1ae71bcd0b10007bd890195fca649a53cdd0c98d176e4afd77f60587e42807fecb33a931bbff622231101c334c358302833c5f44a23cd61d6a70af67cceec733040b4bbe5956381c01e0000021c000000b01b88783f82543308ac39ed04aa7e6cf986c4751df927c17dff2f468fd5ff594756e35c38b9ed7b8084bd6897a977664190e3c4ec87cbf3d7e0fb094c6010676adcc51ef1964cff48cdc456625e184b54700bb5898f546912f8ce6830c5ac0facf7306382fc128441aac2a1c15f268e9103bd0dc8e943abbf8cf46ade81f6125e392bfb56df43d7e32c881fda29d42f0524cd5e9f13749ef6f729aed292164fa362edc59f35a395e79554b115848b580a000000b0157117d66a266934bee580e7f13a17d806d4750d8226775cc8e9df32b3a9707a6140bccc408893b919ba4efae827e3379ffca5268395d119bc2fcebcdbb75c304b0185103170db64322e43e8f54a7d16b492740377d9c75872a0daf2cef0f8d46171fd9dbbe9bb44fbaf6314d471f9f01a162b428df98788cf6723d32c77ba7cc2da73586a990f0c82ccaba812faa0770dc8da9b6b94b479ba4705e176c45eecc897d453218fe195581e063941792d33000000b00e8665ce3d21c817b78e1aad7e81ea4b060f906881de795a71257bc049bb3dd71a89a1a48b36ba1a5d92ceeffbbf171edc3d324292364159304840f8884926cdcca792d2a662e42a165e137446c9923512c2f6b0ba3a9bec6d32d81731841ee8527ba42ad1253ed1bd496038261457e22a9aa6d3e0f44a841a154ed1b1e134060d00a87f6ab592a69c9cc44e3ea87582153878ba1fa8752496f65c7baaaef65f56d874fae8938ea339845ef0baa10dfa0000021c000000b015c90254293c9a63ed340c7c88b9cc037a914571e9e4e1b096b9b2a0675b2a070ff47d6dfa06af9497bc3cd7c8ffcdbe34c1417d4a68587b5d35c32c238ddf0e436b1eb35eeb4bf9d3600a21d4de84c979dcc612834615b6b06cfac294168e1f4fbe353f3b18490e23242bcf14da218507234b22350b2ab1355e37b9068163dd70c1dc2e65b138d3e9b3fd3b9488bc292dc162dda34899aa4d1a02074ec85e04546da1d0935cd5e03f950df51a60852a000000b0214b7feecb2b2f5e0f7fb566b39b4f2802b4e3554ddc704bb606f686c7799c3f059f4db2696321bec232e52d5c361ee54a8d64c8aadb744cada3e5913e92d723d1d4109f0b5acba2f2ef3d0540f151e3104b87eea9b8746266f953eb8d69ae9e9f09023059e778cff4a085e4c04d5ed2187272d4f147b0d3ad5c665b995cfd44e9ff3a5ce0d8a02e5ece0e41a95bb4a41b8207a932e63a7066169dec4249f1a833e6a9125634ea21d53ebcb6bad14753000000b0124726405870ecbef8341aaa378a456764b3788626b965e36da06732008ccfb7990c10abf05d891876606ce127bcdbed1b360ceccd506948838fb39a555b85c167ab46833512f173ea766779bce6f4eca85e8d65056766d75538076d23bfecf61e982b044e4228d5de0c420e6756d7e70d7be99cadc9a626ffccea7de80f97886e9c1bc0416ef4569ca95d284e87d6ca07a0b3a7c54e0673efc151f5f6c4230fab67ef4a7f7c634c5047b19c22db427d0000021c000000b0123e8e19a3bb85a36956f58ea16d5c1901f35ddf86b72520d6808506697fb71bbd6a059df6e815a058ebbf74c5f6fe74f09a82a39bbd574c3f8f61e6f7cf0b5b626c51e9b49490f34d230c53f85baa4ae13f196eff31164de346ec4361047b8318d40ec4bb52a90d792e1e535b2054660189cda63e702f48403dc3e209a340bcd91ad1e297e3052a8e0803b21c08488e0666bacdad237383b56ce969473c639e8a778ef336c253ee2700dd2ddfbe1305000000b002df4eeddead89c893c671ef1f0a4993c9b9447148fee6754199a225d4d12fa492d720f2117daf5bd0896e8d175d21d6125217dc5ac29e5f2fed0e1ada672e92b9c10056deec81ccd30e7a116392706886b029cc55240898ed11cad0f0b07aade28856ae7edd167a80584f24a2d4516c2e812e9e8251410ab8dfa79a95be98991491df76ea0123525d9bde8d75d16739245ddd8b541b9faf96beadf5a05ef6d8ec8e0fa9e35d8e0cf9cd892a91a9bb06000000b01563d20718b012b6411f1ef8c2e5ba6a304d30e7ea4a2b751849058d07977abcbc3e1a7ba424c5527fc373d2ef0210abe63b0ebbc3bd52e72a07dc0a812d51938fa22afa7564afed9762c364f77c7d3fd4455a45bc3bbcefa863929c879ceb12032f484ec384a0db3eb905612287ddf602854bbb649e49cf8b609f1466187f6b7eb1f1c5c4e3eb5977275356883a68db268e81bebc17bb0eeee937997d0fb5f00eb99d18624fd7e2d55ce3958fec1c600000021c000000b01d8d450dabac323c913e3bd4ca5f1cfb277216deb6f8d872cb0061be5ddf61accd4dd6ef59015bc500be68e7a3225a56963ad0e37fc9c9b83fb2db66fd1b32a370d85f96c6845813d0f8de201e89569aecf1da9c7888992c17dc9f73c8b70285e52bb85147a1ea952ca662db7dd3b9ae06c9f9cd59d6face5abb45a246d1bc8e6f38e14a503de9c65f4e3934d1c6ffcc2cef6495b730fe87a262b4d2b0389dc981e9c1f569b5cdc0f0dc70d2a7f9ca2d000000b009f5a9c85f36cc483b4763d510d7a42145c5631ba6766dc6c125b7bde5a75c6fb43bac70bf6a5d8a83c2c36aae17782f481ad2ad55d3697b609dd960a0fad0e4224a21bc851f9639de0a0acfc2ba237e8dd99e96185d343c28ff62d9a5f9b1db8e1db8db9ff0c21e2c7ba6a43bcdcc38094d09095e053b276361edeed8f96e81c2bdd33ba777f7c9a3b4823e6c9fe3651a355861278ce7f98acad4de5de28eb44df7c2bd9eacbfcc69d7168f135c83f0000000b01bf626e96161e588235a5c2ca57dba3f8bdbe41a9893239acab4627db4b1b29fea1a0617629aaafb0a21def0d67bea68c159b8032352758f0ecff93706194a93fad7c164d8fdf9323b427b44ff0bec68b16f9f9b070258044393b305a85bd915f489d3b9953643127f56b4a17294729d0076e47b0e908b990f1fa759c3ff6ff9194a879ce8298ac6b9e868a83c16b7ef02d2ca3c5695ccc973bdf45347b515edb76d2a8621551aab4f81f30b9fa8cb5b0000021c000000b0084addb29d84f3e51c1efc57d7f93c2c409d49cedefea10709bc12bf3e81b4ce682779febd9891e7ea5c9a42a501bacab527e2fe75b1a3836c56173652a6e5c31f502d96026537138e8c9bc7a5fbd5682a18fb8b9f88e9437876e6575ff67aed3199764929324fc00de42389ccd743e509f8673aaafe29b780d7527ce28c476e88e623ce4cf2387475e8060eb4874d5b25071afa216fa508abe35cc310403ffdc7e94651a0d85cf621f427f93b1a20e5000000b01239a1a0d27f232db4642f1960cdc8dd3a359878116fac9be00a5c034dc8f0c864103c613246999f5f2e171d5baabc29e90a21eeb5978bf0d8c6e3cafca18d9a6c53e05c8676e3e42b1eeac71232cd30e1984f1626218030c47a7335be316b90205f5f8b014709385bf47a9eeda02893114657449f38254b1c8d4916fd5dd2b95271b16f266aa5e6e7b10d931e63c84a0f6375db67e95b49f465c60a7d319eec4888e4a41f8c822bda4786a2bec901bd000000b02ea772409114606622a167dfb9c47702ebb0d833ee12dd955c80b22b5ae32134e8eef2ce068ee64f7489706d2e7900a0a7b8d0630dfe8e23597850cc23798860f44637cfd2c9398f3b91686c5d131f5b5d4eac3a4606b614049098c7a6d50f8ad88abe56f6e637efea5debde7c46c2da280332c76fe9554ffa96e8f967ee160694c1a1da8b2f8de3494166209801c0e60ce961f7dfd8a682d9391e8f41ab1cdd76cf47e56a1d756b529d1871250031f60000021c000000b029b036af3dc2b399b5e02d39884ac5d62f619511b3abd9c76e349514969a30a5a9d581ca0d060dc9d4b248e03215f2cdab83c219dbc00f3d667b9f3d50e7edce546e45cdb30940fe2979daa9da0209b6cc44455164e0129fea856b140360aa70567781c322611fa68f53f46ab19872a71f802af1d7092a2161dc7d0dfe9cb3bff1480e2fff040841750be72c11ba40812cb81f14afe6b872a07df11721dcf23bbf6c9efa22875f8a45bb57e707bd820e000000b01dd0f04b3bd14e06859382c91ea0bd9441a329f2ac412a6ce16cc08e0610ce66d682e99588bcfa76e2b4765cd8688c866c0baabab9ff72486cbb2912fe2f71f882e25a85ca98d52d77654bd85494e23f854adb92e706f9f75aced2010b763ab0d4300951dcf79f95d796a0d067e93b3c11e6fa40c84b04c527718ad1e573a6a9e8d3a792558455d128691d6ad0cc07fa19847a7b21afc64f93c06898246f6f69fa7bce7d5240d32e20d613a492e49f51000000b00000e5d3b8939a51ddda10cb8c409a5f4c7bde9669dc5112028f87c41be8d240e6b3102965406dd772bb3ccc630bc46a84d12b8926eabead321b037e07da5a729a787bcc3c6c4005c82154acf7cd8df4adac3edb1fd7c74d46ac6788903438b6651ed8a80189140840ff16ab7bc994f70129b85e23659f173ff6c19a76bded0b1d336be090d92a41628e20a8430a6bd71d3285e4dd5a73391b85a5d728da952c8a39e7c8df9e336588a4321da14d0a4a0000021c000000b022f99482c232b00a85346db49c69a839d812ab53e728b46aff2fd28761af3902c5d6e07832097f1b97aa04e3e427c3340c3753def5f5174de892b5aaffdff978a36b3173a6c14f3c850a57dac47d087e795dd6ba10b944e934330091d6802e2a8d223ea6d76c03e28222947a5be12d8d2c20951c830d8d1cb496ac28c50d929fb8a2d6157911caad0dea1d5408215aec18ce95ff3035b23b5bd6e6c94a4fe40d0eac076ff0a477a02ddcdcb3d1211941000000b000d4663cded1a43667e69ee050a12cea1fd228fe908eb8e16a6f64a275504f787ab40ddc4b0a1aa7b11e397cd04d1777da0b0b6d1c741bc67c10457262dd62507aa73ccbcc22afadccb5a2ef908d85cebfcb6e8cf7508e2ced4f6e3fa54577e1c46caec0b83297f2f3d5662b7efd25e50b6ca736b6f79a0dc412f50a3ccdd1fe64a7ec1ee434aaf7fb82d21dce03861728cc92b1c88fc71b1fb894daf5ab8989dd1525d5b2f2e50d75be18cb9125492e000000b026dde6a9a175b2798c089853f138c38e542f07d4e3f600c08c93119ad40c96a85bc535b4f18b421f715e7fe2e67585946a9b25ef15db480b024cf55f600eb99832ecd42fff0ec0659971bc525bfcf0e1e73a2f32b77d9bdbe77b9bc0a9df841b77b04782b312f7716e0ede7a12e149692085e7b47a31880da43f81d4ca3a6aafdcbbfb9b6cef868ea02c904b247cfd2d246706b6a5954f0c1327bf002f4bf00f7837c8f753f14d1fe2cd834b29a53fa800000fa400000168000000b00ff5a4920b9aca2a95778cdf377a8c3731b496b5400a5b21468168752b2af6cfd967ec22b7fe292f4723919b7217ce57beaa3edf1cea44868649b913ff0241ecb6ee404a5c56f5e6fdfc7c6b2769181a3e420918b8d70dddf956c5ea9cf381d2099b92e7934e47ba11527531a28b1d0623346e92b3cdf8daf24a5155a5cab133c1eb82e365abf8af47b93b35b4476c62051e0b32e46499d64dbec6234ccbf95b74f00e77b99253404804873adea36bd8000000b01e96491e93fad07868b3c3341feef837a9fcdddf633fc4df4315c27a7e30f64dced6a09417d5a3e38f131a0303b453a5bc68f6fdc65a2061636f440a743656bc3b4cb2aaf347435173ad6438a97faf134f673f2d062851fd42c7ad0db4df95bbbd25d8fae628ff339c55cdda408943e32f6c256c1bf02fdaf66aef1462cfad5d15b7f879d617b8bf5b81920cf19e4d8c1889408500d7ba37c864b8dfb2f8a9783aac4b9af8963ae236e1805c4119003600000168000000b003cd1e637ff4b7d4a03c485864c3fa4cd77ddb20ac30b8374244b262c84d4489cbf42d4ccf532a67bbca0ca8de2b86265330db57033d7a302e204245b650e870cab6102dad608124bec6c99a50afedbb1071bd4b78008c7430e8d0d4b573e902b4fc939cccc737c1c6429673a8acc1dd0f728c29ca214ea9dce7adf59e9dd041a7e210ae507437c670dbeeb242a9a5e907b91b7eb1f52c4f08f114f2fc3da793ccb813dfb4ca8719a09690d8eaa7e84f000000b0006e93b0692b580a78f53407bbec29c72fa56eeeae26dac7fc643edc80060234ad64b4b03344e67f2ebb7ebff602fb7e0b8727d14505ab77e0b23b29b1eac7c7535788b9edb02a62cbb7876ce0649cfb861c3015fae7f24b787650fc20c68c5e8fa89fea132ffd95c1c725c86c2f1f23214104a6b3c1959994d7af1b082dd708d49298b651eea029a94caa653f318a0e1815cd5ef0dd2f86c2b9a6dd0110af8d0618bc0fd836a870727bdd94afbd92c100000168000000b02a90915422e648f10e6c4d3eba5cfafbb584c9c6e02b703e88f54fb6ce86882167a892101424b46d61a2505463bc50a77e07baa27252365b81ffbe76f4ecc042b951067b8352a5d73aa2978b252ff1fa50467f9bd867928d63277bf49d76b0281a80693f136da096cf39137ba8d1ae6f0f566ba461908b76eca33cf3b12ffec1728552a0c50ad73eecf735ece22914dd2ad0adb5e1b1a0c2d378b7baa9c3adfb6a7d9a5919b9d3bb21479c8877232f8f000000b024f3015aad861bed22754e843948e14ace0b2816545c4b96c7b276f475f8085fdf8840777012fbffa32d8cebc30d98ec417a70148be7c45bc6b3711178a76628715ec38e2d2caff6e3e5a30a8ea5a7cd375707a7631b030a6c0ac0f9a3f972546c8dd97145a76f352af07a24456d9ded2788483766e0e46023a06bc741a58331d35c4e2c27f2c2527b3501973006a49310d2b308d3b6b0cc00a10ebb34e2a2435594d0f642eb200e2f56c1a7fb732f4400000168000000b023366979727be42a6d41bcb0d2fda3dacebc551fee8ef87115caebf5ee7a9cbc2c666287d9b2faab766ff8ad9734757fd1a71d4476c928c10da7e5b044ff94fd9d819b237f84924d262bf168a1e8629f860eff1559f2770bb32f226e6ebebe6ee2adff7b6412c481d591b2a74450de1822b961086c73903ac31d113a7b056ff082fcf0becf17946a9c1681c87296b6a90d7d5d844c3770951b4dcaa4a57c4cd7299109302f79befd43f8fceb8b4033f1000000b0212896c3eba65f9206e320a43bab88703016d41279fce7fa789df648e56c30d72e1cbdb682de3ff2fbb5ddf1d17870f182e3086cf1e23d7ba73bd9d7a336b719c13804f2e1116a9729b19d2ee248e86ba0ca9837edff0b5f0661beb9aab8607756baefb7357f9719a023ced84ce8d9e101e0a69bf6bf0461baa747351e2a928071eff63c80bef20a51028dcc34b46ed10dfdd3098155ead02a0b8ca52229360ab7aaf7354a4a5cc70650c53d01baea7c00000168000000b0283e26bb553cd71bb0a508c23381ffc2bef86463837b03b0117142f9a96d7d316db50888cca7490e8c5cbd8e598c85f90fecaab1b3f1ef1a7d603d8e6e86b823eb105506e611bc5150bd0d38ba679b558b56e4663cadd7473c6305e04a7a7cac2290a9e9075c55a49080f7fcc602177227920a1db0932373f071b425c866d02828e30c05a030f7431d9d43a8624c7576297e12b71dd155529ec460bb7b5d8e9d560adda40323248c9b9271f5a9c5d292000000b0050e5bbaff623ece5185042bb63214cc0f53b73a75a5769c4f51274ac9dc4792081851b91bc6a45be3af07f339e32088ab523e188210ece64f0d5bd535ac78347d330552214fd1b9489acce37fbadc7def0272676f2837f086ce537d1395fef39a6b15ca710b8492d0b37818cc00e1fb1b0876458b71e9f413549ce19119f7361da9b64e9724c7a47df81d11201f87eb14a9d2d82df49df06e1fe1eb35f711a9e3e9e8a77fd52e69dda43f23fa39203e00000168000000b019dcd745800d7628d647f2338144df82f00bb0a7e9defbf157e634cbe3cea9848f06b1a2783e782c5d6d0e4f7638a0afefa1d6f7047b7385825714b606c50caf541aae5453163e1fbe3c2d13fae4f54dec6c89e01db90e1b4556d186ce1de75655da6e3aeec1b1f7804295555541ed9926a22f49ea3512c2fbf37c83cc8da17ff427ba6313e902efd02872a0db5a876f128647bd1411648e0bbb4f8e23a2c0ed82411941572fd21a28682b729f1e9b40000000b01c31f457ce5f94a74cb0711d96c51a3b13cc814c975731a8c7b909b3007616c097229089a3043df16d6743b61304b21ddb8c1978a5f78e9c7810b043713cab2cc46f321ad02f8213e83437e9f465590449d3d2ee704d3f9b7a19b898751c93f83efb3fb08771b76f876cf73e1eaa0deb1872072f3182020d5cf5d5abd45640567af8b569ad0100ebe0c1bf6b28ab4de2277adfd3e061ad17c2cfb645239b03940aa5b34aa452ba1a2dd087120c2cdab600000168000000b025bee25beabf5c6e1d6042be35f8793034826e6f892c704dd8766554ebc668c9b6b9fb3fedcb4205be20b8aad41877db88aea14680b9f2a0cedfc24e826da190577830376aa522a78e62516ad7fff179dc56632dcf32e4114143d93a4c8f5b5759417eb71d82af22138fcae9738a2bab07010c626850a323d5b96a68589c5c1dfbe0d04a23cb3480c46ab22629b88eb203259ee3de2a5c4d0a920fd63025dc7645cd7aeb39bf203c1d1db33c7af43543000000b0159ba2bf7908f5f7914a549b46cc9a8c105c904c1453a71d5b2b7c83ae21255ba8439cdc3791174bb5a6c52efc690bec06e55fe03ca77c94af85e7755518d21e38b16ca81138c0932e7b005c8470fd83d13a04ec5035e91e1e1ab26e6a65ccd1ef69f954018bdc8d87b96d65a4c9672f301c23aea342e687cbdf257cdbec3a64629ce0f14a7388ee35bd23c3f18de26029ed2d2054beaa82c45baf7d7777653864f5abcaace4a83a46fcad15f874251000000168000000b024b35b9f3911de63afb0b76e19331fb9f10b6a689e27991d68261620c0e0b9ce7622c6516115a8e598012fba1cfda1d01e2564c96d37058c143295751eb98a7d3d5a71efbb1d74dc838aa6c71f6a7a8115b08ad14b82912b776ccd54ea18f81112fbdeb4c7baa0f799cee3a8b219fcb21438d26e29073f6f292f01955137f261b8f71cbf7beb7aa081699a196ebcf09a2295e96ff00c5da9444e3cae0167c9ca38faf7f42b1fc28e684ee7e9861710b5000000b01c2c6118980f23988f6927e05147ea488c2def177883a4ee19482cafeffe1d7ea2ccb9e6f7cd7d6707d20ef2e838c9af1f80e3fadcc54d5549bea72226316a9534dec00e3a4477985392ec917562b7c13c4351f77516c705164fee42f02b4cc8286595c84484feacdf68d244eee9960b065ff54de6e331cf1504285b4b5ec274a1de437dd87543fd792188604007dbc4046c8e290771a671222f52b4cff4fb5577cf04f505e4c5a8a4b12a3486872f3e00000168000000b01b33cdb2f7005b46c6d5ed15237b28d4c824f5e8f23a9e8eac4634414a12c6b2ff12538717759da21db39bbfd89d4b832d131e33427af0a40b29fba10d82ffad7af26bcf24ab97a2e6b5dcfa339099362ce004789b108a84d446533a7dd52523bee4cd15d3bda29a87f304419ab2df4b013bba3d7915e274e3a5bd022fec27f1cdac87faf28a9fbb08878d9caf6708070313ed304f7ee2ad4b3b15062e51373f68e1d7388fb9a0c608c8df5d4273f980000000b0211334edc2663309882edd9fc69f002af678e566e36852ef232f4adf438e923f5d4ec7fa1107c827a2d4e03d7c00d9b2204f39f3658424d5ac4b33bedaaef8d84d62ffd0530208bf2b5e73ab0390a658f44e794f53dc46734e00114599cbf518f71847dd3ede328cfdde5eb181599c2000e6ba04e5e42a4baf86fca65e046985f7690c221f1a1d19ab78e5f652e335da1921bba4c3b9704eacdbc2f53a21f1e83afca08273f5e8870e09081595a3599c00000168000000b01bdca5f7308b656d74675c0ee8a16e7c3b8a10372f276fabf8a26044bb211e1c6af37afb9057100b3ca0c4c4a88f40de082f37fd49e0cbf3a46c0075212018cea9c67c096dd95f998ff8bacb928de8265a584768751000af330f9209dcce9757a00f887ea71283e5d66aa8f47c980d6b07e2c2806fceeca6f89621ece3c7775f6c21caeff91c31197e7d552f4bd84c8328613756bc9632187e943bfd8158c3f5e080efff1509ef1f19dd6a1b5dd7df49000000b02ee7b2abb9162dfd01a9fb29d25591512ed765f9a2cfa62660c6156b030dad35ba704d0529b670a32c18b7ff084fd4a68462ac8b85f1ede1dc895411d71f87542a5069e4ca96e6a68a42861e4c00b05213c0f4f5533da25b0b0d1b297972e6c4eb586eacbff503655da99c087a85a15d2111e24a23ed461776e8c3a72884e5dd1a3b947b77e53ef3a90575b93822a0c9012da1d40d3eca7c34bfd027ebcfe9c899be32e82e2b5db6520107585dfa677600000168000000b01c4dec64a5b82e5a50331f519edf923faa2f99daacd1d98e24b49b49c4686c100c41112eeae64411e5263af627c7822b04ea0fd95ce91c686dd563da44b7ee068c95fbda9ded65dbbf8cceb87fede49d751a4c77a58089bded8221851ad1b39f2437b5c9e1f31cacda0dea1c26318ad723d543dd20f851e4531679aad1f37b1724c1f11229a88d962b189890f21c8fa22ebfac7aeda48fd0b3f2e89a65e484aa78355152f981c4a7efb392f68185070f000000b02bd20c315f19c86900f9f9a8a5f5319cea40009f997f9cc4350aea1a60c823c9c9691246f3e737a0f2f7c9cda2aafb40fbd690b584234558c6668e0a19a138b2cd3a93d4e4db78a96912dc25b7e1fa389836eab4cc314eac0dcc3e7ff737cd8b17aa3744eb9a1cd64bbd9093e4658b691582e1b84f32cb10e05e97d40bbb3333a4c2a0582226cf9188f2501fd0db3df10b948e2530c744a8da77f015fc0108a631256a799aed3897aea3e51703a291c700380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01c5798cc4212d09ca98a16e8007df0c0a29a5bc2d759b4b3e99f71f12c317b723506d70c8731dd23ea7148c0b6ff6a2ea9c51ba96245f8d9a33791fcaf86c1587edd09c9da6c824ccb1a41e33a0cf75bca4f05189b16e77c4985aeacb9d25bc36999367216c8e7179317617537b83a0d1af32271c9c3bbd210772b83ba39b9624bf56d8d390a299a3baeaa212f3cc2b103403684a3758a4b691555fea447c2bfb3c313cbc4de857bc8ceba2be7f4f0c6000000b02c3f840d069f5ff11a8693c8b716b63ee2a038255eb3d9dac891b0bcfdadcc2423dd95ef65dda61888e817206834dd1c237c35fba6a973c1a260b8b66a5a22a2de36a518aee7375e570219dfc85be1ff3b82e23f90d2b6c939f2c448738e9345f9d92d5cd224f19e2b983f7c8b45235519eb5c5e646baaaaca81364bf75b454df0146af98083660f73373fa2bfdaf3c30903f9715d0104b1317b5c6f934d1eaee03fad42da220ae9afda3e9583c32e46000000b00ea69d082942c640c5b7a5f640a725170468f1e4bb6e92c2e395a2ac4406831e731d73423b730f463b7210de885e9b874265d1f0345fd84dd04d095657292357d6b18eff2e8462f91f3775d78184f877cdeb1c3bf2ab2834236a8c9ef0455b15d000a322b9e43caaf172a62558438d0c0fcdd10ebb61ce3d54000dc5bd76875c886ecaab4f28d79d283fc6d6e1e4534117cf524a20985eaad369975cd613173224d3ef6f848bac19bb2c13ac3e8753d70000021c000000b026c6c265886d13767d1ff774fffb138a5895bf1842772faf3248194e467550a2aa65c20a4c575f55af2c41b46717698502e0430509345d8c954dfd8f8ffbf52adfd4419cf16e17777b32f68ce440a44f91a8d67b1cde2f7b59ddf1245a20bfd594cea7406e467b9a4ebe3112e3c99ee8122ac0eb4a8f98042c4fa4ddb23652109d57d37fb6b94140de20badca2ba6f1c26d540a3bd3da93e077a2dbf220db53ce2a96f0bccd80497ed9452926e170e25000000b008915d840fee443b0a298c7956c7ad0dc34f3c56ae668d9c4cb1e91eb53306cdf2354bfa97bdacad99cff5d92227fd43e21208d9e2a1713b28adf0b046f6b4feba211ee7ee9c24f421b9520dd374db881e6d91e51de92fb72c00283e62194b1eb321832948afa0e910a3b583b85976a319a52718967cf9d1d8c1c1ed111d5a51c93c933b48612d12857d8cf96d53cd042666cf8b44f361dc942dc0c865a6c60ad86471c89272e0f429a22b4e8e813e3c000000b004a4e0725e1475129221678483b23346f500203c4c8a5a82950581027de1c41b4c8e59136aa2975953e08b895eda0c651b111f3e5d3bb875412f6506073ec4c226837e175dda2c69085080067cb95f642181bcaaf2ce38241a9bb138cf219d15c64659cd4b3efdd818e53364f6d136201a6f507c1f381f77fe1ea662839c34dd3d4fe9f8c1154a485681372c4fdb9d5a2a77cf589e906e31cfd47ec11de1ad3af24389e86ee50f11d6e8cfe6cfc12e990000021c000000b0262246597f19c3d214e3f4f2b95a1bb83bf8fbf677a140b1ceae6ecd5d7f4627225c64b38d1e1660e262e666e7ca89aee185f037ec31373c2b8457811cd158bcff350cfa4d3ce9c48e01e59ea6549806fcf27973770bb30538cf3c0df355211399ca0ae8a967bc2911b8d4b4f5829b7f2d739a469c9796596f229dd9253328f07bcdd8e97766b4ae57c0abf7950a34bf07723019c8314f2eea3e8bbc784e832bcb281df81b619b9a98b9442854c64891000000b02fe85e2ad4bc89b3c516f065fcce46e5ee4ae0818123a343e8cdb18f5a4dff918546cbc01b1567b50d0ae5991587b4e40a15e0b26124d713982228e6614959fcd548ddc8e4d28431098ffb27011f3303767e6d17931e83638fa058effa0a8d97fbb348d512e28de2e65278a7647dff602e977a33e8e04f655d1bc6bed1ff2dbcfafba90bc3573d1d5af9abccdc97484e0c52a6542739f0e49a2d44a2a4f31f7c52f11b8b316fd0c7e25322051b16ba94000000b02a7f3680fa9b52e3667f6364e5c315c9465260ad5bb3a2cc7f4e003259b0bfc2e3140f5129517650d0a4fa9669a968d5b861f6681ed3175032cde50e72eae67acdc5297824e4b3fd39518fb67ad93eb06d6ad83c37aad84055ad930714965065c2dd6bb8b45050b5bf8550c74104a2382e405d8190a5bd10dfa23fc1f797206047d6fed11df2e435a7296113ace35e8a229f75a4949d8794ddb6054774f4dad508e99c544a33e65370cc748311c672800000021c000000b01c9b9717922b10426765d32c93ec6782137249f839b6b8e844feec7bb6112a5e1e7ae7ee48711b307a084ec9e9db559d190f6b6b97f836f0eef0240b62adf5ba5a58cfa9af87c7a8288d534289028a73b8856a8875ad3e995ace1ab5189cf58f6e29755d3c2e57517927386d3344f45e21c7490244e1ed937b3b42d828358ed4677af0d45a2575972bb6711f8ae3b9c1019818d29df4a6cd5b6b7ff61bf5ba138aa918b648e6bb2fbbaf273bbe92c72c000000b015e5497bbf4a53c4fdaa18d7132d9b32bb86886f469e0d14391e4572b71a4116f8411693443a35467653e28eef7fad5e78c14b1d0021a42f83f3f1857a9877b3761e1cb3b03c3a47c04eba216181b2999064239c594059cd8bf0cee384e30af49e36ac47e1188fcdea95861f6cb9bf2a2ed6d2a502d60164c5ed85c95d28f0506810c1322071b53e36aae16099c1003f2a7733c1eea426fa6d28a3046c62003e586e08700509f7cc97a11dfe80fd29a6000000b023d5efd52a8727c3645130ae3265037234e3b5d72fedab10db8d606f9ca6117d163d5ff08427d5908f62d97f9438bbfbecb7d093890d019e1a08c03f49722c74660856ccd9bb8a6e6bd8b40c5dc8f8f245300ba33e8e3527e6ea8542b08c54ec2acecbbeee37b63610241673a7ab73cc03f85990e1c7e46d779859420757217cbcad42d048e7852f00607421310cb15d25454aa76af433b2ef297c71d145af0e906c1bd0cc86aea6fcb6f8b49fc0039b0000021c000000b012258cfaec8b7aaf98b459bd9851239ef7237e78fcf0bc45265c637efd700758216de9081ebe2c09adb748eed414ecf04616d8d1aa1ffff9427597a28e194d04977f26cd3bbebeaf293ee28a8f928ed9edc002cbe192d30ee634d95c6339599daffb653c874c37825d18231145e8da761f4dacc851318eda3a0e193d76a617c7e217014aa17be4273406929e1d07b4d4071f8ac1ed586f1ab43c3f6ea04aea749e8fd9c4ad2e01f3af6080d556065f54000000b01b7779e32fba0dd9cb6dc803d15227d6b964f67cf7b5653452ff94bc934cb2e387e4ed7ed63f2eff6f6c02b660e750be74ae325786636c4b79e7f1c949a7f23a6375198a467e833c8ae18bbf52df1d5fa0e1edee81f459d096234a710bf8bf61fe061049e85a88ca6f8900fe50a4528d005772c884ec8888e4dc550c5cc9f1aa03658914058c7fd6aa0561bb34bc1fa52b34316007f2dcb685f3d1852d4e95323d607b6736183dfd43736d6ea9c35516000000b009b34e505bc07abc9c2a55c6275a90703805f6a655247b43a8aabe541a95442447d0b8b9f6b9456a57f26c108604bc992aa0df5607e20a09ee479fdb8a68f471d5da7dc166126100b869f90ec1b12d0f66f03d94c13d6171506ed108de462c7b4b720566b4e3b28cbbf4c92804549aac1b01af9b971ec93cda912f84f8dd3a8821deab62bf9e81a60ed7c9f72e8033081d7254c0c13cfb867cb1a9b3964a6f5a24360d69c6734dedb402608ac52dcbea0000021c000000b01a9bd0269520a0b8e8951b7569b8b331ae9070cc5a7633923af42e06981b46bdc375059f89262d3ed9e483dc5219a355a378de229248cafd7fd4eef586d3b6a9c42eb54f52ee0c1fe4d66db580614ddb3123a8970be5683abfe3b24b21e60f153f1ce52ca0ce6e06177e97acef02a80027c761fb10525ca72e66f2b9053a85af9582b8a569829b416cbc31bac4daa66403f1f37ff8f056aeed36ef30de6b3fa66b9dd487b32fbcc5e5b1fd7965ac41b0000000b011f1288626d830148bd996027702e4c6c437765fff78aa7d31f5d5b74436a381a510b6662b565532c94098d335f4bb025513d0690ef39042e9b84303123d64fa0673504fb41b9d2cc4e5c3a226de1d555b58cd1b79a127f89cbf28da2c8ca29e1b0825113f0674adcbd6bac32a6cae6028d98de34ca57a6e3641a0a85107873445699d22b8ae1198607ee9cd29d649761f7c6f4ad923a7f3577b379f4c7f17be214f0272db86608a04b965563a816f68000000b00f944b9687ddad00e17a4d910933dd7db99f3e778c3efe430bd1562f0f65cef564f422966723ec837729f8255d24f564456bd6554dedd280994b57665a4f5b9e78899eb7aeaeccaea125f8ae93f51e8f76cf83f00a28405f558639b42b1fbdd0b5473324f09f248fd676019c36f90ade145aa869c3a5bdb10b2ab3165eb31aec1698343e54dcf6cead83a467e4a2c24907039c24ddf9fe4b8aa3f2bbe9fa97f70c714c52c6047cda36e2dd79d6408e2f0000021c000000b017694d802c8f23734776580fb278d12f9b2636dbbaf5ad4029741bce11542d6477862f427e9104860e7415ec2c85d316bbdf1a64bdbda50059965c4430baf9d1a9cc5e9efb0ed7be0c96190e6946bda8ffe1a955867cfba74f4ebd60ef325c955c3d2987cf069ef7e50819c4850cbfd70da4e070153b60febc4be18137762d2388ce3bedca38eef011658ae1acf56aa506a60d339b4aa80bad2b4680c22227fed52a3d238eab8f0b63131113de98a783000000b02db56e0508ebd6179de9922d1213f8966942d664b920dc97314780a901a4505cba0f20f395f6c8f7eca68f1c6687d988af11f5e3ac84ea31f87e4c56b6987fa8bb1f5fe1b0abe7435b3fb5b9ebb837f9e87a252697c9763b416e3049068a21a042ab7e1888e3c2e7f14eafee981f22fb148a39e3c9f157574a8aa2fd38bbf883a96de7353618ffef6eeba6997d2638801b5c4295c65dcbc59f8b577c258d087038653f133717c6b6c2a217c339db31cf000000b0045239f106368eec0eefdb5e3cb3cffb4db7e9e052ff6d65665576e93d4e3f43084f40bf5c19866b8e579a36631bfd78d63dcce6e6740f601d33c856aefc11b44418d2134a5fc6afbee7af31c0328ca1097a57bbaac1e79aafd8babc642288622df71ce2b328eacd8f5d0f35ef7b44c8286a1612682809b8d8242120095a33ad58183cbb5816bb2ec9c7d582dcbb4bf8048324e204477643dd9a23364c92e4dca79fb4cfc6b3f4cb4084fbe4793848f00000021c000000b02ffe925436530d876fd2d2c4bbb66bfdc5b19b298aeebefad0f1aee39eccff99c5c79a8c277a40e8b0defaa580c6b257117e7a7c2f65ec417d5a6890c0d5ef8b90067083f51dd43f3781507a4106d006a0868d18e20e74370008094590b40f55281d528a1711bc6def0a488d8813119420f80f3d9a53204471d4f88a1c5e98a182f02f15705166ce36a433d39b94a65e22c95b0f8d2de8efa6c5f4ae9f3522120ae719b226a807de05c17975c3090201000000b01131ddcc40c6d6be8aed16063078ac74cff034468a6094370f65e29e4e906bf1cc8643c41077131b7f53c424fd36f8982a37f84aa6672bf3d6d9d0dd2cff4801daa5a3d8e620386c99e9ed35dbb8b1c27078a5a40b3d11c585ba34cee97ecafbccd451a725d3298da0d75a9ae10f96722503ba7a37bfb995c9114df83d65ccf74f6069db3e0e1df54ed380a230043f9d15a7c27142c5bcc8fc734e5edfdba27f0b4752665753eb0454adbbbd1642c87f000000b024bf585338e0588652086de8ed2462c049386e47c6a39cee13d7e3d6a04c192cc632b6d9aff8177bb9c83f6682cf23cc68e26ab4ba7ce531bd281e8cd73cead7dfa254ba4d9687fcc7f7f0309a7df2a785c345dbd0c16e04aa4b5e07c5b276b3696983d83dda7c8c2dd18a1aab292ff121430f6472f09f0f95c05041c807f6fa50b092b4d2771c6fb1dc05fd0db88c442b2ec1edb7cd951a89b97a2d9e781b2bff665dcf5bb5d8b55d74ab7cfd147e7d00000fa400000168000000b01fe489809068e5fa44162aed94e7d95b2b6c428126d457bdc9534e9d5a63cd497ca00b58b978b07c1e4e3e2ec242fd48e984c48115912945b3805d15e49c64d169b45e56ab43dd02ac04794d238eb3f0a6950953666d179b99c684fdf92fb320ce982f286ebd86538c4601ad709e8ef301bd88f00b7725a106442e4f05c0d5a587cf96d0caeb88fb89ed0c09566d4cce10548bb3f890a7d21f658daf197b45010bb3cf4ad1b77664f5e3f67a6d6a65f8000000b014e0a86ac0104bca1815b3bc6c11d35b9cd653cd3fbd9b9be8e24020cf4ac51fe9212ddea6c5c3c07298c76d124490a45c0c7541df864a6dc9b78bc9e26ea793d08b211a8b09fa23483644d246b355efeb4a0f8c0f4bed2c9a16ff89592c979cda9a0e754fe93cfdbe1fd33a8e223c001849ffadc29bb3777e3c176c84a441d4bccbf7550ad9124c85c7d00dacfb0c231812d0b69631a78612bdb004d147ca3c3f798763fdf1409c79964a4a9cf9329100000168000000b02f0a028562f2cb0ebbb8f423b93d23d58ffe074d6c35da48acbbbb157dbe025d33ec41286704555209b7f5a570355bfd9f086d9552bf135be1a3d6db86a8d3285e9ef6f1b0dfd96e7525fb73d52af2dfa1dd67bc9c0c5ee1e007f71f8e79d99b9d06830eb2b65384b76ec470e0d7ff560d2fc9a99683b38dbbc8bbb7421b611006b96017b7b1cfa70a3039ef23ae06e3149d72992f7b2b1547a6e713e61ee30b04cfa2f8eebe57fcda9fefc69920c917000000b006434dec6071d1a21cf91c85fbd0727b2ba911b49f305ef63c832ea420983e99370e42230ecd95f378b7799fb2bd834b36b8a9bee630b1bedd306759e06932f26f96facff9508cd37d5184afe0eaa17af838b38fc3e794984f897c1858c3630f517443f282f16bacd384541c3794abe2207bcebad38ce8f7e9a24909d86ba067b8a9a720b859cb1a8b3b510e6377ca011f8ff03a376d491dba674594c91114df84e6dec8443c56b6bbbb27fd4e3cc33100000168000000b02d89751d166c60f5ecb581780e7d446c6b2c2808305af22aaab9636b4cfdbc89a58d54d2a3763a15eee3d016147bb41b78a68f8d8cbceca61bb2263d47849aeda0db48caf9c747b7d7d5a6fdf13156cd2786f3028b4c55ae8a59fdc95dda28ce30b59319f2dcfa9a76a46f59d6e2bceb26b419aa1b692579849e465ba1c25b183972e3f6bee8e1c7dcff426b390442320d12eba2b173a44c071a853c74feaa6637235563412ec9e348c2bab903d2c168000000b018cf6e1e3d05a1d76fb8e37d88fd1b1a1cce482434ca4de7889fe405796a12aafcf04c8d1272b510bf4ff184b6c28548bb2153e369b1cfa4856de7f356f548da2508b3582e4ff82f094a29e0763627906f1b59b437e2a631ddd9f5201cdcba64d945c3c81325c425e84c4884008816c71e1bf25ddba19850ae4d3ca1e7f721debd8535e7936d2666ddc4bd2c96e58f55048bab8e0b67cab830f4d0e234a5ee96501309f7dc72ba4be3d775e848c0782000000168000000b02cd86d33ec1a8ad6c957cfff0608aeca05b63604412369516780abaed799f61b81db462d1ca4f7cedc20ce376174b03ed9298c15844e71d4791e16250532306b06a1cf93cc2466bef60e240da9f3947787fe69950c7f93df9bba5720f48f1a1b4413339788ed678343ee29780371e3b4280c37b8c9095a0cf199903ee0fb0b3a8dac87c8820f05aa633f1fbcfc950c712983f3c0473d9951cb3f2d4f3160615050882d4f9efbf07cde2b1d57bf034640000000b01e82038a8c0b7ab35d8a89ba56800c83a4ab75caaaaefb1ab437a603595271773937079319ffbb3bf7c87528bbd60bba15eff381883a3ed01b889d00a8abdc3c52eb45c0a93bf4cf9a67db817dff7be2f03861e40e5582199e80a6cc6dc4be4f3308fadfe755bc73375273f04b69c55a132511719277b9528224927cb4b232fd25b4215494731f16c309db43b67694ac2d12fe32cc32779d2f083ff042f9e38934798dfbeb52326655c6edf9003e45b100000168000000b02151602d8209f7f632b4f00769908afab27f52d959b9d1bbfeffb13b3a56b138b98bb47304358248e7ca9ffffd76bd804686f848f68720fd50f888b6c7cb6bf550201492ea261e8f2d0a9dce66dea37ecf17cb514ce3baf115389870f9a7a06cb7f355d0e4a6d76fa1db39f1cf1ba36802ab2086a8fa89cd8ee810c3ac6e05589d279ff7a37a55876987b7239313ad3a024badda1030d412e1615ecab3a086bdd33a86419fbfb4caf272e369f2e66402000000b0150b6b639e77fccedb38c951f4835b04ff65e144141059670f5b2ae498a145d59c337849f7505839654ef0562fa5434fc73038f03c4d102ef53e39ac1f8b804b3db1103f15cf5af868c467b481f9d02cbfa08968a654229e5754e88e29a23ff0aa6a93ca618f2007cce2db13f28d80150c70b55ae25522007709f43b156c418c482bc8927cbb57c7756ca7ed709aa96b00664d3895c3b62daef299de138ffae8a57a4e4d80bec7bc5f4360b5f91e4f6a00000168000000b0065dcb6e0c712d3161fdf97e18cef9da6a953a06701b083432749ef65fedb08423629081ecbe0b79edfc1ac5904aaebdd06ded9f717a05bbd8c0c69b4a9aaffc8a95bc37fc06e8b7c7261a9a1f25c1597fb214c2de3f6723eab3a1bcdeb147597b469c7bffd36947604ab10452677c29038c101894dccabb3df75d6fca23d8df30a25ee0790a29cab6f8d81e0e8de86d05db7c8210be3b99a4d319d74c74dc3ce4984f6469aeebc79b0c0c2f4e68e0bd000000b00e23df6af6ef67093cf5ae965b4137ebf906ea8e9d31339c4127e0bb8c96d5321a814b0d06b22b8a919d6ecd80dbb9cc45049f5d482fec9b4e866bc18d4d9d418599c8640e8c3ace8d0cecfdc52658148c7cc1ba56eeb7defc907ee33123bbf18f80089fb9b12330161d83e5fde4949c1077bd34a5bee7ea974c2f6f99c3d1fab67d7339cfd31d68b7b76bac10e7b740161f5c26cb3dd2e14eaa9c04971c076f3bd8eafdfb4147dab69389dcf6f2afe900000168000000b00be9451d179c5856f19a0ad89753ea6ee199639b3ce604a70439fc31fd0ae36d4aa31746a811164838de5c34ee3dd91a01002f3f921a713b4a6864dd45b9eb9c50c97ad8b0e7505972ea993c3c21f04e2b457629f5676a371850752e168ba76ce9f7376ea1337c2ebac3ce6c055d65b42edca3deacaadd3f6503f5991f33f35ef2e66414c2d18fd34591bbe1e667216c0ec6e4c7768a82959c164e27e9ecb9f688eef584443d05ebae9d34c249255c94000000b0154e243179608d61a5160a1b57ccfec3e34bcc0514d07ce0753d4439d3a4d2901df5913fe59add8c2eca646f3c1697925f4b026215fd4d0462c05f12e1e18fc6e0fe6bf327546bae35cf1073c0167f40fe116da7d08765ba45beeb2d3c939a5854cc10c3fa8ebc07ea418fa9c30b9b48047c2c44d36cd2e2ae5b3aaf54e1b823e7931b2cbe877a7b0c63c23b7188e0c92d82b8add37c8d95525ff7ef631fcc9155b03ef79e907fd81233f158c83c452300000168000000b018ce7677e59045ddbd5a972cb590dde7e1ab3d1d6345dd27cccae0b447a35a007e43be0fc22061d5d72837c0492be8eefcc86451b7d3c0c8cda865c25164753271961de2c60965bacc7c54808ba7d272b536eb7384bbecad14a11a3a9043c7e6f8048f8df6f48312d56445d699f66b2f2728be555a5a22cd1067ce68450cf14ca4ae07c846615f6f09d8760248f8a0de07683a8d658f627d6966a88057c2bf8aba9440c460aed6641c2f7a40260f4bd0000000b0057910cb664fdff2cce7e0923b1c9b8927e1fdf7bed0dddfda56f97f5413e9efefcd50f567dfeba5e6c948f794cfbf790a8d2ccb3f21f1bbe77c6b28eb1b3669f683e50c3d056fe0409c4387ef566451e736b3b00fb938ca833d28e909e35ecae5728ab769a008a74706532eba33c3a803ece65308b371a94ff56711211dd00079ff0ed02ddadbe75d83746cbbb0dc2c147511f9c094578f26c323afd62c31d1e67c6d52ed8d0eb6670be3aca160e41500000168000000b02625de6d835bcd565542cfb17cfba11192d8732929bf8422e7721ad1e5a3f6c4721d2281eff940d5f7dab48aa7606e8b01997dd7db8b37ccb0c22bc777fcd47f548b137c06c50c102c76508bc505148a9a9153adeec5458c329ab868bf8d09563a268e2f7087896495c6824a2607c92f1d25b7f3e78688f9f7ac6a8cfe829ebccb80d07644667a2e9ff18797d1b8380f19f2010dd63800d657d2d895e2fe20cb00c678b92d0db4293e0d48c88d29cabb000000b01562dae90b16bb23dfe63b3f9ebc2c9ff9fa98cd827eea5f8f5537bbcf222ac4c8c5b40250cf84442a06d979515b95185ffb08323f4e10845460bc7d93ee00fbb1a9dc8c6cb4bd894062fa4bc509f8b5f8e218290fa00bc05912189e9d5942e3860a61d3b3738e384345a0a993b14fc01cb3f867c741ef0f47ef194a2e2733bad4d4265a46e7880e599b3f346fcd02771f72555b7827cddd3cddb1c78b9e8ff4cfcae582dd1fc90039ae3f8e4fa446d100000168000000b00300ec68e3a62d70dc2756a0df8d5e23cdc719c1e75c6cc0b3c2d099a1bd91f716c5e58b94ac14099daa01b51278456fccc2d362b575d46c110be8ee9a6e161fd427d3ed249a472d30fe3609141dae9f8b60d82da86f7062e92dd57cbba720aa2d5770dc0573966fc022823acd332cde2037c1a8e52c4c9db55e776e0619a4d6b6a11232a083f8e51789e6d6d2f06500279f0f4897695afa890a64db47697831eac93a5302be54c609eba8bca466aee7000000b013192f843409cfebb2ea52ce04b0f0c1fea42274741436ce1a4c3797ec6ff67a7d858d850db8b17a121d2c641519a7114a7850b52c390513bbf4825d9fa8ca62614578dd1516910ac8cbde7e2fb7cc27470f2356f7c37f12ebfdf2f1f6bd477a067dad6cbb6cf530c5b89ac943176e3a18c30b560f28009e11052fcf70a22857ece8d955a68bfff3be75dbfff92f88960992c6210d71d3444a38f6ed3d5e6fb8e79fd5ee8eff4d90b7e876c619030a0500000168000000b02e986c829fb6c5346b30611277779fd51e82ae883bcb7dfdaee3e03016c74c9024fea6c13b2b10f4e6c48cf016e9c63c2599c3c172a4ab3d8a41252eea8f82ed527e6c7484f9df6d8ad7ef2978b4418eb58a926fc258d6a42ec08a14af52938b6f4f91b5c3ff8ecc90db581504085edf12dc9531a7001171d9020b01a33749eb1e7f5def4fe060fd350625923204902a2645630a09951adfb65f9ec3e969ba30e805969c01245fbb430b2e4ddfbd7b16000000b02cca7b2ea336d45021b34e2c3338482f782de2cda89a81202417f75891f593b6e0be27a2700e3cbc2d4eea5398750a4cd3848fcaaf258fb0400848b539ae899fd77f0d41dea4da8db2fcfc8579f0bda774447962e0e360ecfa21ac1cc233e5a2546914c4548c510dbee826f45e23b8b4250e9e61264b32c8b1e2a89d111c5c2b41ebda237718848d406ab6d8a7ccd4e70142012356c57248b3dc118d15a6b41a811c046b77a3e411a98e67d8846cde2a003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a06ac7e9e4b3afed7dff28c63d986e559ddb10e3949a5c60aa1cd506c4071dc32a5d0623ff3f823e6be33216da7a09a5eaa5ae67fc008476aef341ec5033107015e9f5f7a7f45bdf5526ec920f3afeeb17773b1bb4af348f673e64f9a4b843ebe10358b4ac2788b3a04d505bded03d00174e99323578d62182dcd9a678369d7bfc7533bb476f1b1bbc5755179705e611f04880ef65534b087f92f5c5f506f7e2817e77aa76fa2219698fca27c3d363000000b02942ce04d937a99a78f55ade06e9a010015fabd96150ce4814c811e2a015a39956743e74ed8a04cec30cdadb12dd71cae16742970eb782eb80626c3622968769640f1441d56a5a92de2441159633548e3b3876e5d558d54e999d445102b0e05708c89e6ade6159b142e821e1e504911e2dfdf2cca6d32b2ed1611ff13519ea8fc16891da2411ae062862c85b1d3897002a4433f23585cb520c8ab8684e1db72e9daec8b3027909e0b20386f906533ca0000000b01284ca49999aef0adc96dfa54fa865a8a8e097c41f15a504ed3c6a03dac18791b421cb50951acddae187feffb6e2c936b779b73d447bd3c32d453d54cac65e0425b1c97ca853c3e76136ff101a91259598b33533306f4eb9beea0d9fdfa2a1cc0a65563e4e6035c7498ce822612b446b05904d97479511ec4b91a071fa7f06a66aae4834e2532f62a826426cc4c7600a0b89c1ffe65d158b7038e0a47df9a401cf46226c4f10dffaf3ce85df52da0af30000021c000000b02b950aa8efc6523ff06e7014aa574e3ed55466eb34fd5449b3419a9052826f2092a91f3740361a1034a0b55a1cf65d986d74dc4c8c1a1392b72a93d4320f76697baca4b13444c53446ed76d5efa8eebc17540432c3340a46d9341ee7a70bdd4798f52b6a25b6c7f29850f1563699872818a21ab3c399e4f0b35e109f68b1cc6ec4fce546d493b0518e199f72565e25090d0e56fa0b38a3072852b2089b8c067d08d7b9f8ce1928dfeb0d9632cbf6f504000000b02bca76f6aac22b19950b2bd744f1b37e087c372bb4ca1f78af05e305e365c660312d3c55b087356bc27aef4830f507a8f733c639c0197a5cb74a3584d98066f840baf8a5e4c8973a4eea20d5680e068d6fd04bb81800d6f4d504bef32ad23d52fcfbc3a03fa9755cd7b111d208fa39a30a96cedc5554b77fc016207d4b0b29fa6cb6433b26cf98f378fe95e7866db6760598b02760d6e3f01a218e0c65859ac6e7074268ce3b8e8b170eb1e3658e206e000000b00d061689c4b88478380676790a941727d3c35b169d0434cee4439244ffb8ba60d7d92392bacde9c9e62f115f8faf7f567f0443258e726d51351037890045e81d12b979d8a23157ed3c058bcbb6c6503fce1d9cadf9e38a140279c7798859001aafbcd20d273966d889e5d31077fe51c610fee3f5743c08bbe5b71f4143eae6e7af07298db606575433fbfd49de75d2b8070700861d49f6ce9c887642707fcbb13d1d5758691a20dbc0d1dc258d0e9bb10000021c000000b00f84d94ce68b98d51fb164bee5a35f9b8e1fcb464b5de29cc6078000f5fb52b7f97bbb6b2c41c5ec938e0b9d6e00b8e073654f31ac21690dbab9e3d34c19b8deedc85ea53743fd5eb43e6eb53918168309b05667572f34c2ce35db9040f4ae214c3db2516f7972cf85ffb2e3d5e753d00a1a755f9638abbeabe946e1a30c1e71412dc801847fcd3f56fa77ef0717c936214d7d97a71cfb3d826f44d2c76827a0da02eea0d9a7c6c9ee472030b02a10cc000000b01652b870b9b695ff1f27a5958a2696c60c2f7e9f501ea8098bc625dee1902a31506886c080de95dc458fa1878eb4c1127f2772b2868fdebdbc52b63fbf325a4940839c7f9723c4d7a2894ff4d31cee065607380e3909f943fcc97e9358dc4b07f957574efe487c509b85358f9996c0f1207f55c6da8f65388f6a99f8ccddd71050dd27083289be68a548bdf8fa844c90286bc2a76a92d640ab0c2c15ad32b9a77e05b658a4cfb987f1cc93053ef8b61b000000b02615884e2cb3c20b508699ac8ea2988e4e09d14d13f86dc6f9337956fef9377c8ba5dc8436a816836fd63700de9bf93ff78b3b88abf3270298b2f1bc84682b7bd977e9cce49354036e1beddff4a96e570476ee367d7da94a959154aa058211494bc754422b56899bd4f9da52ef7f3ef92fb7e78bcd2e897a26a6058ecfaa4c12303261d3ad9d3f881d653fb84b41e6442c33e30509ea7cc630462fb5abe4c2feeaecb9cbe343df3a92389ee76ae5ae1e0000021c000000b020ad3e5659d0c8ad09b1d869b6981a1e5d063187609885cd0c8811ef9264a99fc330fc953d36e80b68e18cafb84dca17fae2e88cb0293a642102d59a3f798487dab0ea8047f20d83c00ece759f6b29c65071918125df7e3055f41262355ace3cba141a6c2f207eb7af845f656b343848209684db3270b3708d58ff31c970593cd8a06a735bd391f81293500866cf629b2ec8973c853e3a9f03692e1cbe95a8f18484a48086d3195462c901cd455fbfa2000000b01925e62ebd139570e6aa414978b91af5fab958a59540ae4476303cfe52caed65f5897e55243ae9328bebe43ee0fbe7df9c27d20f0dd27ce08dab228972093a95529a9e83e3ae09e9094187146cb8aab8d5ed9363c4568bc790036967369f9acbcf49ce31cfbd73d95e55eb43d9dba4231b4ef6bd9c41808ccc433fc9320f2cabd9b3bccae4810d67f13389411f016d2c13d740f8853d4a1971ccc139c647c281749e4b24d89bc924effb52cbdf81326e000000b002956326fc2c9455c338b50d204ff2f87055fc54587da7299161000cf8d96749f4592223d55006407829cdc101184066ea3c98e0d04fabcc2d863842c0f652ce4e5cc0beceb9ebde8cf6b1866762155db228b26234aa39903600fadd7e84f81dcdee4bfd9848d2aa13a7f53656b2af0d012d83c6bf3623f3598e640606daa5746e0d55183ffd861dea9ec8d46cfc090516c07043732c6d3bd445a0572b8019ec4b0077797b778883bfa46a26387222680000021c000000b02960fe5da20dda4524a6ef4e8e54dcf61d8713b55f96c086820f836192fbac92975735a457b352b69d2200006f458420f87853c7247ebbfe6282ee6760c78bf08bd1817f1aa55d588f62ec4f60e147eeddf69f00c768a572889c8d4add769f7279aa6df4807d33e267f1bd8414ea6180076686e0d4882b2daadb8b2dc7672c8df071a9a21749e1914af6f97a8c4f634e1ab80c1fa39af426f9f759926c62ee77a6f30fdbea4d8951db6ffc6f6180ce23000000b02105712c70c41f12b2c7d9ac62093fc6b046ff801718236c597a90a38a6ec3b366fdbc1213cfaded9988dd085c1daab2d54268db427833e6fc39bcaf1475f4aa21ccf6a7e317a94d911784de94e1f25e7d4caeb2d85155e0ce5d9801ffa58f402ad06b35b04ae22c78053687a917b3c8247f813392489afa5998715d1f840bc7fdec0a6426cb9aa97fed5645bd7b178c0be21b3428142b834ec2c05474fc19f555f612f0b61853d6f14228747c6db869000000b0028a3241e2b7cfae8352024af82e1254f8fd340f69c9f35d86caae4171b34b977ab98dfd1f228d37619f4284089ce8f7cf726f6c3295a349c823f83b96f1a4e57e97ad26a81fa741d5146aa261aeba342b862c779090e01fca4e79071bb471b3934d3c4945b8ba78fc1bd4bff3489e441dd368b6e8fdb3d8cd5c721f4aa7ad8f20d2f25125c27ef77bbbb95cdc7e1fa4236ca40c356428916a063b3dc4633cb875552ef7e1d9cf969617362cef5b244b0000021c000000b01de63ae37962dfcedc9a57519f810d15b58f2fa42bea98d7db804de33e421876fc1392ea5b65a4d8139c88816005341deec03e8a8101ce2fdb6a18ddfc6c34dc018cc010b53c6fa932dfa0993c225a8f26a9ef9700bfb031d415260265a6956cdced89d4314f9f936088ac09bdb7f5c01ffde7062641127ee51aeea730eb08765773478c08a87c3c41e6819b1b840a691781bc52c816a94d6a8ecf2f8c560e72d48361863b139942a7e62e7d06cd41af000000b0051ba864317eeafc3df12970dcdb96da420fdf11c41853a93a4a886ff877a531ac4ad00d18995af3db70703e255c7e925082eabbdf9bb5430b98a032d401668c8e64e274c711b44a8630b463424dcbf0fdfe561c5dab56f519b25fa96f4981fce28b03db8cf39e8da5ca9f41ddef37e6250bf83a0d71e161df93b423b7d5b0ba775535da6591a16984804bbe7d10d91522bbcf6cfe1613bb55ec1613d634bc827e81bd738d3254af6d45a9e18ae88211000000b007fb4b05a83df10963d36586c60f89f2d590e0be1fb08cbe3626e1d97b2d019cf8c25d737dd734ce3d7387a41a394abfd26076fa0a06c3e151476da1cd3e9ab0262d06bcd9b550fdd1c130738e4738e95329bdfe9be9e3a1dd1346563b23f748e56fd835456e8e5675ab2d4f72ff4021117988f3df49c2ceac283e621ad15ff2c8cd64534542dae50fc50048e076a7e82063f2b5ee5d1bac6db43a21ec5118883f2d59775c884ba3833e60c69081dd3e0000021c000000b0185b36946e675483eb5ac3f036869409deb9a7db2b78ceca11c276cdd13c300fcee0d50928327d39d46c9a64c23e70386854476b8487aeb9956312be707be77f2d357354dbe25e767f97120eabff0ad62d2875d19cbdaf765f47dfb226256808dacf41bdd98009291e0329f186941264195e0683504a964e1bbdd96b07562ead054707e8d480ff24b89a2056d5ff5dc80edcb90bbcc1c30950d1781a9af3e7bb84ded36530cc2dafa4924db9d66b7c1d000000b01dde33da73d44b7d3e287e5349ca18ad412814785705cabd852055d252c6039220709d129f9430e98ac1935e256c3580baf07b0393661a14e6fc796b5c0109aa2431da6f06d8b1d67ee7466881952a4cc90d2d06198b307bd5ed1a7f8c6ee19e14d788e9f8be092110458f1bfeb7ddf827cb86d5bb2c35586d1a525b6275dd98922975d18547631269682ece3da0f49901204d164cfda0a326db84a7831f42b87c7593514a56c4797fd6f94c6cae624b000000b01fb23e91977643456fe022a223d65e3dc59655ac5a1841bf9ab85e948285e04baf974e77f92c5c7b5a3297b069a3cc4afe9f4cf69da190b212cacb1ba6343855002cf2cfb204479350e30e2c6db594bbae1e15001a11002946e288404d868aac92feaa07b36b655b4da9fa0ca9b008610d670b013d4e1639abbcf7dd68aa1dac09d333e6e3da178476063f206194f7140f73b730c16852b7557df67a6372476d664482f42d91b39ed3daca1906cb75900000021c000000b02b872aef5c95970ef29d010729d97c98b7abd65ae3b9526c42a36a328006685a9ec07b5469e49c998b75c673c3d97f3ede30498392899314a9d6f29730e9c3d1ea2afc67d3e8ea5179af01b911f3464f463922267f74dcefa8f2fc714adc3cc6f5e18d01d15e057dd95e45d9882a0c3921e525f12cc7acc9edb46996b3f9b3a442d3450a917a796993f692c7cb84af3225930e89ea294e25d82f11912472597ac3cbba3531862e2e9a89fec85e1cc3af000000b009cdef298d2377cdcb25e5ee4570ff71c765c89b41d8a39b8eb555cf255d222dc6e299acaa8bddbf3cce097328f937333615f3e4d47ded3547402d3c6ddc7b361a67630d12621bdd162fe9948ed459302e75600723fd2240f3462e9b4e2ac8ac08d99472050e09b1a9048352857c8a541e80b63c498a58a389f77de5d3005cba5ed5890ffbbc6d4b1b74df925fb30dff1995e04d877cb0586d35136477c1d3377a8051203a27baaae85f68ddbca49249000000b01f7ecaa75528b6db7148f98942ae399f68c59812a7c8c0f4e1f82dfcc30052f447f45ba857a3f096c231b296315464841903679ddf6c904e24d0ec03feec7a4f8939512cebb1b9f011d264823ed7cb699ad6541fb8dfc8dca6df4ff711f96541f6de01635b18c394581b2cfba0e6d8cf0b4e514cbdf7f7a728d45d496c8569023f33e2a4596af474d9de06a44a6956cb2413c66f728c6973e8a3ce1cb9afea3ca7faf529908a658d69eaea39246f6b1600000fa400000168000000b0130fb3937220e352edc25749de95a3399a851333f11640683fe2c1e9a39cb6f5fc3bbb785fcfe3c71cbc4630b3c56e0f8988cc508092e50222e035e07fb2bcb6383c0a48b4ddc898bf227c311ebbb5b1be4ce33acd401c6d59e1edc896b65e41a96403353dd86ae7199fe6f9d4b70b6c28a62609994ed86c56177250629fefa74e1d96d3045a167f38437fbb70e3d57d0f33e044773168415244615329444666e99ce17a8c6d1e86a48134a29c80b9e2000000b0183b36e4e10af563bed211e93c7371ea4430186a645ff33bbc75bb1f420b1a68cf15fd501481a2dfc00bcaae5f5014f0975ba5dd475684002c5b27f004d4f6c00136a94bf959d831dc589302016df3e302e757b63f0066e65977263c02fd84c6e6795f5059193d14ddfcf900d3bc0907305837dc78740865086e1ccb87aa73dc1dd6d2c96580c449bf1e86f91ccabd6e13c68649fa4a60ce407cf9d710d0d501a2c278c38d262f5db18d673a14afb86900000168000000b022f65e1f9c7e50e73fb376b2e2d49810bf4809b6b71feeee09b7c04171cc8917aa692daa187fe855cfc88ee742a3f7389d4879d5aaa979d28d2cb4359394b747e5286c6ad2b536060f4624ad539a5564127a2892a281dba76dda83a29e6f306e194b318e643511cdbee05fa678be2b1e287750d7bdef077b3fb9f37918af12de3f3ab93605d48fb448477bd37b948c261915ca5adfe5570e2def93a1e71fad780bafd23a5d4455af973b5446db4d072c000000b02911fd65439f58cf838c9022cb618b191bce05c8faf51aa28209fc255e88225ff86e9bd5a741757c5ba866dc97471e7cc87c5a3e4f2421435cda29644a57522517efbfdf4e259d1a7c3bd4bf0e5e3071a6bd603dcadf8953c581f9e81e976a79154afc96d0226faf1ed3cbdb712061a10eaaf153e7d436e4dc7598d672623f3032ce780149bd75e2639951adac333c742dbfe93a0c812f3044a3e1697c89a256a898b54afc841fab330c739e34bfca2b00000168000000b00150115a8918acac0aa13f980142a64e8a61b79000d883099bcb0af4010c546817073bd3ff1061a848c0b5ecbb28cec18c76bea9c6586e1a8356c4a3f25a35b2497cf3765f6d48ba3e151e6d8312da157819bfb3984a1fad341a641a3d1e718fb1a4140f4ca75b86683bf6c7d439214c238d0fe8be99f3f84407cac3aa7e0474823b870f6417eb1dc2b28fbbfaae3fa30e568d9c82907db804c15e25786b5ef43b29a6d9a7fe7c95eec9f5bed7ca8e96000000b024b6b556e4fd738723a5f7514be1a384687746b3a3a7fede65f897e4d4f303b17ff81dc404e09679441d93283c488eab3d8502116580597d5f5cbb38ac64a533c6d38c5df69b5087c228d11afe2db0151a6a5eb59c835e7b233865e03ee870b7e0da6332ddc81036aebf21c57e3e78a619779184c6069623a0c3b3ef840db81daa706920613df3e20da0d65bd117aae418f1f95b7f1021cb813888066c2c207bf02b065de565fbac35d5186b2177838500000168000000b018c854ba658c39f0cf8cb5a2edefcf736c8a96ea2aa0295f51d37628683f09e9f56724cd9e195995a998d3a57d64eaef80cb62bdad6a16c22f1b8815cc3db3468bdf29d94d7db2fdc38e2f88b5147607c82e3e96dfb459d4705f71a8d1b12db050544692d3e58a63533d4b89de511c5023d9c5d503d756ef27071f855965fa8b863dab247f8e7c2bb8aefd2973622d5606979adda0b7b83d9b49333bfc7ff6db736eddcb4ce39d3dd58c70bf99d57393000000b018a686435a982a315f93a2e822f8204941d3c091b1bf8781f512a5fdbbdfaacbb716282ff797817bf9f10afb30dbf88f418d44e1dc2dcc7b5e663c14d3221d765829b762eb29621e57d6800c9cd508d41befc8d84b13e92b7dd168f18bff9b858c8fb8c652080507a5e83fd367f226171baf0c014b99d1da9801acf4765d3a2555a12685c826037a076dbd774dbade602bea20a5a00ec368bcae97698c76bc3e114b50f5918ab6c8b86a730df832781f00000168000000b02590496a15717cd8de0a5ed10231f746f68c74a6f9a745b014756ab949f16fba55bfe957c5e830653f6357a3673d68020741b750d2fa875856c4282211ed32ce0965c97fb4a95061545f3c9762b47337c7623d0f9744a7c335e157a75e192685f476b6e12098daed3baaecd8654ae34e249181353308a9524a0766b7368430d8565c6ed7b4e18f56d84b3e749561288e0a198233f2b7b78c56ae786fc08e4fbad5ec09f35359e38ad8a1eead7b39c5be000000b01d5dde84bfdeb55b696f4d9ae536e100b4739377236f8688c6c51f55f9b1da7331404bcb67750c1c5a99a562d3fd66535581040e26d34aacc67d098194a541c8ddee86a0f70c4cd6b318997df0ec0b444442d00e2695a606c5d639682600a6631de96bc85ec43f4cf19c4e0576e8e42627a6b467e14eb8d60396faa079f5d2e24ac41a177a643713e2512775544746f511c70d6c388663d4e16624d3b6dcf04ed2078ece7515facd2574cdfd54f6359900000168000000b0127acc3c9b36ab02ca0c665df630e85a1de9a89dcc72c58b1d12271f1296d50bc28626ff637f27eb78cfd1a220f0fb0090237f1fcec8b3d399267f57da41459b408c88bca9b461be367205fdaf1a0cdfdce3d22f82ea1753770ac8bb3661b2e3af8f4e3c8096028bd5e2fd46383b9e8c2f83a1884c607482bc4fbf2ba352e6740a565482f51118faaaf42b6aa526b2e014f876a1e64fe265df47e1770edf62e852c6ab9834b4f17d32b0c9c55386c058000000b0102954a08372af29240c328eb43874e90412c416940d14b517949b95dadb839363cba7fefe2a1cb37a8312309ebe87adac01e6b6b126f808eea87bdf99bed1c2a760cb5aeafea16229cbad01de567f3c3ab1e4a0c851597281c6d1a805a3b0f0f90f6eb25a801dac4ec794f8974dc80c1e92ec2e99109fa046320870c66df8720fdc016a2a16584d757463a7c393d26c01b82b212cdba1ff8e8f427466285b3b952bfe64e1fd55b08f8e233043ae009d00000168000000b0287afccf51a9b2bb084e8e5b44b80518601309de21ef8fe147ae008e94e4040b7cace32eec84eb94058bf3ade2b92ace20fb54f74cf01f41f268570598d35cf4917c484001c791865684934091998c5922910cef69f9e554c897fa886d885e22e466f1a34d5879bc6707aef43d6b1f321fdd7713d647972f46166180813788ba91de03b6f26a0dc95ac65925b42984f42e28ad6962ff237dac4d4ab15110eaee56c46ab074f905dc10a997efba81980e000000b01fe8aa23b41ee26f5eec50dfb640e865e761b24c8cbdb4e430f05c57dd2911d3de44be12cafac8d43a035cda665cf195d835622b7ffb94d16ae0ba8bbacf2f02199eefff3c655129e418f41b4d96b7d934c0d4ac15aa8d690c567b331a1259e92d1a3bb42981c668bb51805bbf7057711946e9587a9e6539b4b8a07678d3767461d973206da53e788423d8c5a8921b09299565f7b285fa8fbf0a954962d29be694fcc3f877289ef711fa729508ff43df00000168000000b01aef8a7f88f3cf233925702153539cdb290f5eac14a1a7c387e90346f8308405901de07fd2e0e23cc15588be0d7f441d32762f4c016adb16571913e98823ec4e522afb287b053df4019362d53ba3a6893cedca2b8af63b4c551dae88c8fbc4996f67811895818bdfa14d4b00c68adf2612e9cf35e3450ee7e1939e13fb30490fe23a7b33eb468501e539864449668a3613cdf732c6b4492ad9c2c142aa3f8e6e26e6f52a06eff523099b8ebce5285c57000000b00adc6b20ef8d16da8ccfa2bab463ec889b18ce707f696187acd9f326f092c0c279a76cdc6d7600f508e5a0decb7344f7cf0b1349793299a1e7b02362678d71c5a6ae029898c7f74b683085a81ed2ec14e6bdbd1fd8d3130fbe2fe6027586bee27c3bfebdea1958cfcbe9adab72ba50282512a12114a12231ac77a8c55ab2b5dac99b216962de34165e70abe3e7594ea324e3bd992faf48314faf8d47f47ff437cdf648978ac01a908a44d2b46115746000000168000000b009d1434271d037f2e43421b573bb2f72088d56bb9de4017cf08953c8ba2867d055885239563386f32aaa24149b21ad0e98fc0780843c2e7219e914d57a6dd6abac29cfd5f3206dffe487e30deca7f121af4798a435f8f8a94620f5a52c0ea2a8d1c888049d6271893968181a7003d5880297a06755381a2083a918317f974a8021d4e13d07c27fc1ec83396551b7887f1d7d60bfb959ddc1a60bb36382434f617eb77413168b97b3bb33620881882042000000b025b42fab658d51461a2dbaf3b8d7780cb1edce386df7dfa71e5e6e67d4a5126d2aee04602ad68a0f84487cb714ab5e1b1abd1f5485902e3bafdb8cfc585573319bdf592f4604d10989b9701dfd50f0c5fccc5400b1825874116550e2c891c08e56cb257193900301a1e12c2fb8b48c8d2ade7a194895a6bcb5674c720f7eda15dae19112e6d0370c2e81f96b766de8ec190a0a93bd7b54c7e64bb3356afba1b24de0a2632bcbf844e09952a12a58eb7c00000168000000b00242ec5691399bf6b70fd45704cd50b2804f62a8e878235956acf2829fe8c553fb32fb136481c7a742365501b59257d123c4c9687ca2f488d32eae79a698fde1649ca55a3c61b499b634bdd57d6c2cd88224c4870831eb7b6c55e8cf173f877b5cdf47bfcb0c98506f1fd94d2ff9e6b1229d89d34f3ec44513000409c91bdc266b17956c44c649f0c2f232ba5ba090b817d1433371cfd5ec6efc000d03f408d5e8a218af54c4ede1669ee6884991ec7b000000b00d0cd2ae018b9b413c50bcd4fee13572ce2a3449306b32835225490798548aa24f940f250cbeb50f79b78da162e74f8062e0ffb472e84a1745ed6336fe76915ac06c660fb99931051579ff79315ee6f6c7a2b39880d401ef0e46336a9d06caf57251a332ce60db3d01301ee789308c711445045b2fed5385c425f9dce37f1e18c6348413f72223b39e9e6bdf43d8d4ff20aae1178a60339c6b7abadeb771189d43d877e09a6250d5964fd27cfc2cbe5800000168000000b00c71e0fd89d22c2b3a4ef4bf291e6ca9c9c80e9ac9213707368476b43fe22aa83ae30d28abeda74465abbf16ac513a1e7b37b9c7bb706d6b8adc2c9c2e661f241cc5cd663735c98c61e894c02dec3a1cc83dc7031fed444eb3293ee042d400a42762f6e8e4469a29072b4776ba27bb060c57ecf101f9e8f91eb87976ed6e2b3c379dd7c7cb8a1248a8cb5012d26fad132062d8de80e1ce553dc49b22e29f1bc25b08b597a57767c38dae845c9af79ad3000000b00644cca8885b485b7097afd07606fed66fafe058200a4881e797c79f08b1e6c669d786950ee960633f3c56f3d899235b4ff1a2190b8799d06a10b81b8a0081b6882f06fe0bf7d660eb30c2313e5bd5045ff99dd41dce7ac84c32b17eabe32f4ecd518e146228a1e01876c4a2929059a22bc904f70cc9cd913dc1f8126f4041ce6ec431a4b04a272daa9bc373248fd1f50231fe2975b78256dae3620f35861846be36925ebd6afb396bf6346dfa9318b800380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b00c0bc3f222c40dc1ad00cfd437adce1cd148398825b3e54ae73f2c4b19b36d3d5e2f73513a94421fd05420d355a3d8ddf7b20641e9022aac4f566ea9ab54b3d3e081f56428d97a1bc07799b2edc1da4b0d15a60a3dd2a5db29f2318ce5581720f978503adfbb26589e8a9eac90bc060b1e697d361a7f75294a8491ab02d78f1b72733304b99dcdeca8ff5e18119cc38023051e01a22457de496dc4725152320b7f200d748a66f17c8010b0a9a452bcd1000000b01458820520783df47a64021107f5423a95d84a6c893aab4c40e26bb10bceab95692610845a6d94ac5669a788eb4d119c62ed8213ff302b2f38a22ab261b14f1b5a36af95757d2f0fcc89b3eefcb6b6bb63c6c3378b5990b5acacb5bae904cc44e6979ae2c7fa8d9e69c5b631b3057dc405f613611a76750b25c589d6e916f6e62e0dc8492ae3a76f4132750790a9862430267f9f4874b2b096e66f3747f6b8c5291123996310ea2d1d02636bb7a2a51c000000b00214e45d7fd60873b7df6cea7e12aa2a1443f68fd0b46805b239ea17376a1a444847d8084da64b9d697bd10110fec7a8efb42b792923974375554822eff2713879558121877512e169c7aae7279c6d1026e3ba7e99af70f6df60fd2058a27f652257fa5abcb8226cac4a80d6e39156a30ff595612505926b61a693eb4af0962aeaed359f792ac16f1eaa5d11a03ff1871532520a21d170f17c36b57b209dfd91cfa844c1802b3908022ea67e4c971b0e0000021c000000b01836b1c61966b98d7075becfbad7e54e72928702fa7c17bfee981d0d5cb85b5a35f37ace7513afce58c762c8a333794df142bdc6808c6fe404c2f4138150ff8856c99b6b08372f729de920b4d5b0ad9815edb0e5d950dfa0a45a69bb86aa050756ba978a9e3b6be50fbb950bc91938091a8d834973d7b2229c539afb23a8106c51a5299cb409f8ac6dc311f215b4e45e056f52a17dbc926b80ef045747e7a73334c7e63802a2dc6aafd123a327b75459000000b004449e7cec0c46d01c3285395b649d847b15bc94120d7e4d4130648e75d6ad8a90253d55371e3eeab6f9fea8025258fefd91adce594958ebaf8654748d54cc7cad83e6350efdfdf425a1810ab841ab082cfd25cdfeac6acf40a9b7826101cea25a99b1ad83eb636c58dca1eb6c43f6c31c553ef2596200aa3d4c73de9534466c5418c880976184477c16dec01b8f66df17129c5fe5ff7d36b6b4eb0f679b3d173fb20dddf2df453860b0e9bfc0b7ca2d000000b01911781da8908b53401254993c571f37c948299c4f932ac9f1ceac1317eedb9373255ea07c3a8a8419b41b49b96e86207d7a7a28a73b0841ae5153dfcd610d96d770ede7e7b4125295974faf2d63dad404c2b200f44cb0694219c6381aaf61a645fb29133c01b1c020950d799a62eb5d28e010b62cbb0a8a07ec6ab907db82a07454accf9f1cbf732af7b192f2b82a8515bda4e48f8022c3aac2332df4b629fff23fe610298d212c6786b7ef30fecd150000021c000000b00d0edb946a08340060c80dc0762ff69fd73ec1b34e70503e30cd09206d5d0a4f2490ac439d6ed38e01a1d4f4d14708f95de9402713ae074670688e0b5a0456fcb060e07c0d72ccbdd43688c7147f68a499c7f9f5eaa8bcf0e4e73ca6f9092e21a664c3a890d5e7d312bf3a8ef78e0d7927696459ac24e66f4f1d50c5392dfe2b20cb86afa0d1ecee4274389ced46dfae08a5e1b7b73abe0b4e9ccaeda4cc1c408c16a616565eb00643e10dab1f28f8d6000000b0093abe54312631964349da761959ebdca395905e4afd213b26455f93c069bdf41987e5fb63607640fb0c59c32ef2345cf7bdd3233607b0618a27a3f685d5b4fcf049c8e8714c383e8b9d9113f7847bcde420523b395dfa2fa79679da3d05f7a793d36900b089ec50a4c62b7ff808fdc8282d94c88d18059b5a156b57575b6868ac0215fae32b8d0be742b91abd1db1b11f6b0be5398030d3d0589fc30cf8e3e67345686c985b11f7c38b13374b90f21d000000b01ecfde58157ed60b003286dc53c9274688f6913bc06f3d910791d8d87f2c548a3549c7cb24acebc39122ff8abc6c3330b439fc8916104962ca152a512a2a3396edc8e88c1f7c65e84fa12b7136861382cff39153fd4852e3f4d30b1b46e6bf0a08328c688fe661ae813127a7a4a652451ae5bb631c11a1224f5d9fe6426a84edd709a5161e62ab1362161217c6f3c69a26b913e5a9cf76bae848eebac9bfe4366dc32f061074a8c3666bc1d8c44d58230000021c000000b00f252a7c2615650ac35e91b1dc56ef766fd4557767b7a5cb8ecb253f381e586907247add6703614ef8edff6c85ab0a1c7744b55b7c113f1cfc7194db85b68957c6fd1323818065f7b9378edb3e7c78d9ab876be4a0254403b83f8bd7acdeb40531f91b51de24ac12b9c8b2a2d5bb346225633776c8fd9a20806acff06cfd512ec5fd6090a9cb64274b63b75042f5d5920ac9506d33437acb05b47de0a4f491ae41b585f342e71669378fe6565a22229f000000b0253997e04c1a46ac57f9528ae84ac78df3f33b4e8dc70e615c3321c6ad790f973fda8b53aadd50ba3e2ec2be28378365e56976bdaabd422531f5960a4408b0c685dc3c2cbe352425d330268154ce8eb332c35ce66e59a3fcd60a695b4112f6dfe89dc3866fd6a241e603c15d0198ed6008827232b290721efd421f5a07746e42e70805b4082a519b8c79b55019d7d9de071311c65681bd64e1251cbac45581ca1d1b354e0be724899178166d37965c08000000b02e51560d8156c566b88a582188d8285b41b01aafd40d83c0c6afb2836a9163937fc443ae2705256c0e26403c4d6960e3798e5559d29844454dfd24e254d75673be4482eaebe561fd18f5c2379039fcc9a26fa923c3dd479a14ee8074c9131f4064b988acc3af605fb3f31d7d4fd74cc60e94859d7cdd1a7bc329ae3355582f89978ec84300ddde7b1d3b6e79d5e8b96f1e8cf623ee288bf35f0567c24b1c51fd96944dd41a2bb0736e8dcf8233bdd4920000021c000000b023b3d240d9601d9cfb17cfc8eb73f0c501144131a308cba59269664272d90d5398407357d78fc36d14a577899648c00df66122f78058265e0907b54412f9574dd8f193211519474f18459d1c3e86419544e8f129633e6540d572437dd643cc6f284c9bd74bc477f55380980577688c681894536266ba69186c53b5bc5d9cfd31cf67e9ae64c8b558959aa145178093820359e607fb5cccc4d4daea3291f71269d882c9c6723fce6f1e074194f4f86939000000b01bee82a219f49b380ca7906debedcb728908f00653e780350281d5e78f9690959081fe0b19fb22d86f6dd33a1b962e2ea9f72c8fe96a476c4f672c3f00ad1e0e51241e6f703359e543d4203c4ecf14104ba2807a39ef844db41732fa6be2fff80beb556d976c9ea48f06a5a45e18fd4a1414495e5884cc98034c2b37cd152e419d01ac4d8b070445ea7697fea56f98d4038d726544cc9a04275eb09417d9e22ff06bb8cdbe7c0329422e6326672e85bb000000b02412b9a86b85bb430dec36963a9ab9e6be2540a08e24ef4a860a151e29c378dde3696b897998b124924a44718c4aca3541642c1e7fc37dc676bae3a3f2f98dfa62f2a3e810c09433b5b924b30423794d4485532687a848fcb294248959014cb807c4502b9a197e4a0a82e2a7f5bbd8c41f0a2363b26ff2ca2282ea24d1ae64593a828a7d50160ef4f44413fa42cd70ef055c3c9a428c49fbe4142c93e218e1163a1da69a1d7a63b0625e3ff2fc3535f80000021c000000b01493475deec139adc8e2607b77862e624a8922f12cd5e3e9b08691542395dbd6df9e45f39515ff77ef7c28bafb77a3a8de5fb75b843b43ded6491f3466fa39611835883f08cde80e8f6cb29ef067b3b5910b1d51e736b4b3f76df79dbdf1b9309912b1009eb4bbc30ccf5d032c579c381096732b1ea35d9066a3065a8b2fd8c18d021c6e77b2720c10c1318ad8880c8721f6e2bfd998e1b64b7a5c104ab0fdb9def061db9e25a67ba43ee319f336b07a000000b01e6a1600eb464e5050398bf265011a7539959fd3ca5ac7b1ae979b51161ca3468351ac39d203f08bbe19f1de6664fc6ab0a4f99990c8fdb67864c08c5c000cf54987ac95a05073771c567d5f58e74a13c157463e8c5dfe3aaafe463955f98a56150fde2b07a76c52b436be6d7ee0dee92719bba0b4b2556205d3a37f7337d8305e8a9c0932ca8ca556be4f42b4d1c96006efc926e04b91477dd18c2eb1a9fe820795e92e17157efeb5a5e6c3c977f9ae000000b00645947c5e974d93d1376b690e4c75ce2cb78c787e4d045e7a3fb2279dc60975d8de82d4cc85d2420305548a0db8929378531eea0cf9a810e2629cd25e0a5d076f5c3ca574bcf3bed7ab8249e4c540473d8d8673e5839ae13aecb73404ef1ce6f3153f5785c59d656d001c9fc45c5dbb2946abba51c7528668599a26a742fd581402d613abf13c3e88fe1533347e97ff091ffd406448d4a3ed36cb69848bea869330caa39da71f8395eb501c355275230000021c000000b00602f1e84c544e1d6d90ac4c550279fba174ab86172a1519457c66ff8e7006abd8a99c3512329c7df0a9fd2271c323e1fd104990ed460e1e3fdaaad1529b8f6b126964c59a9053f59948c5efe3866a99017adb09ab8ef6fe17cfe312b562ccd51bbd61083ac3dc24acb1dec307a2b9221d5e32641c43077cfa216104c18962cd7d600fd2f51afaef5102f50be4e79eda05cc9302cf8b9ad3c5abb7faa2a695e9fd9c16143e6261df9b9bd6828c382d5d000000b007fdec27102303d458238bf1c8cef1ae8a753dc126c7973590f815124922fcfcbe73bbd73c2d0faaa8a7880ffac51c7c3eb1bc02a103af784af66af5efee3e53772eca7932aab1b2207cc408817fff95fefbb44c653c51dd023770139a0047050a3dbeac1ce827016afe4c1033ebb0f2064bd27c24018aaff3149e73c0d828e9fb65fb89a4d27ede4267dce91323359f20a9877f70ce8e736e3b766d6cdf9a3d2a67d5cddba922176bd92467bb9acabe000000b01248dc8eefca532a6ef0eace18bead1c81709ed2d311472d5b7dddc75e7bcd215eb9f8f737381fc20379b60d272d2823625479368128f250ba7576fc3baaf370048a761b6c8208d9feb3b205e240409839a2a1d8c78d6df5e43130b9a2a7e6993f7c80a6edc12ecb65e57933428c47400f4ccc6107ced0bc1b81da14763d99aed1197a4c4b6e10c4c75475649caa721d17b2aaea598b563335f97e93dc9d02fe87bc52e31397b67f004c14814289a9630000021c000000b011e9f4c99aa0b24a36cd20cb62f77b3a6224a094558ed5cbffa06fda29ad2255d775e93f722edea5dacb8e54d8d469f4a13f612a67b83c4902fffd4433beff860f57975c224624b4be7c648059e4692abd332082b82f81505ed3f044e255061d94bc3be410678992fb2cc4fd42c6707f2e0745d903564c3673e4e32f70342665cc7ea81cbaf827b03feda2db6487e27a0b3192d7fc1b89d315872641b37b85475dae1bee77f855c0d20f523c7976dd7f000000b01d2c32ecd4e3fb394c18ec032fc0f4ba4f9e88d10784c44eb7c6830974f675e804b1861ad8ce83384f2bff146ff60942e97835fb2dbbb73276640f749c7fdc0528456e083680f61513f9bddf6b160ea4332b1fa2a9f0cb761f028d501c6114bc7d7a30073012d68ce5d5bcd978b3a2942ba6eff81bb351378260943131aee18509891bf40499ac333f3abc7c22a5bdf62a4b1f4af17e16c16675dfaa6ac813345274ff2c3efdd07305828e9c9343acd1000000b00811da2ab45852eb653cc1e84e010603920ba949f77ec73098f180b645c26163b572bc303fc3aac141d573c8bc96f3490c01026791bea5b71b7d3058d6145338059bfd523c68dd2d2071d74ee6bdc403f4937b6e7604daedee8309d1d192c9e1e6bc436cf3769e8ef559adc61c75587f0043003498115367eef0a0ace08d815577c4a43720fd6442a17823b42904e59e1c5ee069f9cd06e7e76774097db7344d43fb343ece713dd3dbaaa555483f6ef500000fa400000168000000b01526a22fdec06280b130ebcec727fca2c0827c1a4e05fdc2a528547498ef0ec7ce6f10b1d26742ad52c5ea6a4f324ae86eeb90ebb9abd91438919a6bf5145264fe51464cfdd6ebdf37e7c98245fa0c0e9817888d57ee9c2814fffdbaaeee320b622d1beae077c21b0ec8fd34c7faa4f63060c0d2d3f5678a2acf8282885c964d9de3a84a377179b92b85d38c22c8d52b25fbe763d49fa2577952f918ab1c5fd7e5337813b81d8334e3908bb6a82ed658000000b019a99c8ba61e0359cec10565a4adacae790e33053c994452ef7440de24506f594f03d75053cda2fdae67fa66d376adf6159057aca7a621527445064cfc11f425b4a9402931d6db1ed97a446dfd48561a2dbea561615356351fa0f3452db0c91a79ab76de3cf7c4287f2388692fcebc6d1cf18ae11c00330a5646eaf1e29a379089d4003be72490c9c357be713bd9b8c305289e9b47965556428d95f4e25254edecbd1e082423da6b8f44a941ac328f9400000168000000b0209b918230b44b34ece509e40f78300cf42047dca6e57fe9a5cdee01b363cab8d6251cc6090e11697b5be3ae3ea67eb851dc3cc6c3b06923fcb7d9c10edc507dd1a39a13a1483d55e3e80a01241b7ddba038ae3cabe82e22d595f78a0e80bcd136f85cc924f3d4966d47e86c27fd6d0f24ae98e6ba687ea2a7d236521c4bcaabba1ee8c0cf57e2b22549f95dac5020460ace8da750b1a9184fd60053979be2cb0141f97f287468deb8f9a2f0873ef7c1000000b0167ace6a52f0f0cb871c658d4ad241ba60571d47ade0d2e9241afb0279f4f9cee00fe997ced4707bdd4af6b102c4604fb110d85ba613c71811f9894a59441979e815d6a4913223a4803d11d9675bbcd2fd8853a99de3f1f2c042980b66a8adc1f90f729353e0f366508efa933830d3c81e699087b0c4cf95559efe8a7770ba74a6f3568c1f01f1f8b1419d2d639d64c910980106199103375d2ef360481eff9a80eacf254adc0f6729b06802aed39f5b00000168000000b0212cd31e321bdaa4e01bee158eefc0505d379d25123381e9fb398c861e5194766dbf1b87e8f164d0761a3ea463f532b0d293d20a30b2e82af50d2e8a7c9f9bf4af956cb58ce2d9cc856023359808baa40fffc2bda21e6d308ced6bce47bf9af3b1b16cc69f45835c67b6104b791b2a2e2108b52b5aba12b775931b7a722f91acf1051acb936267c3fa719854b9c49a5a0560a810cf8e24a275714802087ad239988993a66cb8a7a7bf0b97dca174d1b6000000b0210115026d5b3a91de83ce1e1d42bf9a9caaa919f30cc5702179a7acf22300d16ef1268f7087d6f962902c1fe1ba6c87c73f760124e35e557aa2f8d58169c6b13c82c196fe3334999d7ff01cc972b0d0db7ea6198c772f0b57bfc2351659c566fc7367ad2b3ab4eced48d279d4c4efe4204dbb60576d8441f95cac90ed1ec163dfafee31ce651a09d30f679de9aa799f1b17520b2e5cce27f86631da59fdc8f618f7d63ab194152b899db75ca51837fd00000168000000b0074f1757381276b8c16b9950288b25f4536e2902ccda215827b4b521a7ba8e64addc011d55c6f7a886cfeb54780aefb17e6378ecdcfc139225551424024ddc4be0c690dac240a808322c6ec066bfa269c160b1d99b11a87a2b14686caa534f954d9a6df4a39f9960679eecdbad3df02d1de30b203c7c213229db9b02397afb2550eccf0c966f4d177bccb378a0bd184820458a95a0330fa0ee77d098653de7045cf9ef0bb2c33a028fb8c0755f22cad5000000b0203fa62ec8ee174f776b709adb8f4a2162e6df9b057809089312dc0025231c46338cbe0201a95ca0cb281f555dc4b989e7520e79758c516bf52a66b1596c9791af87e69abc9d5884d78c32042504dff81aa29b6787b1b7a99e6a4a49eace6c366bd142b8a77832315c24433bd5c8709d24c4b4fd6b069464d22973e060bf08ed4580295e40d359735beb6a8e0619548a00a8c1d1a0e915b69d1a508c4cd65d8a102245526dd7e74517af5bf4ac14022100000168000000b02a8a81778b82f80b365e0f43587cb0879249ecc96146bd2f3612bd0095eb0b0b1435cd6cbfb83c305d3730f8530b2d929089897c6f41a969927483556350070d8903c8dde078ca517c8b433a922d1dbbe4040fc33beff450f92e105be72c9f0e043ecfa51b93e4e479932a3ec1801e1b2abdbbcaa2f0909cf36fc1b443aea717eb344942c8c7ccaf2e1873895867e1600cf447fa42d183091872df7dfd049f045c3f3b15dd20a2c0cd8a75b0f3e98a9d000000b02c51114bd1aa59072f1103ab69eee435aa069b82c04f223d9d6c110350d2b2b25eed04829e05dbe6b50301d0bf03107abddb6cef6f7bb291652a5eb11068b9132276266df3636a7458a69ce658eabd0357489714558645aecc423c9ecda96e1670d65b4e8ff8bba540b4bd041f02f24110d7a8573b78ffdb7d9746cc7923dc1948d803fd69afcc20d14d330ee83ddcba1a9daf6296f27c0a6a8b016338e6b13743c299e07c20334643c84fdad8e4892400000168000000b0270828488e05951c841f7e2f309b2f49d0139c3f58f7b06b6bd975eba60839c9aa02390816279de9fe20aab7b6096593bd29847009124413686b442581f921f0405aa8842f0436e129ab41e5a1df1a28b27c73214de34151d99b7289986abe2cae1c3336dcd2df94527e695eecee12b32bf1438cc06074bf9ed44eb2f2e36b5d399aeb809dfeaeed9e8935672bd64a810a928310ec8ac2fe1e7bb4837a8ef253416cc11f5eb3bc402eca750e2d6d8e34000000b017afb9f1a5a1f0ad51404712bc487bdb24a876e136154d9907f7d26062c0080773f39365bbff46e738d3c3435d88c582c859858450e1d37e526566315a494dc964cf292508fdc3ea2fac8dd27fd44ea3f8e5220d11a7ce91c4104821ec98b05ce100c2620602230fc43ddfb4fdaa71c417b39f620f22a2da910656936c60b26ad1fb3f8dd116bf03fe95a8e9013cf95911a404239966a78ba5a87bd02509a1f516256c9c22ac8c78b90f7be38a27d1f200000168000000b0015961bbfbd1652d6fdd1c986a5551d9cf7fb18250c88959e0f1fa0de102bdc4c2a3d23ccf346cf57aee7d2a37328b5e0817ecfedfaae2addf1fc4b402d68a31d8a3161bee04216214fc72a512922427eea12840795329e51d9c68ca505deee344e871a9bb73fa3cf963a519696c699c07aa7a0df4a86a85b9d3ef16adbf9b11e8d006fe899f871640db80bb841442ca059a2b41eb1c8b5886a2e3ce15bf1359f6aef5da5f3740026e5d26c15d6ac9f1000000b009c7e86a9231a1d1033714889eca225e6f48dad8d732e8ffa62029f19fe947163481f1e292aaf34cce4f0234ca8053ae3452fefca308f265956ed802b5866d91423d015d1f6a82d968d7e639bb1ff1647013fc1411d3a3f6c7fde5c75664840181ab5fa6b71fcdfdc971594195821c682f795047b1959fd5a1f2e921a14c79d3c083c36f8cdea4570e422a68d4b7a11e0cc15d1625e3cb863b01df458d0e7dcb1deacfbf76b70728e111bf69fd603a0000000168000000b00fff38887059c0636054d5f0bbb93a38116eb042d1c712f6937725902087037fb1104b361093c8c65d63f3802c0c45f4db2b19dd22ff966e3e9534dc7579c560f17436e9f471558b4fbbcdbe0cda855ce149899fac5abfc2d67e256df5c94e6480e8bb1d45ef32999d54236586a0e7460819b56d50d13a565f255e9081f0e9dd87bf2b3b93f2ac7b690b2b28beabf24a1f1e596b9932e982297fb6836c4c7c2f77dba24653fca101a53253e60a7f14ac000000b02b113734d29d2cc39fecb31a10d7abece9e74e72838f96e3240c641b8dafe6db212d35eaf8fae9d6b2481cde2e5680da25308904d8991fb079890451d70e0876a85fdc4ad691d458c2fa31cc0340066b27f082f100eaaf992b6e030d1d79433202aab57b163e62f503fe79dfb62fba9f174e0d631221a275a199e9999956c2afc5c2241a547e6bc8944cf207bcced0ac1b972c41dd04f1fa660097d32ebdf5de987ffa45f4c5cbf5d8dda72fe4aaa6c800000168000000b02dc17d5d4831cf95d0cbedb120b5c173b136dfcb362942eedadbc39f82e64e03b9f43831efb3bfb159cfc7907383bb840a9471577096aa9bacef9fbd26805e343f450303e595ddcc67ba7058569cb69a78406f1af00bf9fc2570b7f5989feff08a4aa28ff0181e8aa68ab0bdcce1b7c20503816df37485a98b570756228ab6aeab8c256369327365781c198dc1d70eea106b9feaad27546865175b6b41bdef94dd1d411b2d5214bee18f4632c595388e000000b022ff21a16dfffec9cb2187fb6629389debf5e1364ebaf604b3728443a515bc9cc2d47ee154ebc7578f3b7d8d55058be41b9f382f2100c8eab2862f94a3152377623c92ad48f23aa37cb8666d698e32277779f8b9a21472c6e305fef5baac7e7c3e121e00cedc90562dc6d3bf394f9389184f0d6164cab0caa6bc49cdf6f62ce35b50525a0ab17988c124c368e95fba39124719128489c4ffd3e53000ffeddde49012388e402f4420a98d06948f38035e00000168000000b023e34a5355da5851224e98a4c83502dce088010d3c2c4f636a360d3f7e0a7d8a2ad5655cdf535ede7ce9b3653be55993d6d0e3390e2d12b9eb3dd505b61f3fcaa8ed3f7647c33eee9d810d52bba2d639a2d8e6d369bd4552138ce5fd4a2e3a98f2e3aafe09dcb009b789e86d5d9d69cb11fa4a4897fdc033db9d71405bc807b65461047b1101e83d14a9406235a1146b23bb5143c01c3aa5638d061649841ea75e722c9841d9e4a0509ea727e37b44c7000000b020ea86a24673d0deb5d1191b1479eab68b27a1f1912fba5d6f5cc485e7cba3b6d473c5154eb7a6969ea86489af67f144a5bf8e2e6e18dddd59e3814f9f203fc318be9323e5489decf91dfe4ebd6b8fe7523ba2ac88b25a8d467fe5593fa83ae4cb8892ff26741bc2910b751b1a8d0a3b28db1dee2f95b0c9f1a11502646a2d2fbffff4b2b397e304d7a3d1898ae77b2926d1f14a162b16191b59414bfe2933216acd4c6349f363ff073542ee4fb9f33100000168000000b00085541565f0fc0cb599b207dd21ff65bcce290c03418881402692a1a906a44f020b433c301ee73dbfe6616dc714299980f11660b28b2d1ed84bb874e9c01ddcc6e295bcd26cbaa1d50816d6a4c185af4f9c7512e2e7fdf0c77bbcfa6de2a414855f2a8c9c98c91cf7ae34af5b57f5150ab56a5707a103f01fc0a15ebdde654fd66550aaf503550a8c3c0881b21aa6e40c284e2c388ca2fbf086fdf922cff26c830090f16a9e6f7a235a9015bb303449000000b03051aa80914f3e7dbb9ab4841fb1447fc87555f170551a3ada85927bb0fc0e42933157df24c33311f88386f32cd525b6eee6702ebf673765063efcdc1d44282e734dea27b45451049ca6a84503cf6f097dbd90b9b15de6ad171857b650d226faff494f0ea3ac9a85edc3ed046e5d1b8f01f8389263f1599976155f2657d1ac96e5a6d0c93aeb321f2473cdc89f8be017144296f686baec8484ba330f1ae0b80206f21068fd37976a6a96a56a3b49f939", - "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e", + "archive": "0x252dd49ff4754e960a4149cc1f13c8c376f41f79603f6ae4d712c97842b0ec01", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b02018103ead818b597dc0473454e0b5dd3bf92bedfbabaf26b902a88270d311502c825f2093a2b2f07c0928f3d8269da653adde9251b9415bf1c9159ffbb9b4dbef9c1b8cc701364f5a222e334eaf9b31bc7002664d998452b437141619b1461abfc963704b57c03a5efefddfa955824d27a992dec50b222069f1d2938f192afd925ae9975fffeb17fa9fd0185c5c66eb0dbf1a23938cb34ddc7d724282c36be968eb23ffecb5384fbb78c094de1725c1000000b02a32ee196ee84314ebc75031ee381b423eedfe0e3aca313558a1dc3a0c7acfbdabee8bff8a04787b111b7628c6c9ba5a3789c2d3dc52e6692ff5ba820eb7c58fa5ce8d4f8608e0aea5c1d6e7de4aae04acb6ab7b2707f4d0c460356b2b32a4be638a367004d9213ed1ef42fb3ea6462229111c75dacddbdd80f973aee46896710a5ce88f34a641f7369d375586b435682be20c4e247d918d4121c2f4b87068790f51b7979f047189918e0cd063027555000000b00a0c35fdad529d6d63c7280d8e2230f6120b63b154ba6d287dbea4addc79c3aaaddc466b243419a19989cb89675c535b2e4a1189fccd385ff04d1fd205639f26b06bbd60fbddac2d2cd233fbea79bc374334b8e6484343f693c64d9729fbaef4e7f0ed0a91a1843f6f30e0535a9527250cbfde975c664c0a2ce3882d48aa0e9cf2d6ad2d773ff4a9f308e84d9699092510f7cdd16928430cbedea61417fb8f12644800e024b558cea0977817211dd8300000021c000000b0237832cc0ff3294e6cace2fba52449382261d9480a9f94f2ac6cb32f63d8da031c985e18f3544870db2efd4a110d8751aae62555aaccfa728b3943274cf9d4dec14136ba292bc586aa9373ad42cfba9a93db5628d5a4c9d5e39d42ac9a349974664918a9f399de6e5f9d1b472c1f0b38066d3dcfeb23a46cdd4835a6ffbd37ac8d08a13703ad50a59e4ac6bae368cede2ae0e5afffd93eeb3a8545256de5209d0507b934d317db1e7de13cd98adeb58a000000b0100fc38243b3fb1168b5fd31e0042fdcee56fd4f2f2811972cdffb4a8733e092ff2fc16880a34dcc6e9f4df81369b9cfced535f978283dcf0c14a9b5476b2d69fb00431387845671ebc9caa525e163fe556fd57af852d7bbfacaa6ba6928344828fc6d08d77731800e38db8947b11b00052738d5fcde750e5432852a084e9c88ce8ab60dd832d9e965ee759380350509048de615db346929e6a859466989ed4f33cb7e6f6dd31d7b3fae0bd647a41868000000b008a6dfceca021d8ad44b17bc2574fa14842c97be3aad4a7d6f07d5b0f8a08ed05d2c4e3f5a72e40d85787758658db1bb652a3c913edc8c48d0ece3b6cba935d9b887386572d0661ece8f3193f6fcb9783ac656683c0aca51e2e9fe7749ea0ea6c8d5973b6b9f97161a090ac93f8b8f1d0d82445579030fc8e2e3074857d9711f5635f098d4decabd7e7d2b0725814dfd2a10edcdc80b88aa2162a1f0b602304f30c7857a7529c8bb09488ef2bb7a13590000021c000000b0294df9edc6a18cb848dfee189640058638253de1a105b84e9104248e0c4d73f823490a4d6719ccc53c286379d86265ac126b4c25675b44f448a06c6b5697e19a444786bc9ca84a22f2e75c263450ec9346ab2296352be1520e9f5805498aae65d4bf45a7922bfd20f04f0a7fdc062d6a08efa27480363f44d057a6101d2e8e6ac57c23e6ee04be4e9671af46d3c756972c89a6cdf93b2c5fda4d36bb1961b70835f52666acd510c96da7aac8dd3427e9000000b0165c935497f41281e397d741ece585dcfe629998453699911e7298623fb8034d6f1ca992bc6a67982566734d2b1b6f0647b14e33073ba87d0d2d488beaae5ab6896f808ba69260848525d6c77c92ac1966d9fa550c190eee89bd2a7bde3baa56896dad200e18e0b4a89376c88af6b677301e03852537c90d53c0e40869886eef2ca07de3a7b0018c376286e9fe0ecef22fddc9a0fc01e386ce9ff3469821e53e4713effddfddea329692ed5d1330a135000000b02d8b803af90f77237f99f14b09bf62cf7bbac2c2003359d1d5e6bcc421f999101421db38fe64e44125a241f6a36beaa435ec583319ca56b21acd9c6aceeef9d04a74b5eff711de8be3b83e0799c7c5c00e10b496d40addcb474e26d7c9069622e699a8b20d574814ea84c1cab0b2a1772c4b13729f56571249fe085fb7883fc2cebb5bc312d4ef4ab6569b37bcff13102e8eb238aa00dcbc64d37ba888da2cabcf860d10fff6caa0af1238ec55c83d390000021c000000b00d6e7984cff7badbd024966b435e045b0b849cbc558647fefdbd52365596eae601571dfd99f04cde65daaf1034c706a6551c59f62316d0b8c9537a70ba75311ff28c9b8d486d6735550de67461a4a4cc78eef97e18fbe8b0f7a504734bc7ce049f5223aee0d5f5d5eadd1d9a34eecef01a0d797e1bf0d00b838079403d071b69b78473c79b00e3e5cdec36aaa962924d2a9114834b45f417070631edf2a4efa5cb426503e5211601dd61012f95f22916000000b00333c453faeffa1641ed9a51cc086ab4a2ba12bb7892fb85962ad708ecebedf51ed3dafe5e81d45b210d427bd4e6e794266922c1d493e9119560418796a00688fe2b46e30c647c4988a82ed3244fff4873ca7a45380618ac8ba51178e9408bcdb833252f182cc9384ca2e22219dbdad212b3692d1c6655421c814dbeee0624a8ea94831b2b72468559917b043c90dfbd1aebc91afc4c125d8cc21c0d67d64983cda2e3f0df9608938e8d99c81fe9c4b1000000b00b06ffffe80510c5e16bc4994bae620dd123ecdb1ff4aefd055f4d73359b7f41834d7fc34d83ae7cf0e9f5b434750d1bc18e7f0047bd274965cf31b869220c1c749e28fee63df9bb4c933844e6f79e44673fa75e3c8624b36073151c1ffe642807b3ad1c7e92b860a590bd1d219ee6661ba1b87cb3fd794e43ee62324c10e1eaf0c850318423c86d90cc7b42ff72cdbb28abaae41504b669fc9598b791c319439bcfe9a75d95ab05af976d6095250d0b0000021c000000b00bbb4e13760919b12bafedbdecca67dd6a943f93ac7a05d76a9efc2fdeb1bcdfbd24bd2e045f3707e8f4de350b7510d139e13a3b2c04b99ba12ab7380d384599cb4e53b8d74f59a721fedf536b87346dec0134f00dfa79a3b6f56928553f49f33e62060b33de3733a3ae5dbb35bdd09c3003bf5e42375cbd8dfc9dc2f4dafe834bcd483f35603481cc057d818208fce703e00823378fb84b6764cb4b69871ba8d554f03091c9da55aaf63abe2b3caf12000000b010a23f67dc7bb57c681f613df0f3dec007f5f955b438cb8e528368e6b3a0a4b712421d317a75760dc6d5b33fbe475102a37f74e6c424e47c843fc782c1ede213febe085632c18cf2c62190f5aaee3fde9243d65c0076be75f554df56666d95aa037dc0998b0efdbad5bb644a556a8031194a61ee9d86a0ed45d4d926aa9e0eea3a7054920f0f08f68bd657cda8bbbdac2cee3cdceaab750237b4da8d34f4de945670986125db71be2d200807b6cd57e7000000b0023203e7c680b4e9cd431ed82343169ebc5fdf4f2eceb2035752c8fca5df6a1111bc6403242aac3f86de1cd6100ab7c844c7c1618e64d36873e659f8f0da888712e58458d94c8e9ac36a75598bf3cf2f91b4d47d0d968f29658095f6cd02a816125034c68dab4fe8394faef114375c020b40de84fb400477930869f8099b72ae3356afeef6d308a89d5924a8494741020bf93a79db46b534561013979b45db34e5c313a4da7905c99153a209d98d33090000021c000000b000f1f2565ad724f2579b214931275f92cd32f53cd5fb71f33d3f6eebb1a26d8a0e54b1038d70e6d7ef16e71fa6fc8d6df9717578aed34fb717f2de6ba5a8b483d22ae5743af84bfd83720e82c03cd9d015865ab39f29a9738cb58a013968416b7cb378ae77097b2a835e15680841a170193dc3f2fa9b60fec382c71fe3059dbfa71188af535a7ef41612809fb8142f7d172b2ca42462ea5d7e58361c21f4717bcb11bb72f69194101b3bcc23f3ab94e7000000b001367be00fec9a0225bb9632734f0b40efbc6eed47c2ef25053b444acde791feb2e341392ebb423a7fc6569c86d9c2d4bb9e6389c0d4e809d6050f19d624f522861e9d2f21b70b770b2d633bb0c7462f8d21a84263416a83b5cc720c7c667c686cea1d8b577fd4f15cfdb9401a187e3d06e5cc7ee3ef180bc3fe1ccbd9d7fd7f60b840ad1e8e78b752e78ca4924b198d224b969d5ac858b9fc73f3ed803a8049a348013318cf7f920e92b44f22734ee3000000b01f55af451020721c7b45bac7a233cdeb50e513dee5e5f4162c640d7dbf23366c3fb41891ca93f929ab58e52301336b9636be8bab5ef2d6b65bd9ac7326566f9130c879fa29511a0f11f07686964793efa6f7855a968debc3fdb0785ff939727a6ed9dd803179a5fc300e98cf6129718a16fd5d9ce3383af55a43b4473fae49522b0b8abd912a1839c1401fc68d4288da0a4cc119337dd9c18a35e334872a250aa06f07348e7293e52a5f085bd877854b0000021c000000b00bbb180b24b6b9a8cb0140eac38f08c3b1d474177aa88f82716251dea708ec787fd64da80bc67adb9edde8a10ddc0fc04ac35defdbdc1be3930df5ff5da5581c3ed2f5c2797c5798b5625e897ab9cf2be2131c1292e3b2e8d847285863ae231212418452983ac62468bb5a6b7bdf6f0d157c6990a001df5cda7098f63267f60eca0a267fb824f4a7a89e945b1d89f31c1b81d425002b8b857c772fe3e7866c899fbc22f2716c9e523edc7dee35978cea000000b004236537cbe45748f9b85f85b03126b1e1799c0a4554616219ec68c7ae41fb0cc472aa6c9aee717171858054728bfd1f56fab6e78afaed364bb5add1fbf986485563992e4d7081f889460ba5eb1e5bdace3bf89182b1292186cfa7d166e5524b3559c9b41c1522d18b7c59db905ddd910d1898bcdda8b735ca34a4c411eaf6abf12f440d71a84904e8f1cf6d77d73d1d2111374a14c15878c28e704051e80b2dfb7695f2e4dbb75567488890f1c541c6000000b01c72b2e6c86e8bf9708c81189f309ac1604871f2114511e15f68db386775bd9b33a49628373979499d77aa0353e2765f73d3318f02ff738baa1eb7080faac7430a81944424de81a9bbb5b201f233e7a45c6d5b2641207bed2f10ee68ca355f5c27e62754de5468c3577c5028ce16d874087d217f7df8b1cc05013d06b6434d13c4d8368ae1e8575eec065f74837e56d90919b0d7e7822dd26f1ae1d7ba77ce6dadaeef520b8761b60ce8f324db64f5250000021c000000b01d52a534f4a99a4095db8dd2c673ef8b118494cfb2e382e5790c899d2f5af14af07df5b46b24cc828c797a3bfa3c7a715594590bf45bad67b1357b440239a553034af2a1545e434b85848227935097018d57365c6fa63accb31175c66f1124f76720cf341a8695e157b2f0ff824ef1d81e667856d7e063bf98ffec1d6a7f9194eee5e612e106f7528ba1b71ebc97b70726ac35551ee56d683d5407e7ef164c08fbcb10d63c16cc97d3f84bb8799058e7000000b02f59334448da67ef7d3e6a5ae42ceba4989b030fce6ed4d3853f6fb6f9a5757cf6d972ddccf77854385d882b2f0ee15ace40901af8ed05684b1baeaf7868085145f7f263042d39d3fe22baf82d6b802f563015b628c30dd1cd39be22509f94bc98ede17e8439acf4c6f58e9c5b2d06922ee56f0d722a6b732be7a8adab05408c8326ce11d1b1371443d21869a3c791af09bb962155693ae2135747385c90254664eb4b569b36a32101a342839a6f5848000000b01ed5024ad44eb609041effd5a2f3a5f680ec29c0e5a478ab1d4aeadf7dc1db65fa1c132dd0c83a17269af4705636ce5e1006e3a33815ed59010207231e87d2c96f55c89d6fefdb32235a6722093cdb3c6461d4cb31ea75d510b19e6f3db6d3b1b7b1f50ee859e3e1033ecb3c2a144ab4020ca8389427b3649a4571b7c3850cbc38ee92efa37cebf9f0f8c525441ed9a302ec1ab130d7a4328a4005b7952a6d21e91e375bc3953fd41734d4b7b9c216e0000010ac00000180000000832b0803a539cd281064cf3d7aeb01ca55d82fdbbd3c6238ac75b38321066968aab0c6f5640000005b7a531096b90664eb9a4ec0f8afd0d3226f189e5863d1576b70f4e41c758914ff17d52837c741e11246c446e8305b92d3d302f06f101188a3b41a4d72a63c09e88c19225f91d2b294463f89f71828f125e4e674e6b2ae044b9cb15b000000f51d2da4a74155bab78dee663e88082feb987aa7f39b78e40dade41a80f80c8dc954f75df9000000cdb480a52d12f380ab1296d9118e7bf532f396e57839826f002eb74670997ced5fd2333f78369cc95d748b36e459027cfa5e29a7b6ee010f0d96cfaa2b6af7b608607a02c93a554acd16cba1a093f183275bff98d77e73ee400209657cdd52ba76545d3c0ead57accb59490c5a68867ca369bdbfa35bbab7439b42aaedc17314a0482808c2885fe07d2118bba0c4860e248f4f6ebfcd131ea713896eb832492fe19c4eeb76eaeead10a0f1baca6c64dabf6b3e24548a63b51cca92005f7173a0fdaae1d024f73dea06c02ac0f08200000165000000fa0a78807616f238fdb4798f1a43bb4827d8bb316b8ded85c2507b224cec03c0a6f609b28b000000d2f5a1fb9a7b14c868e40fea35835ea63c0bd8213817efa7d9f705171eb99bd582758f9f5a9e38f67e7a6c39ef10ba0d21c81647af8b1bf2f327e3645d27284f0ad30566caab7080ed1536b936cc68484a8e6618e2d2c01890cfd5ba6e9b48e2c9cafcff4ef0463f7900f0c6eaacaf25dbda71cdffafd370347fb64163830e91f29a94254e56d93783126edf40f1d56b241e2b893b62f95a7a04649049db62ed038d014b278b6675d73b6c26ed6f2da92625a90051601218d4f8fe03359060fe81b7139d8211a6083269e12f665524e61a298200000063288804b47aecb245769a58508c05e1242eb7c49f2853db5bbde842817b7b2c6e966cfd870000003b668ff1c5bc7a5dbf4d88ac8b08b1929b82f581f01faf076737ed78ad0cafb292df30217b17e509667a91748f12c8a48c7e3c6a8c17ef45023902e20000016f000000cd291fbd021cdd42134df58c49cf8419c7b74fdc61d925cdd45a22a78445c83c5e6afa0c2b000000a5fd68c1fa24e5e724daac41d8a20b63c4a61bc110ed7cc69d6eaf9eb16c4e5be136bfdb084c393b3eedfc8f7bd1d53ea3478178f91e86e86da781a00862c2a0d7ac322db1b81f72f89cc414109421f154440bb7e9e8ce55ba50bb461c231d4d36dade04a5bd4fc1fbb3f12633acd25d298d6abc82a8d6fd2595a20f387e6bc891634a7bf45f70cd11457cfaf40de159012142871430ff94e8da322dd2950e250bdd60a782350000009a0970d42a8fad6dad37a038eefdb74aa72fe3abe8d6ef8a9c098fd81e8cc5b975c0a1ef99000000726f1417a4d945af86709e4d2d2b0ea885fbf13e086772c9ba633530dbf93d6db47c93b6359e4a4acb770a7d8d3e1bf358e453c5a896bbca053ebfdd3cfbf1f6d2bd1a08077f865559e6c616063fdaf78687b4406136d3111f291bc966a94376888a5bab39703a65d8813c86963eb0a7fbacd8000001c9000000990db66a04287bb555b7056015bf52cdbeb73ad29755da46c0669463ba8e1ea31560dc7ef0000000711974e81a2e32653b2cb50d490e235abc817c6fecc17cea52cee4892eb3814952be23160b21420feafcd01daabde84884f1f99fe92a8e6326edc66711c59041165736b6f6d9753e267fbfbf684bdaa56684c7a0da7a8d733481cb562db72197847f2deda1b0d95a89a65c116be16f5e91dc000001281817a2d6d175952d0b1b4515e715771d2c3e861f6a070251cf696310d20570f24eb3809d00000100f32bcf10c1155801d1fe43f5b71e13db67de6bc08d1c019dac21c1d4f141abd3a365e051a90549cfd45bea5a49e544bb93c22437518a3c9e18e2e733edf48d7c473a3d21ee431074fb7351f406714f4539642b3e477719fdc28ca4c34601fc374b10ce8e92c8dc29652a7bca756894c9aae3aeb02885fb3329b9a3ce6ada3eac36c9d424c17ebe6dca7490c995d98f3336977258af6345eea63d91e0eeff14f0cd87f579054ed80b84e95a2dd38206851c964f1eced99f5ef974548bf48d3d26b8d337d8e55b7acd638e4789cf92cff5ee55182f2c349dcc17e5c70a8e5c7f7b0cb8e600ad84dec45fd66a46353026b34d09828abb26972f57375b6a8751e18300000132000000b129d649dadd64867279ddec45b7e4895084b0ee3aa8e7fbaaa91c4057083832fbe7eed39e00000089cc09cc38d8e09f2a4df927bdb5fb5076e5b0ae2abe65ad509d62657a1f14a2215635e27b950f70647f4e1d9b6ce807de33830e66cfacaa630d78b0560556b3d589fe3df016fdd693241f796a12bdee974c57f49033effacd8797160af4c2797fbac54e0929a321f561c2367399ef0057ccd03c205adce6d14b3dbc259d5f9917ed50a7f3797e0e75b3000000791f9e995a04246cef9666d6b0aa8671794aff2f1a6a504ab999cd7d65274b64555e9029110000005194e998f7e74762e8daa715444e107f1cffd12a54610ccdbdcf5e6f73b4bc8c7593935712814c80d9417f948f219ab022dfd7f6b86c9ad45b6c819d8364ef4d1bb115a0de93aa3838e85724467cfa56e682000001b10000007f0519094e31f9d4af168702458d72e5889a0c7e4ec2aaa650dcae46b5414d4258057a46320000005703c946aef56630f9adfc24ef4828ef8d67a0a4dccca467012c07d9a0dd849544cb0b1e07d673f9fd43cfe4239d7c27b736e295068b4aa15b48def540628c0ceb87b5fca9fc157a1e44f10c9967d383e79775a453ffeabe0000012a25afa10cb1aaf960dbe58c25ff1add0e8bd852ebc64b5a39bd09a22b5d4fc88f3371a85f00000102d32ee619d5a9dfda1ae47df9c71d122bdce30bd8ce9cd22aeb65f92f9e8cd99af15d483795a40576fcc816c4b5819fe5285a57286b1d86b4901c64bee4bb4d55b7fa31c988079244377bdf36ebe5f453fa2c623dcd18b6ba5263c1166338b0529902b50532a02a51a276067b5879f6b166cdb8d78ba4228f15d76101769aef92d45d12db29711ad0bc74ee6f95c6fd40eec90c3236341f6198c2a54180ba8924732938c05f8d24eb922dbaa47b4b5d6169cac9f3f2b215e6809622bb129353e09df2b65ed3f512e6bc643874848d0ed53051ae1165fb6814d9cf1abec9ccb6d1ca49ce84bc23e5718b92d5ef0e66681d2c2cace53c63e72fcd5b666f561738eabde8000001490000008b23676064b8490854d5b1c148ee39067e8dd81adb2c8bd7e8ac7ec8c6c27ae89d7a25651800000063af7850073f69f5e9ecff7d9e3e256edfb7f38112e3e70b41164fdb36d1a08ca18c78d438f2259889488c790cb651217b5723daae970aee7c383ec4a654b3239d2babe2337a9c059135fca72ebe24904e406999bc74cab6c4a595c57cd73f2c2ea4ee23000000b61c3d7bbe5132ef95832f984e2997144309fa0ae5672bca9c6a536ab4e162fe3ed403e3540000008e776e423046dc0f024ed144b239bb6fc12b2e5ccefd3c10216d29c1f4d7562a1f87972344baee5a00861ed3d8a1b1c7a5703196a9420730c3314ebfe1a6b14de0ceae2c026f2f5a2ef86eb7bf3121905cdf9117904f378d2c52c65a8cb2cbfcdcec51ff1aba6b4bdb213f4efa0ce00c431ad366fdeb101efdc5f250cb6860fee8247d0ad69e7b53617b288fe80197000001a10000009321ac06edd327ea7643be433293ccc5ddcd6408cc307c78ee59391ce8c6b56de9cec1f4ed0000006b972654d0ff02f91ba67860255a5a602bdcc82be17b9eb29473c9c16f26a8be38fc1e01fee9e1e5ca95480d83fdd28b8c4a3c47c01bc0e90e4aa46f90a1d3af100ba8bcef6c246e95b88c390ef7d7227f6a3eacbd05f4d8a9510a6bc42cc8355558d0acafb70bcb6489a9f4000001061c949ca30b1d1e1bf117d88642583c61ecfe654af067c9d00c29678afee0e699886035e2000000de79ec4101970c973e81e64c4095cb835105299af94f8a7844bc4f0ef8a9084cf7b5a7b0545a28a359b860f54f03d74f47e9e7b81ae9714a76d4ed34cf0205c1ea0f23f2488a9c8f6940c9b5afac88dfa96acadcc1a622a88d14e7c3af01d6991b86b13a8b88a9b774ab10d577c6e69edfd508fb04af17a4f295011d67c4a8dc3e439819d353e95e016bbe610372a2d565ba65ffd7471af05a3a31c4e71df59496223711c47992324079e4655397a7b73830e023ab80d07c36eb83acc432293ac4d4635c9889c95e269f21f31bf7618d2a2e109a7368ed25af0387d3a37dd4000001a5000000fc16b61707bed90a064e77bf95dc0cacedfcd5af91563ebdffdf6aaaac7d49b66daeafce79000000d4b07066112821db14e6559fc0f8af57f9065e69a5b41a29bb52bb86aa1c398ee8dbed87741d7606caf31da36b61c69d6f7e23188a24f57797e78d2e8716e9d3a3968363a0d30e35032ac33e44dcdbd02864a9df192cbbdacc8dd0edcc9b5db7bf1ca1f97d3eaa04d188ee79b54052d64f75cbb396e11e5adca1c8bb3e49f57d33415bbdeb2bc9ffdae657f8eb7dc73c41d1ecd001848c52eae5c3149874b7ef2acc979b277d389a7c272378a98a21ca81beeaa7fe34fc0f1bcb58a2639bf33f11ab2a88a76fd41de8ac59382c13883880c2e1d70a000000a112768a4d9f07ac413172be46d0e5f861554d65c7c22e007789b1c8d5812e0f4768a4ece800000079216119defe61bf4e0b43087fb513d94cc3effe79e2c1d08ebb972579d77114e459e2de2fa17e4a832a797d1d4efcb261d09721af723a68fa1a4ced9b8f3100afacdd3b8c9728ecf07a149fcb8ba29a81b3e3d1bc5fab08e475e5f916f0878576872f404dbf060b38b14b99b019442ab7928593163673a207260000013f0000003028f38f379de7eb1a6feff892291e2b275dfc393bf7c89b1bd41804db626a545d1861c62c000000082e32a12438552f900000010725a8831f2d27f7dac9eed50bb64205174d8cdb75d624611531fe4b40655918466083ae78000000df54b4db94773fe659cd802215995241bf4131c900c6b39156e02f1f9d2e48028d07ba1032e2e5848b2b7704735ddc12b413a2399dd13178598b7444841f7dc328a956f48e31d136d4f37842df7dde9449e59838a7ec9a7aa5579b6c99ff5561fe3c7cf9f75841955a58653fe826c2a4bba9fb541e946f432134226bcdd72642f2cbfb108b0e5a6ebd473ad22a756f37a1c269889591ba3c804d4d44251245998b94d1b1dbeeb19352bcd66f9d85f0eb3a18a698b5451376a95fafc32abad8026b098dfda55b0562e93c6353bc83e2f0648b743b3d8c48478b9cd2c6bcaef957000001b20000011104de00ab89e8eec541c75c30a52755ce797c57c59c673e3a26d1a80f0599617d55b7caf5000000e99704e728dcf388ecf08efbdd67bd5b64ae82671ae7f45e14ab60a7975563e9e9b3223b7858bacd0984ce7ac5e4e7d9a6ff2b9a682398f189a7bfa7e1e15c3343e53875461bd03f46d557f213f570238af1aed58406744df91edba0df91a779b84d0caa2035c784f5cf0563b2b3672ec72c04b7158d4253d688c370466814f4277b4492a741558db3a7691ea44fc60fd82145c20b83e5fd5b9456f3e89a1741dc0a89b611adab9ff17631abc7d1f2153f69cbe6d2bf8908fe14eab9ac9d88671f6c83331a2c1d1f3b7b5ec29d8f7c660ea831bfaa9bb6527ae3a917225b958970a29e3d2b9b6e17c82e0000009903564465c99e3d215396e086d745fc33f2c8de6fac1886935acf74174f492edb5d95bc6d00000071d1d4d319505c21aeb25538ed2e5e615514c5144ee480500ad1b73c49f20b30eb3ca9495fb31a65c3b1c48223e6d4b20a97040539b3cc90faa8415b1c0e71328dafed96b0e551454ad2060ae50eb453cbfccf2793538bc1fa5ed6c1766fe90d328989434bd56053bde4fa0a624091278ffc00380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01b3feb407527ec22b25cbe3effb7fbe361de44f23829ff13e7321af463221ba326ced2dbed353737a49efe18ad082192f4e8c09536e89865a78cab54a133168a534c53e05ee7ffe2018e44c9ba533a26561bda6b1d3b85cf5fe859132d32bc0c802c8177dbfa635c578658040ec0ca2a11c4d51eb06d5c0ff0268ae623af885aaaed9c33c41df9c7cd3805cc7233ef4d12d5ab1dd88410c2499cee17e6cddf2e5e0a70b5de5a185314137166f3b9c6f4000000b021e108ebd549d6431e3ae490c9d19e407fb997421cec1fd1d78e4df896c9d54450ae30bb18f32c9821ffa78c06cf4955adfce9bfa79e5ea597f23a46c7e39a63b34c38c0f77fa172962cd6065092c47e26f5901f3d113b7ba38e3e12d78559b38d2d6d50bcd209056bf9b730c6821c1e16fbf3a94691b46ecd7e3d63cb01073b3bddf190a441580e59381deaa9b7ed0e0e7721ee1493d2c3a1b798f175e15903320e2a0349d988ed0ccf8109e3698b57000000b01798ba25aeb7d1c040a91fe24b9a126ae2282a9316bdffbbceb04a1dee624bb3502bcb6d276bfe63c5320666801760b918abe5b21d7abd63a95b54fd1123f6262218f3cf280a5fe49c97ab4acd67720e88a53ba796b30a162b06c742c308e6d1c2fb837b1773efc9713944681c07f3ef1912832c300741b935c48e2931af0b411114c0fb7152f0177bcd9e09dc0591ac1b93f7caed12f0cb7bd08c4a991269ab179e5255d6d4f594bbe8a15c431847850000021c000000b00565fd637bb1b99079f5585f24bf7ff47e4f99986e948492a93503e632991aeca4926120386a1e8465f64c833e52ec0e0b81446fdc126dccfb926c2e2ad6506be995b28a3767d76b6f470130c158b7ef1b456cc49a48cd833f203fbe31ece995c97d494f59826acbb56ca8732caa10201ac3a83eaabc55fd7e6640f2f30962e3b0b06e2ecacc295b8df676c3098f949d03534b0e38ee61d23fe7d20df2583da6617aeee735a3b489e3922b27e15f6320000000b01ac84a7600b0b98a291d6fcab640fcfb22545d966231e4f94544fd7b880cb80aa7e6f384aaf6127f4b926c71639e531921cfaff510a80df43e60e33ca5bcbf0046d8fd3fef168369b1035ac9de85b299b2df5f33aed7cdee7615ad7ed72b87972ab0b58529ca775d95c177228f9ee68c2c5c723e4ee29bbca51db1f6898bc41ff433abdb3ccc9990788258227346367d13fec5a4f03f9c14898483df85a4ce6b48e7476319946f1dbad0e5dfcd0ad76c000000b00da3e7c07dd8b16ed601e7089d7e08545cf78a3953a977d472fb3669e5702179d26a63648de6c0b67ce60a19f4e099c0d2acd5ef3fdca0969ca555a985b61253d322dce3ba93d566937570f65581e10be43ea374006a4ee8452f9c0558827236c2aaffd72243123d0b2ec823bc0e151f2a9c658e0be59f078781a94b046f01f6c323b3f108328840ddfafc8a6a3f85aa16722d19b3e7992dcc4dbaf8032a2f12f20ed6efc2700e895d54e23c4a4179360000021c000000b02a5a16fbe006c026202f8a1bcbad76dcbcfc5275c4a066c0d5d586c54a1ad1b0e539fe881f6a5bbdfe53a272240774fc85c27e53ee2db80e6431527ee3bc1ea9ec818d0af8d55beecbbcae8b1c12f41ed8abd624706ef16a4f5a9f6adab281ef04a9686a62fd161e855b2c76e33b30702fb47bdccc120906877ef14f25e7a7ef58ece5a5d0621934e0ab08436fcd32a5004dae5e430c69175e7b8b147b7ed8656131addfbc17371bbf4709dd242f2674000000b0194e1575a87eb7e23b494c79afe7afa4bc433c71436e20f628b3aebfc9f38d09a41b2dcc9a369893e2dee19a591f175c1575a9db1ffa9c8b72e06e4f5356fe6411f70c5ecfc38df3b84ab090c274962745c055e31da655460377ac3be4ebfcca34205332689bdfaa09ed1dda3e35c8181cadfe9e906c5685559529140d267b7328f21e289ddd22a7369b3ed3872552ad1d9a67d69481aabb94a14abc3ccb7638528214906ee2a955e8f080d05ea14f45000000b001d19f0c699a4275bb8fcce1f55ae5255f69aa8b45aee41ce479a65070a7f50857abab2976e0309c1229841ad05f7f1c8193104c47c66c838323ef52166857600d422841a58f971f29b61dfbbdca4731a10f57ffac4cdc0d67995dcb4c5fa7d2d17db1ee7537640c8d62dc424827b1a82a07713b225d3cc7ebda6a4ba0061a77d9bcf06b7689d119dc3673284ebf25742b24f24ef67fd5229da13d28ba910c634b3a83384ab57b88370ff16b75a104700000021c000000b00136635a654091a110b1b36bc89045fb7a91a06c8ffc3bcea669a4fbb7ee27e3e67da2a9a3ae0f212abfb6af37618b0e5b9eebb8b5895ff250b03e92f2e58d88a80c548efc911df66e1f0bdb022e03172583ed5cabb8246f44c2c4312082726d7711682e2495b34869978914e7ef4501271b3c023754c38903bf1c347861c8b5a0b6ecb2afbdc9130e2166547a6f12bf074c6c0322ac46dbe143c831cab71644b22108754063485d2d26baccd737fd9f000000b021b7fed947b09e5335a5f2091cca492211b03a496703cfae7b043800de39e36c6336aed4125cd0717c34f53dd1e935a446013df576a6f919ef5335577c6fb9961022b34a7b40815ce3857dd449cf59972a4a9536b47ac221fa5c2dc16d7b1963600d9ecf28df4110b084e77b579723ec24286a4b2eb2a78f1a2fef66ea5dba4615b372f6655eba1952437efe341c599f2f65123b812a7d53305f3fc60ac46ef6d44688c588b80a3bfb812d6a7cb6650f000000b0235b732d7744f70906ae9376cec9e3607dd0e3df289b724429ff8f20c57c684dc44f127dea8af35f377654d52dde20541de129c0a64cca038d3b3e8b6f3f68b83a866d31083b50943199ac9e4b31f89401dd7c8f76898e1796019f80c9c2b5b988d9a6c7e9e6b05571038bc3afd2af1928d3dde4c2c0ea1b1ad383dca99399fef6cf7087a051014de1986c1074791e9006aa890157106d01f2b44fc83110039ccbec4b2b222549de5804c70d3d3a6e600000021c000000b01bf8aea152ec6bb10a84ec6a43f016017faf0043269bf72a4055da914a3cc05cd0380d9a132863f7666224fb04167f2311e7355bb443eda7382fefd32741c316a15f7aca50e1b3c2512e99bb13050569fafaff1e164b555634fa77c8b253289a1e819d140b98c7dcc0df40ca0bd4ddb7174d9beef4478e802aa1816f0e5b0ecf453a53e72dfcfd0781fa42dd62d658d1035110003bd03a07b3c2967c54363baa2ecfa147b964580ee498cc528faf5356000000b02abe06b985797d61ec7f433f29fca21fbee5a52b4abfd4aa991a162a8c91cfd34a0d1e8c196cc45f4c044a58b974b3c2ff64feda4d22d97d0786026faa7e9df5862f251c8444ab7ed2c0ed0fcd3532383ac304db74fae26da836d5f3da005a8b062138edb3cf86f676f454922d3342a0156a2fdacd6a317d25e40563c3b3a7f3fd2031adb614b68ebd05e7353929a32213b90fbfd28604223de4b99b54c65be7cdc0d2081bd8483ef94090571d6d6722000000b008eb5b0b429beb3896fde069fcdda3adf1ff93f505438f4a514fdcd33d6263682b01201976630534e969961cc7587654cd47395be56901929a1f71ad9c5b08aef8c6dd5a95b702ba20a0107fec9aaa8fef449a9e357c0b3269ff5b1f24d073f0c20d0324984c027c37dd9728f442bc8e034add118ac6bea6d6a7a1333a0fb01f73312d4ef41e544ec3a3cbb8d862e7110be573165fa511cec2de1775d3d2347097aa6b62084f0b326038b22e4c0ad5390000021c000000b00797573405dc588d45a43f996741924b99506886944573c6deac66ca16dc8a741450414fa0875cf3e25e5abd6e57fc32cd412755f26f28b945fca03a7ce4f9bef095096dfd58f28182f90ff26ab19bbb73b82ab142827114f7dd81bb7b50aaf99a6dbfe5ea09c818e1eb286e43455ebc17e671da786dacb4cd172b9efdac4a61b32c222e9485f8d4512e015174be44dc0a986a05c85ac3bea240adf0d6a651a75363b891192cf07321a7f1663c77b97d000000b001b7c10ddd953170a87791a7034813f36fb68e1564a9c3885a5a91b9d913998fdce02e9d3bfe0d39c92719c49c35b3db4293706ec78d0eba8674fcf3ed950fe8b823c73bf4cd9d245f686e37771743d94ef2ca25f27b2322dc8966ad4eee48edd3d232a34c20f60ee2d23ca87e2bdb4423c8779aeff0bc18f5d008703b11e3ef906e01a7ca1ded632002a3e0fa34b22d12f85c573d3cea234f0ae2dc63e495fce3d85c8627773e520e496a204173688c000000b02eaf175ca8ac8d445a9734b58ebcdb0ced503dd3294d98e08b5da036ac45e4566105bf8d5002dd15e8f8cf44cf2e2efb38d60eff25043f4f91d894066a27e569a532c2adaeafc2858962509c13f167ff080b68a997e8c185f69b21feed30bc4134dd45544b254cf39483705c23a87b5d0161f9dc9374f0cdf1a76936a4e743770281400ccf72e19134a3b10079e9c696057efb3f9bcf00201accc7dfa6b340495b10fd07375c96ce2a0a02b81706bdb30000021c000000b0151b02a617d3d24391ddd1ffc6938794a3c2c7c33a11592d7d4b4a733463f376a8f46be1b06313fa7df7983d7c546ae6a9e8759dccc8978f38efca51fe6d3af126b45fbbd75f90f62968851c69b54500ff143dfc20a7bcac1502a06ebd3d148269880da7d55e3ec078de32d24eddad3411b72740ddeca15f3fa8cbd442a1cf500b9f320dc9c374669ed67eb414d744c02598ff0fcaae0cb7c42caf9211e51233274760c41a0df7e0c825e4c7178caf9b000000b01415c16316a47a60365bd28c3de45da22f4065b9b5837ead5c2fff022c788d2a4952cde11e2ed462205c355535f295a5f21619831b162648d1624444c17d1c954329bd2d7a5b35bf6b73ad691add43bf5b9561dbace533ee71c15943f3ec7b39c4e49670584f73299a450475395e052407f1439010805c66c0cfa1fad6fcadaefda2a8cebe664f980b734c5b536d4be72d7e12b7fe7f5c067d00f3704d4cc6018f36b00939767539db6cc9c611456cf0000000b00e48b39cfd858178fb956c1ab086ad3d5f84db22ec7978f65ae58bbbe6a8d3512dce510659a90f8fff7b828a58c75345364210a4faab573f833fe8050b4c3df3d487c334d58346e2a903785a5e008efd800dbb70a0c1bc36079c05adb0d747e91618266f4ab5bd633b29d79176b027b92e6c528a9c9ced8c7ab6cf4df92f57ec6872d44cdb1ff57cfaea7eabd348adf525f539525c1217a41c6f965871078cf80d0064a8a8122f228380f389cb6eddc00000021c000000b00bcb909ed306754fb6924cd00d2268f377c0add2c9959617c16d55140d9b7470d68577af3fd83048f3ad81892a61cf15fa99717eef48c40098f94b2247cd418ce4d43850597fd2a27bdee1a5bd7313bf2ff594cebb7ca400e47e1eb63ecad5f850b89a7d930a4c331e5261b7f0e26fed1f7cdb2256847b5ca4a776cf526d53c7bc64f11d9e18cde0804fc41c4006581c1743a96e0c6c988a92f24f41c0af42c3028cae64c39611b66dc517de7d1175ef000000b01baef94a391edc636afc8291e958b61aa1f6089d1aed148bbaac65faddb1d9e8f235ef383afa0f027ab200e2898aa9f9d272d2a756553414b7f27258593c765deeeb0dfec3493ff4d774ce8037e3c508149e49fd05e5798f065a6dd0eb7425bcb2c570af79f9b3c7ad1f58328b09d88e0bee116436b45a8dd7fccf413aad080c7eeb249e58ffb08fee661cf7a0af10d108fe75c1f210c93864c1cc4ddbc7239aa4f02649dcfd19e2288561ec7582d6d0000000b0292ff9c4b5ef4e429a79a1115997708837c148bc3255dffad5d80188d9f0b4dcd96ce53424f391f5f90566ab40f60dc83875a38b4b217d340aa6e4526377dbb20d679a95d3c83816d839c878e06fb2945bcabf3e974208f4cb0ec2ddbb99e2f7b1168e2b529e3639c052cdb09655af961751c603a7eb39f48689c3e70cfdd6a0ebfac53d227137cb922fff613d607b1802985f2be1c194b0c46c4e959093430e09d9d3f4b7982a561728c01bacc3ff2c00000ecc000001c10000011d2dd6eec19624738e7bd092e928d9a343545c6e2c0a9765fd7b0631a523b37edbac4b8402000000f5e558015f977aa31fdefd65bf208731340ef7d66577809269a405992306674c595e61f35c6bd876a555b92a25e0e5001836263bac06c7785b641f5589f6a9d7a330805fbe924012b70f836dc9faef2a7faa54e20ab9435b13c331edebb55610b88ee48b17141206e1692e3de7866c244fbb71951c4604f63d062f22b4bdbe8423fb6f753f68baaf02bde9384715a014db88b89d2616386533ce8bf309ccdecf783cd95a7c996bea99e4ab82a26600ce6e5ddf1e7b63a677f5f7776ce9f145be990fd8d7e47aff17a9a9d90c3a63ec69fb931daa96c32f7641c1012565152082cba6f2c62b371202d02079ee767f9b0338365d66a7200000009c05f4f8ec661990606061f07f37f5aace4417d7d47b769fc8913b89ee38e47f0d265bf2f50000007494bc1e14f8f47949d29ec898b0fe66f700df7a7ee7ca90e53c12fae7b7de73ad420f1eb01e8177fbcee02607c26dab112333b8078a808857b0ef3288dca358194e55dc6e718351d5db78bfcb9b232aca9144d38c37d5850df52c447dd6589b4facef5e95c3655c7a318cac4601f24382463f05560000014c0000008f10cb60f7cda3e14a7274f7c1246a9e22c3fa7227ea01957a8414fd1ce8c6a8e79edf6d60000000671b6835e821ce1c0b584b6d88256194906d41127297038139e896c0b901c4da2876d33f0dd9a73576a9a65d2e95d423802bb6e01ebd8fdb63aa8fe6c719d390ffe9a60d5743cea1ef782e2056d454f81ed57fc07b923f3c465d8bb80889502c13e3dee183cdf2dc000000b5294e8e602dd6f03d078cb6574e51a657b09042d0bb55c0fbce1a6aa4dd6e11cfecdac27a0000008da177260cc41bef6566d537283cfc1b34c19def4e3b447d9263e6ba970017c4afeb123e208e120941c9e651a35f048c78f2c39500485217d1b23b1b54d0884fed1d90e8d626fa61d6b9b7ca226c392eeb446bf6f54a85b56eabdb6d5fe67bfef25588c1d583fc1ad619efe0b34a239d113e414f369d8c57c1f0d5a40789be8c8d3435a8707c85edc239071916380000012a0000007509a23baa628f748b28ab75d31563b3413b60b9eed263d4fbe34b187eea376ac6d1b424150000004db190dbda2a5d146d273d8275ffa99ce2383b1042ea372b8f758bcae7294de549a0f32d87882b859c7b24c40ffb6b0cae9f09d3f44e272a13a4a3a6473d8038a78453030768aff9fdd4a410a5e7000000ad031806da48fd4b11cc0e83081e145e401d216a5e956f647abbd0907f565be7ef9063a03f000000851616169816807e657423194f9533e5fc597879fe406a984a29e3fd35b53daf07f610c3fac34e8b529515097314eb9dd3ec3a2971d354593a927eee6ee712eab8981e1ad5fa1f0974df6bb87b7092c6e9de7ce6ebeb8400c7d5eabc24e249a0a850dbca0b5f51351772154ea67ff8ac5dba59b18fd6579652185f1ab9fd351adac27343c304000001c7000000f80a4af45590ee6c2bb4d413533175249036eb1ff34dd4ca899c3abb73271375e4b1ba0f56000000d02e17acaf734e40c220d047aa0b7c12b20954eb6fe5992b05a42fdcfc5c3a78efeda41165a59e6910a4a11cabe9979bf875b2d235c41fb02508f54d9d2962b671d7781d658a066fbbb9bfee52f656237e7a873a9f846fe4a7117525b470dc1a50c747101320be83592d8e4bc2b63145febf1935426c35abebe3fbb810123d6063be633e3c9f075b4733246a878583e557d4150e0de7458e2cafb798616b2d0ae3b6c76e65841eed84535abc7cfb857988aaf57e03c52ea6aa32161cd34595ed93fd716c3b8401f7a4548dbac2b121c66c000000c700ea13d68bfc000866fe2fb84991b4d771d4d79ae3f0afcee93c694be52b51f3b48148950000009f1e0b1c26e95bc7cecffc3822df6cd2de43e4d8245d67422f77f9f79e8c085d3a71273e0e50951c4f0dc1995c3061141811ff1c936f9ef86cd5f4cd0e2eac573931d40a8a4be37824f7d260b55fadb94d0db63768916fc320855ad1d8f27945ce683d53d84c6ef3f1433d6b5d836e3a7cba88f6d4ea158fca1a3d35d9387c25109aea34059d509ffcfd7db945509ab9e76a638feb4c8bb95a6754ea6fc9f26e00000189000000f9085890dcd49c23b24be80660df1b838cb4c1d9855f0d61302b00e30fa09303883b841ff5000000d10b1d619c966f9b187a87267f0e64e8bedafe67fc3b53960bae428ca81018c3ae1bd752f3c298ed7955a108541689d6978faf036faabfba7cdd4e5f9bf26f731fd8f9926ed8ec15ff1f0e371a6b669796066955ef363591b744032f217844de1aea658014047896dd427c0bac1dea723c2c9d176e9aec2aa95300dbcc17a21f84d770c5c46f68ef67ee6de49313f5da2c0b91e7bc230c87dfbe5353e23ca364f2d2f140d1461f59a305e4cc5821c49195a0a0e60c5fd1175f22aa107e0e3930544aa97fd897ca89e6b2f01eabbc1187bfec000000880f8c75005c725ba8dd3fe1a25f199e1ebdb8685ed12bcc54521a8b5c207f48835fe29c38000000600f8a15bfd076caba290c114fd0e31251dd4fd600117623794e8bb995d083f93fc5467c61ab462f113d9059841f48555e5018a03c0c039635b1947baa6202c97348a9da7f845af179a5d950bb9931f33c89f67228a7902d323da48e01e98c9d790000009e0000004d266fd188afcc97ca1cfea31b2ffda55299d83370bdcf0db8ac73f71509adff820c23f4e50000002504bf192883ac625b43799e7159d82fa834335b120dcbe3aec9359743515e62d929ac67aaa50000004906856cca916fc48a3c9fc2969079ad19e0f2f553846525fb941e2b9b45bb97355c251039000000210a709028fe903afbbefeab52422959fcd7cba6ac5822cfe8e12a4f7714b36b500d000001a80000012b2124809c07d0ae909a4ad977cd2d8366056448f6930fad75062e9f5aa4c87e7660c911a600000103217a37d8c5c985226ffb400187ff459d77baa02aba1c349094992966d03e5a9aaeeee8ac12772ac96d45110813f4b57b65cd8ec2d8cb5d59b3b578ceaa64d47dbef2369fe27e4a94e093f6d15b6063a71f6781f9a13266ceb60f7e872f9094b1651b34998060ff7cf9726bfb4dc50c00dd0544be6781899510fb0fb5ab28080356b73e632765a4db02595e7b4d7b61585d70b5b73c2df41cc428c7d641ba733d885c96ac0813d6b141fc501d5f24d3864ffeef6e8ad3a32a502661535fda897041d7ed02f074bb7c15f16b32dd342a10b1f00bbbc02d2832c8561806b1c01217d58b1c2dba0e1da5afd3c20d7362df8f6299bbad0ced8c60a0516488b1f80c104b325a00000075032c220fd5a62d17c724bf286156790b141a2ea2707397be0c91955b9edbb6687a583be30000004d7730e31bb8aa2b346e391f28bdc6502dab2325712a6510935fd385ab5ebdf1193002a606f874a3ac342b24a851669a1db65ea3d4fd66849f90052e45a80d6c00007dbd435dced946062d4dfcd90000017f000000d417171e1746547c59114b15ec2b4544f198bf8b440539a187b22d92ddb50146eea8ef9b6f000000ac0010762b517e190f2c264c7bd13013d1c1eabf291a542c0afafd3fad71721e7f683637485771ee8733bb7c79009cd67e08566aab4a5db9465ba27d6dcd67fa7348f7e3de22fbf20076a6f91bb0c55339d8dca5077d8109d9d59df72f34285a3f2620ede0f7f1d63a915e56aa6b75f153ae747a35f00764542f3cd9b404964bf5599c5c635d1f2f57aa52d0d75edb71b651a0db92fa2132c2b8d7188bcd447375fe15fefd6f26af67fefb5779000000a310adbe2fef26227a3fb6fff631970ea3636c8bc7a026b684dd499d2c59b5a35ae898ac130000007b222e2bba567cd7bc16e145383e44216138853a00b2abe41994c5f0a1e4cb18136da8810329ca4d2e55a651c488971440203fb6ac050928f6887b2874bd3d19c3d04cbff4421126ea45e98fdacdd5a4b8acc083d498d25a54475a2041621720c33fdacdf288b3f65334eac6a50a8c5c72637a61bf852fd4d672c1a7000001a50000007f05b885ac5ba27d92da2a796239906dfac70c333ce690f136eba573e96167e7e1d7e93c1200000057a97c34bcc52515fdbaee2253fb223c2c78c59cf5e7b94c1ef43282cda92f1d622a46641c0a6f9202a83c005134ccb786deeb94738d03ab85f65b6af1d8f168efd69b9d87fd44d3747c8901c3d62bbba705b969b465e84a0000011e1b20d305cc82e86e0ae67ca3e24fe9d233ea78fb6421c9b25443d23a16824397737aa41d000000f6dfa1f525f89e9474603cebe0efadcbea055267cd4d7d9b747440c52852dd3735c0a40a32005df45ae59b4d78a7b2b32133eb0fbf1d43f473a0fe17d0541b07659bbf846293b9a4d927c565fa60e4e6c2cc7501004431f9dbdb2976d4bd53b6c78646a62e7c8c41b83b9872a3d75e865c2f9378b1d0ec06cd97bec93506ef9f16c84d5c0581535ae50dca7805c84cef0432e0be8dcea13052638940e1cba3003b259b88cdf30d56af9aa1cbf54923f95cfbe0c78ba1bcafecfef4ba1098406e08e9dd5bc2e21abd51fcb74ee218b066138610dacb3529bf9ca2adf2de82492bf6ce3c7c15e46b6655a758ea28792634fff885409b6e46000000d7000000531489f3af471f3343e88dda61f4eb9c6703360c4a1ceb624b3115e0b613e6f872e2055d7b0000002ba94c6ec7b2a995253655081c83d93bbcc7082b853d3a6f456d8bb63d1f6ad180c9a5bc00fd90cc58f5d0690000007c14c0803a4db1d4ffffb25f40be3db6a8a25e968ac9ab5729b248943402f0ff22c59fc4b40000005424b7d5c5c2e1af251873c45b1be9717509a5b2b16900c0efc6206ae40b93aa02cdcf4a7b4c9e423c0c13200a0d2aa99f5d4347da788b72a3e1db22e9e1df70ab5a2521fda3ec30d786cc58068664a662671ff282000000d80000003019fe86b535d5ba957495140f5900d94cd291d555848a751badb45364d111d64a3fc34e54000000084f90273f585dab55000000a011135a580a1823f1ba378be18cdbf681344e88a61151bdaad4054bc5de11c3feb0278ab400000078ebf554a8edd1cbff36798fc84380dbae74eb5084e858a5a6eda1ff8c7665b3a8e03ae2b7ad1d20c10e381f0df79b73e6f44dc343567442042e2ab83f7531c318d6f08247c5e8b70eeedf0cb5154dd80c821b78a7708b697405338214352125635674153c8a98bf0827d9bef2b0beb6a57053e64ead16dae5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b009ce0736a33b46462c1e6c5572632c1d58b815b4a26d81226aea5beccf7afb9c689faad8a427e95f1525dd3a5e0155292280071669404455802701045604ef6279935d8f7e3a7875ffff0d614e31ce9a64d948bb2653179b48f184d3bbcdfbeacee602cd33b4b28c9e6d102919af8ba90a876fc29ea228f6159a73d2ac27fa2b4fcf6db352025268129aacdfc305be5f0e02d1d2cf2d36b0701ce988068f79f669e7c6b517973208b00c6f2721ecddc7000000b02a0c0624a34d31f085f632fdfff903ec0346f4217f8a304e47bb68937e6a358f953fba170a4f091cf8234aa92f46f732e064c5716d07c1393eb712475b1290a8be24dc7947a2e2bd47cdb1f133bf359ec1f7e4f0b534f7466cdb00a2a95e1b2bd7a498b4663bf929e3c5732bc66cfa882051b9421b1631b83fe8b8d830cb9c48945278a556fb9b98f8ffe107159d1b951f29ebe9e7e908f387c667558e50528c779a1918c7e4777f25b33d5166b9eb0b000000b01e5c61c1bfbd269afc6813338978d9d0ce106a81c15a921e340ca36c05c6e72a211db4915aebd45ca739bad3a21b36d871e117092d48e417258501ff384396f986a1569cb7047fa227486096ee006dd30fcdf6592b67e87e7a06bd26857771dc1fecb23519d42c21bc354ce923c28f0f2c51513a9c512c33d2301dc8d2269d51f5fbb6f4eabfd43d31a18b2a8d198d081f72cbc9fe329e55b688a599b976a631b6b9d013cb7559aa42efeea7a309499d0000021c000000b02d9f446895f9b372c9f12211fc98efcc37726347d3e2a6fb5872c7a23d51b90ccda244ba59f18e2a35a31cd3fd705cf168fd113be4736bccdf1d2783dae6338d4ef62de3c691ab9199360418caff1776f1aa2f244cdb8584ca9330a79251338b471bed998f8b3ff3b28d2f397aebdf8c0a47c75f730c27b3dc00a3c203037eba686fa13b4b9467a1e2c3e9c1bd7a3d05216dcda5256a7aba62fe39bd3bacf95415bc03f4788f5b1fd648391760a4f6f6000000b00f3f988f926fd552f2c4bc1cbdf9c2dca5da8e1c75a73592581887e6fa12cd2b16ce403287b5e86d876229596a3b33e1e6670ff8ec51284c049c5afd4549f9086125cfc0cad7f07ff4b0e3d82c18885e9df5a5fd29d06709fce25a7cb5f7948740689462d8ab0429965d870ce6e8aeb0284ef68db45c5f273857d62b3726d6d5c4965e51b383c092f46d18fce543bc88246bd8c6596bb60286ea36d202326bc64ab9c4fe0abf9624b1a254da5f3f248f000000b0277d1ef895778634227e379aab14298410708ef1c946c0a2e08a722a78fd9e89127a783c63dcb0cf0ff9c032840227768a2d84af456b091506f11598a1d4cdc058e890a5c1113ed5e4776e9f76326a9ec91bb00a0617cd066b7798fe3ee74a188b1ba2f396aa275b06c8c5fcb8a437610bff96db6b742d1b43c79f1a8d25d77352e54f055814266ac81b3faece62269a1a34b8c608e8db3eb2bc4586f3a4d221d52e620eb2648d4128ec633fa213870e0000021c000000b012f31bab459b66891b06bdf43f3f3b2cb67f59405cf117403aca8740f66b3a1ecc7fa1b7b5773f8168574e5e7ba4aaa07ffc44327e79f3ab8de296b449eb265e96215fec5c996f5d79209827444fa6e688444ac7ffdf26ae5db57ba5afb20eab9e8e415f57e24e415f256168f1b8bcd8227935e56fd746893ebda6af39e9e1a2956409c62752a8dbd490839fd4955d182e8b121c4411c21d2f79c2a7a29cf82d22f776e46cb73351313c57a6a063cc36000000b017a6090b620a3fe2884119b6617949477a35771fc290b6e038768065f2c56b72cf19f142aa85623b8677ba38fbb944ffd8509e58f31cb1f0d5d66d98a5f1d15aa76db0a699e5d65516e778e8caa93df2ddbab612fff8c57008be8a0eb4a556483e919c8eec439b03030ecd12445c7251268f4859993ecb0290a449ae54b4616941e1bcd9a6690c778d952cf985fd31290d45ab2eb61c4fa5e075c4dc15bc934f727feb7bba0434fb4e5972e1b20bb14c000000b025fc2f03b8f9b2cf4b3447862ba233018cf1e9305286873d3fe7ba0bf82c9590c6a957d308e79c0f67f074fffb14b5a969ab7510a3bbd2bba62976ee567b459eee45810a407b52bcee526a92ba5eb8b8febe775ee46ac6d26c59dfeafb6f8eb9a9aac320cd6629ef79d07194a6289c8a2a0125f7c4525d4b91955997ab6cdd16900f8bed55217dcaf02eb85ebe79b899154b89e50602e80634ad46749367df944fef020f6ad5f58d99f15c2c3d1a207a0000021c000000b009f081552076a07dd95b4085eaf202611b5a4292c008eb203c5736583c9a820aac2fe9b2ba4a992ffc98a16f81b78c21dc0f2001e74754c5b4f98ccee84d40dc649365cfeffff14b1f9a3c15c817cd26807b21ee86421e7539adb8c91351e71af7e11b454bbf331a2323516d3e11a03310f492e878637ab4ec589a75161b2420b9a819a44b0ff0a889523d1810d4a2df0a2d79f12943293d238b1678a16f0e78cad59049fee60611d1d63f8bcbc58647000000b012308581c5e96d0fef892a642f757265fd56db634abe5e196bf7ca4c7a2f712dcfbb048924d52fdfc2520b7b96c3b26cf37488b4685f20051765329d60a63c224320516238f778494dc900bee10f965bbd0c4e93023c12264af459d56c3d4ccfdbddc8084d7280da42a05569176d6ae10245e740ad63d61c0f30658f750c855df9b0082ed4c17b322a770a4f6eccd1de06ec5ef67b3076aa56ea442184806a34459a8bc2be0504e84d9fb0208c37da8d000000b00c2d97aff1ea4706a95c1594fda2672728e56aa10a4d4239e2a136f8e9690bcb2fe412868e4041de303042dfbe8502123a9f617b8de1ce384fbc88e9d069db91c38c78ae17805d1506a3c79136c5fda599d862f69fb92b8a87245fdf5578f91930762b68c8fd35ace5b7105357d689a613909be07810818e27ef34451fdad499fb86864679bb925b37bde376ade66d3b176045792ad082261c3113319a1e2124770b51379610e756c382d3c95f7db3710000021c000000b013f8b85894b6f325c24462669db38ac4349cdde52ca65eefeeea67f67b17d6386264e1a908e24f964094a1aa11c433af10a505f6618ff2128c06e49a60e248988b0cb2e2db9d6ba12411a2ee17ba133edad347377f91ebcd6fb237b00bc77f8135a2443c700fc05f39b2d57515f311e30089f046395c384c89ea0444bd60a45e00670fbede8ca64428b8da3aeaae093c182830a9ecb595556646a39237fbf601ec8e95a16cac81f9a57c21780949b63e000000b01fee83f9dbd5dfada59b2be89a5eaf231cfff662fd03437bac5de3ec39858c1fa4e9f06421baf58aac072b4e402647200b4ae9d00bf4e63d8e7268fef4d468443f38bcc2380dd9e9db8a7f038f2c4582f434ac04ffa05395eab78fbc5c71b9d492d5ba1d3257d211064ff0e902d7f28c1c96d4869e20f25155b6ad0f107c47df9a4eca7f41a3c1c9b4ec970832eb0db2012da753465918ac5e9ea58f275a1ff2fc598c4a23c6b1b3532e7ff0c1d62bf5000000b004ded3a838713f0e8e409cb36a1ed212d78af940371698a1d549516331bdb223d7784a76f635b2ed8f612a9d218d06ff48f147aace89a3cffc09de795f9a94e181af3603cee4b840b52fe47e42786a1633a9ba0268a34812956c5aac05c3e7a173e48b7b8d307613f34f9b61aafea6f300e306c7c1a965e0b5da5609123c729dabd605c3f7a428538f28ab6c13bd2f740b973b80fa25df98af8ef7dd9281474ea5cbedda9fce0dd048d55fb3fc8a125c0000021c000000b02a382e3faa75354e0990f53735303fff0fff8d473264bd49611dba22cb9f6e5602d1a6e2bbdaf21290f7b88823fb0060adf6adad04a270f234847574f478fdc2f7b343dc92bc88db805de668eee4f0e1f15124c73873438bada196f3aa038cf9811342597f94ed6cb383e33b7dc5727019cafae8a42619a55781422fd575dbe57871e3a466d6c7607ca04ccb94a42ddf1babc1188881bca24f9c6d7a0ca9e6316a265513662380aa33cb1f9014754cf2000000b019d20bc59862b5d3f8345ac39cbf62a35409f0f3eabf22475bd6d0c9439621b51e91a4242153d0d559e0faf67b779c098198059eedfa2d64e9ec1869fafd558281fcdf00c54cfe34b27f6c8acc7eb4e8a8e59f352f7243e7b9c60d078c1f87c063bf05d0b87972702d2566307c7d0617029ea0c8949cedb67d68ecc10c6c1b56c8746c93b588a5a6780a36996e580d1b16de2e1d69765ccaadc6992c03a93f233c90697850f598260d7a4f176ffac541000000b01094282f79ae2e7ed88164b272f6150530a4a308b68e53ee8ef9f4d9f3e04a243acb97fc3d3a159884c710b4948e24f091e46322420b196d692f74c4473b7c311dc4fe84a4377cb31f6ecf520526858f7f0051120b733e25bf99338f7eb20def5e913d5f25499a2d47e4970a3b8ec90a0b0c36e4c41858956adb6745eaac52748c1f75eea54a5364b2fbbd1073f2e7c316b0e6b604c1d9af649daec739b6c6d76166385e77e8a120e3b9f8c12f559e610000021c000000b01f4307cd36186985f43cd0add0241fe46c9d93562f5fcf54f97f79fa0a02d7ed819bd5c155a0404df3da5f86cecdf4e59d1cdf2558779242f1c19e258d59ad1a9a1e365faca7b04589288af306af4df3a6c09330a4e2838dfbf044450703638c22f9902345f41422e112a7911b818ce122e1017f4321443a101e92136e726db28b4db8e75565c81de66348fe6d8298d723531f07fb1abf31d6f4dcb013b02304dda48de9b0061699dee0df3a8f074001000000b012eac6f80b87b5c5f3724381e73b80f874e72177d420cfead3d33adac08727b4e9239ffb80a823ed80edebe9e157cd374f0d015f847876f5eaa0c6466992dff97321cbcf6aad774b821d2b0258bdee72e341a9338c475aeb91e9fa3f67df9540b836168b33b091627d640df206e5f41c230c00fe6d3ac862f4c9e623b54d686d419da9f779e57fd103a8b372f51a661611af81d38a2916f9f1bec54fe6d8ca0adf8462dc6cba8f84f24bf369efa34d64000000b01aeac4b8d4ba876103631e646c9873d6d182948b3b31167e1bc268c8ee74737d76071605b740148022b3820d90b2a8efbe5274a030f7b41ca69dcbfefd5a828e5f35c68a65e151d0a8e07accbc3547daed22af761c255fa02dc603981feeb2e6213552e9e228b0b1705f7dc9a3e9c122032fc1bc349f544ee98e6d139ffdfb70d2c66d7b0750382a78ff88a6c60a40e50e2d332582a755cf21d3dda4addd490bdc8bcfa7308ce85b48e5c5b7ad69e76c0000021c000000b02bf963394f85c28bdd76836479c99f92c27ac155cf3ab4c248770cc360efd98d08f86b72bc86c81871001d26668a951949be44fa8544f7b10fd055f8edbbd7a8c598315c44e2b96d899fdb1641d93e0416ca01bb4b8b7697b764e1d35c852bf965490649259028823e58634d343fc65e2083530aacaab61992e02584e02b0077eb023c1cbce42a77ca97a2129321d94d11b7bea230e33b150e6690e5ef1706de5a9989a1190a81d11aad30375b85ed35000000b0177ada0c8b190beba1e0bc62a031cd0107feb2e34ccfc49388e76220f596bd27d2b29f9a22c2107844c4e16d7ab166b7dab9c99884fef0a0cd6ed5989e9081c134b001592d25723bc6d9e81fe7839d17481e163609aa469097e02f231932b0a422f26fc793741df941d2f1bddc3242b81c416c273f29e9a4acbbb81ca024f538bda509b4111a548e911ed71f7ded8e1102895a9d6399e66c2bdedb72f75af9c8cf901cadd5dee6374c6d225580253763000000b019366afdfd0ce9517227581e88b9cd8a7bc88859b12ed78882caf7ab2fc3d8af4931a93cae3ccaead97afc0a240c3c682d1cca17b57ece889d4bc6fa79c27620dcacfa58c9fd9d7f94a93c6e08b063e19554aed21740f1c19c042de06c93b7aec05283fcfd97c63a40ce1ec07755351f16c54c4ef11b8871c71d502da16ff1eaef0d61c44266796110a16aa428d8e1402ea3da379293b65e7a1d348d3d94644ee7b2c6bae584a987997d9a4b53a5326400000f8500000128000000551f6db9f65c171250e8f690a8841021c83c9702072f4c33454adb5fb162b9b52dfb1e1f6a0000002d1ee46089993771b94c6bb4a885917c219c6e2af43783cff4e748f82fc10f17afc4c1c3a4460c93c99010daf440000000cb2b13d1f7c1825c8ba1cd2efd275d7fd38c85744e39149f9393805837385b27b2db56fbb7000000a3cd0c725b70b25cf2d56b807dcf1846fdd1ce1debff8a83b57798ef1ee740c75702061eedb22311f0bce3163a0b562a40eeb1e596791b5181fcf2f97aa24d88672170df80a7293348701944dfff08d30707c71819aa6bffbd74723494801fbb16e2c3648f844f9a7ca67dc76fb0da7dbed94ca0efaffec874f679299ff94449f5be8dbf68a1688b06e603d88c5f2f68d712ccd8fb672b124713d11505570da469241a4c0000019d0000011320d4c50bb418b15ca96ceb236a9ed4de0ca6c9aa6e224cc7a91bac47d1d01a3ae4d7ea53000000eb5860631dd8b58348e9e762cfb0ab036db758b16f9e5d21ce10c9d0c0c70bd8fdcd7fd1158c748c478dc265a1850a028ce87709ec79d7f4e106f2c09555e80058975b98ac22b4c9c796c78ab11443989ffef57bad64137bec9448b4975cac6cbc415d5cb10774825e28f2388de1db98274b3516819cebd5b5b6a5be68c66b6c0595d3786a1be569778ec6af9c49abfb5d6f10f1871a56a4e80701cb0595a4805e388640d2076c31c2bacc81d4ea122707527ae4074b0d8f5c7fd3f6cc647cd26026a4ef987fcab5303aa1c6d0370861c5ed25877e4e48c50c6134fb76a288693771d638ef4d5ae20f8c6b60000000823017986e8bd6a9f012e6f85a54f5dcf1fb3a22fcc84b38acd741de89b72580d1df9990cb0000005a6fcc9f27dbee1e80be176f6352cda8c4923a86bfeb03f9e95ef93f528bb9aa914691d229906685507a6aa49849dd892ed7c7cf73d3207d24021c5c30f573b7414c6124f7ea6b28c17ee9f795dda3119d924db92ca16599d98ddf000001a4000000ca0ca88f409dc142b9cc53db5c65ee5018a6d4484c4de55dd9c04bf5ab7e383c4e70eb4aa9000000a2a68cd949a2a30e78c003856315fa5ab9876888cbe8c38d1c17462d8c957bda71b488767b3dc179def494e57aa26f28f0a4d65d1e89800f076f481b0e22e604b1e27749e9bda0011740918138722b0522766d91142cf1543b4b1d0bbaa433e57acf70c825f36d97f3c374ef5b85f2f2ff2df65ce6ace9b12050e098fa33d01074458384c9bdee3e60802935c86c54a47b4f44f3bd3118c6c5b7af9a431a79a18ad931000000d2109269a2ae1b5277311a8b96524333813e933ed341521c84de360687b41c231994e4693a000000aaea3cf03182aa20fe230bd2d55743b46b7ee5aadc6131f56c798345018da7d084565f1188cd9bf0d19e9ea67537e684963b334e0107cc4dc20323eb29bde7d3e04dab09ad27720d2caf0a52307e63e3e8f790ac09a2b5b65aa9c7d46af14a4af5769603f121cddfa2099c8e031e46856ee8957f70d5d3ab6dbf22bcf05c67d691cdd3abc4ccc415dbffee289b96b87653bc32df7c395a52c46d7105f6c1e546f39524f4a746056d7f8905000001450000008208ad37d138be898db5ef75ee8352c5f6ee7c71a8577580c2f6dcb971ed401505aabcd4300000005a954f503ffb7ba3ba3654c152aa7bf4835f78b03e2d17f442295833af2e26880c612867763564e44862c39298bd899981a47baa28adba18533e5bdad7289544e576226423a3596c241522b02cebf495aeabe9baa94cc8f7ab0357000000bb22eef01398b277bc47571f92ac0cb1943bcb6af18edcb38ec5b3f5e6f5caf0cfa2ca4c2b0000009368c96ccbcbe8ff5aed58a50a66e33ebc7a17fbbdf31f5fed48ca64f7b2b83f0c3a100ac1ceeeb4501ed33f87680e84d1ea416d5c890a66d3ba9d2dd2dcb306871fcc3e4e8cf51cc0ab148eceeef371fa85351b78904ff69c13c67bd1d77aa799dfe6765f77c5c8676ce6df769b128456864272d26bd7b2aa0dbf8aaa9617d30901716a7080950477c0f6a2468db15b5b14ee9100000189000000b4033783a124a82fd5a00873b81610c24ce2e74938cf5be86c2f727e96347225a7af5e06fb0000008cea7616b70382e7b91d004788645bccf0e75a404c705f5c1b361ccd296228786679fb9f556d9b31eaec516dbbb7ec725d85b7f1ca7444b59d1141237a53d3424f3511828dd4653a73392ed47d8720b9eaa8acf407d675059a09628ce55eba574b21daf1f356adf69b919b9c70083440a63822a3ddf74b32fc2010d37169d1a61672d4a3024ffe13d188423821000000cd08d2ad638392c811a4f0e43ab0d2f10c5ff4611da8c3dc3fadc2247ef6f8ecd973ffef26000000a5d3d28680089bb077c20283f2a04f7be1d3e9d34e04d4ca76b0903754b795977e46e441159cfe2fc5e816dcec5619653855e519e943fe2cdb4c70836ff5f7aa019a3447273640ca893b5764b657b17de52fb9cab88371c5c26e7a0894cbb6202f13af63fdae58f50b42ea7f6156ac68c96a62af465508b9eda16116a5d1df4e64b0ad5f5f74323ac64329906232c1226756fba15a0512b621d48104ef00a9b8609861465a640000015d0000007d0806d81bc873238993590d4f575cb41746dc614456d5b3b734f07f4935802599d94bdd7c00000055009faf44cc2f0eb83f6cdc635b16b1b1a8720ff8520083221c0a42141238bdca8c66782a35b3f8a07ff7e1e630572a643df654527e5e3e0d850e0bd95fb2be5df67e9f8d98aa92f20673969a5ffddedabcd8c0d34c000000d83020b5338b9626643a4e9789f95dc8f73a7567c96c317121ee3939ca2a621e75a8fa6a73000000b020f17cf4ed28658879b0ac99eec28e89d02f25af40732f24c19d497a2950beb25400c81d23f506e12cc0909d4b477ee4bed70e5283cbe3655e8a781fec18d46b06cb3b12e85a8b428756803898ef81cefe042bff57517b6f3a16b484578be851c919e3f76e00e750c926ba574b7b5ebd1d49cf295b1334b9e20297dffed97771e102f53fb06dab97b5f09eed6450e3d292a412bcaa9b9c7702e5cace743d2b2c6577b08a2c282f874e604b5f63f7e557000001b4000000f90715d7b2c6a4ee955382e109df3b6933c00a811dc35f89ef7c05c30131e526ed74f0b238000000d1c681d7bd1ac50f6e8e401952ebce5e20324e41a77d3df607dcbd80eb540a3ffcb8b7957a3c2af4eaf7b2970742863eece0d42753e41f3bfbcd5c83461c49be5f09c087fa9c849360d9bd91dc3c23e5f62664b2a9410f2d23b9fafc83a7c6f21bf0e8feda81bf59416172abe70a6ba920fa2cbd1a3c055b93836dad8dbe21f61eaa963c77b7d53355035a7887500795e0b53b93e9ae83244d2a6a9a0f9af26ffbcee90464e58fdb7d22a3ba696be8b9ff315b343222864a2082d4d4c1363172410682368d4f9ae2ccf580d770b7c206c6d2000000b322b76bde23cc57bffe5881022835874bbd8d5cf2d53f667109521ccd66affc063a8e25740000008bffb7a050889e7f91d9cc5528d649d8edf28fbfe2632bff093c8a829e0eb059e10117118f9a1d4d031d614e27acd3fcf56dc194849768f09247dd6860c0ced2fd307332b98ff5a50d44e331e3cb6e2af71590b1567626dfb3130b90a31720289a909a1610e21c46100a58d75707611abe0779e0edff7d75ed9c08f555306e9068751540ffa94ac5c7985f580000015b000000c72255d9927e4f125726e4f952d55cb435b963fb1d119275dab2e22cf5e660f99a2b771d580000009f8cf667d4d8aba57b0da33eb040653fac7bfe17f10d572e61ef29084a82ac3308044a8bd03ed0e6bb3b9bb2e331a6af57e1b24668e206ce0b5d6fd73714620b8fe3a6d36e9074b437b2460bfeadf58f839bac8b1842f18985aa610bdddba767e87436466a0174e631b8bd97c6ad1bb5fca20e1537d7d65bd19e89a19fe1c133d8b3b46e49dbdf231f057593e254b3685729db851c4f37e8aaa0899c6ed0808e0000008c1e3ae982ce832a3c9b8bd36351b8eed474e7de767ef8f0867320af56bbace737867d998800000064b097d309a4ca1cb540a338216fe8880e7dc5d383ba604485bc73e0881fa16286c5397ff57a197d182ff96d25338a05626e0b9551c14d9381061209114462c43be74748f62d8834177059e28b1d4ae1d42a774d495a4ccac471a81b29d6016e4af3995589000001d80000010627d89d8e845c7ee10b0ea652a646acf5152c44c6edc275d6089827d65f04575ae102786f000000def78cf1d18a57ef66bd0a7deb405eb1ab5a5cc856e45623831558ac5b85a06fb3026d9090527bca9704909109757a068d6675dc9e55defbceb788eb799a5e8fa0e265d597e7f023c71bb5773a1683cd5c45040571469c3da055a48c31ae7cc16142963729d48627e4a52fe045da51b87761a2aaa1b5904744b0eb9d1b353c84fbed0921446787b0e6bff9392312cb02c626d160774adf115f42b6fa5d43bf1016885b5d50df8aff764e7950b879d35da316610b51567937b3c2063f04374038702f6189f94d2ac0c7f2507dd7139559b93921c8d79c8b25d95dcc65a08720000000ca25cf90dd9bdd31fed39ded91f03f5cdb9573676c4f5634de67362e072b31a2fde3d7bae9000000a2ce86213c3fc16a9287443ef4ab3e39df9e11ee7aa09d51d32b54184d491ecddc3c478731113fb1aec4749617803ee30c3cfad2f41cc6cf01225976db02678c21ef8911c73dbc37b6299ee63764381b5fd3ad7633911a72d28d165109a1a92a61e158e335bbbc975ad6b13bae3306d619a5660d074c121e0005e7b1a58ed13a5f4fd3638ac59fbaeba82234fcf57a65fe83ac8b2da270a1b047ea76dad4272c66adc9000000dd000000511a3da94aac371e7ad864eff5ef21ffba8e6f78ad8db8355fafee419ad8b098b16b4cbad3000000295c8ab05cecab5263a3af91df736429d46dd028b345c7d58e148360230c3ac4cd535c1e20cecd17ef9600000084302bcc304d6b9b7c045faca1f9813ae8623d890e3df5884b39fb05c3c21a7e3de2ef1b730000005cc0a6a9df4eb106f676a91d904247f93f513e13eee7a9a9e4404452b3aae0207fa22581444099f864db350fde8dffceb22f06b9a4736fe14c0b598fd63546ddb37b849a13d3e51b7d593ba460040fe67087ff78e3dd971599fb1397eb00000101000000912801055ccba867bdb0e274012464db6a8fcac777d3b92441d37eaf0981541ec8b53b305c00000069602ae73d1097718f78f455b49672d0613133e89994e5d4b9b173ca1d688268f9a90840d780c84f96e1c2e193186a78cafec29f8d45942d8f9a63935e9630bb503831fd6ef5403fb30b8550df05d920653f42a7d0c3edb296d7a03fe105e30c2c818f03afc4de53c45d0000006802973e750e273d9b4c4e06007cb0fa4178c5c184f1517c29ed4381314bbf363a6231a32500000040eb5232c8240c43ca427c298fff3a43bdfdbef14e2822a3edaf952bb846eb85454490834996d73fe685e54b6ca8bbcc6884e57c0a03de447fd04f86328247952500380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b029da61367a5736f47c3c75f46262e0c04da8f231b8afc579b16eff96c52d47e2cead7613bdb50605fe629974896fd2d26267a139cd3544eb27d0879fdea5d16548f847d9781c6557eb90b64124f6f909b91195c53e23b4132d243483ad3e9d0f6ae246cf199dea3c88cb11a0f31c017323b0ac536551862d9580a8a6d7b8efad435ecdb782f717f4b0dc7642236af8101a35bcb16d7391fe7662b4b6a210c8a8ab7ccc4a98f6f5e755bcbdea42cdda94000000b024f0d809e8ae3b6e5df9605b509ac55ef0c363eb6d34c4d21ada2098776cd01a9b41921cd9301a40785564662908aefbbdcd841ad903f725e0d6fd0827806a97e7d80daa0a13d71127d16f693f450085438339b5fc307511a7fe971f57edcc2befb8b9698e0027310eb3f094864bdb1c087c81a1b1aa34c46422cf3a6ec528bdb02f59b0814e19506e7397137262734d1f76f4ec27f3158e15603ef6ace05bd89aa4d12fcd5e12b087660d116220b7a1000000b001efb89566014842b9d81da2fcf56ea5f6f8b4a35bfbb3ea6cb80bf0376b0adf98a95088dca937b83ccf19fa080d45c9a3d1cdc4fc889125044f5ce33cc55b5a4d2c03b93c1bdd06bc0b086af01e60cee62ce831e940af4be4136bfb31a68e5216482c65bd0ab7bf5ca7b48838541f261a04428dfa8dfdeeaab52fe6d291cc7e025703082449032cb828fce23543a5f81a8b1dd4aacf8814c8a9ae0b507a55e37d70c8b0372e3b10b768fa9fbde375480000021c000000b0144e3f9f51f29cde4590548382e364d4200bf58f44bc1bd04b4bb3732e274a5832005a6e6a779780bea43aaef1af71d8886ea589f97de1b6af24c6e505688ae2325ab2bc195fc5a7b6b4ecf92522253db0c101f4cbf99e1b60aa59c5818f0e8e3fb7a3f67738c833f4b5694946cf9f67209dc037850fa8162fd0821fad82d251bb8961100847db23c9659155180e42cd0323c2f8960ecf6a472107a4fd962f9fc354ff7879126dd13ca82215e800541d000000b014c6512c8cfc0aa6e85f084f0dba1b1f5ac6b0cd812fbc25f73fdbc3efde66e005b9d5b70f8bba081363d190047d50d0cd1532e2a271673c202a5128523d21fcc833f8323220762a5629595160f7b4db81e33d4019cafc24f5899ae2e50c6c6991c2b5bb5f9c6ba67b8a1a71ed58033f2d04051e5cb15b516a97f3f8f68b0b5d96659729d3635da6e2973e60678e200708505cc0c09cb2634484e35fb8ae4170ec033c48a4013f08c0514dbfa48870c3000000b007db6eb75c0e688b86671eeb2974174fd3724352ac0c5f2552c72971b541bcd62590737acd56864958b43728206247c224aec1b773adbdee7e75ccbd314f65667ab732b263356c3c554cec3dafd1c6b3bf9dd75a8b55dbec50da553e16d58a178fbfa3b25aa82ebf9d2c17d9f9fb5b0118ca3cd021f3c29fc1576268c2f55a3dd15dddc5d0eccd3268da18c95101699b04dd878b42b227ea0e9dced0bee4f986c509f5be1fb5303ea732692bbd08a71c0000021c000000b0234054ad119ae088da2ee870ec8fa416402395feea2fe5ae53aa353c8655ed0d1e95133aa41d92ed05482c46c3d24513f9347bd43d9cb63f509d0e3211209c6fb80776a9e665b480ac13361296ceb6c832fe3fb5504ad45e4eb938073908cea01db37033674fdb27b0f4d60ce1d6ae1915054265685468195daaf38eeab445472686c1504ea7f1579f48e64f37ef1339300682d042e339c955e1045855f480f35423aa5e9bf6f325199f22eb027a7740000000b0269b87be2c41a727be5a6b95199935450a23d51c811211a2a62ca8aec8e077f654ed369a33f9e69427c0726f0c239b91c102131b3b920a5c5fe446604e289f332ce6b3ca277e7ac2e1ae5e9e022d73c4a3b8e841c3fc851ae2c943ffaa959619f048c4f2b8bc3e4b267b35d2955add231c50272dcc8973cdd8ca41ed1beab019bbc67dad04223779702d5d14183296220f2eafa12d3dcb83a471d37d127086315ade911d30a8795714a59b9132606a99000000b01ffe6ea8d935be29e72ad3268a23a1ac5149599356705a4113d665816803816ffcf929a17c54937ee929e3d29877ac4a6700b7189e8b3939b5fef94095d3880cad34a03ac39e74f621a6e55b2450ac177505fa02515a87fe6aa291de00379cde088c57e1facabc3d32c246b10480fc891e8f2a7661a7908351b981ee7d19f06a6f67ebff86801049ba83f9bae6dcd7e42b61c4ec782c3e8a44490640710fea21d8d45bf62a1decc56fe64390510598f80000021c000000b027e84e499b709fe5027ff3e71524b49bc19344599eb9ed1365c8e7f57ea3c38a7aa2760f3e279b463422fbeb2b7e4a7c5eb46afbe3987daa14272aa41bea558128d08d4c7f34e9a93bec834987a71e99a19c9de6df6ee78f7902e21e837caec43753f7d8d529a4861d67aaf0ffb2fa641a2e800ef8f7c698d370c87a984b5f69993ab7b5568224751434d98f0d2897cb2798decf0bfb5d5589c6623a2fa7dade02c0b9abe1a7f28f7cd6320dc2d1060c000000b01ad1bac75e95128a08cb5d3e7e1fe0d6c08bc01e602aaaba1d28cbc5212cb170fc07d0313e7f4bbde3356eaac87311046b3995bafdc67c25f6c7c928eb64dedda42e743dc29391da97ad8701b303060d9ac8fa49da81203dc7004e9c2e8510815c1a4838dade1a42ea61fcc05fb5b1ae2df31c6fe0f16278fc009ca914141989074774dbe8d5b75432b04c8029db69091fc1ac09e483c79c25c535a9b61ca5ded7906a8878aa749db60c0a8b1249fd3b000000b0136f209f5564f4e283d45564e32e5158a874ae97f3173246b5b2d39df2700b24c41466a18a5a039c9ef5336863a76f9b7f2f6038c88b73b633583d721eb427d61ed2641d3cb462cc44376f135b4b45dc7827a57597ef6c7e8864b15642009ca45f2f58af54504f1570e841980965461a2809e65d34915b66a4ba9743c3a24d50f77190508a70be71adb1221af56de37f0cb1efbf6d6bcaed18e9747da6a31bea2580ebb985a12c9e12fa97951f2886850000021c000000b00ed8dabfa26dd1fd4dba20c6793ae42d63d43b3b5f896ddddff9c93f3c405145cdb9fa4053696363c0f06e1be62f9799bf66a73019c4add128c5ecf0471eb99371a5d4c44001e2d2a112e11361cf61d32d44ca98407256a9dedc460963e7af65148a91d68c0ae3524fd4720dbb02f018163d22be92fd81366661f949289bb5ac2ec033b445bc62454b3ffbfdf94d80282593585b9d30f6c2c8029c366ae34ddefa65ac3ac1824f0929d9cbf41495a4e4000000b02befb78102822ff1a0338a290e0c563cd17a63fcc627d470c5e718828e7e138e591fe547fa0caa16fdca47f913c9c2be0a5a74dbeab87ec6f7c91e0273a0059070c7af5f497a220428fe8f159c5677f270b15062a6166c8631c489b6d7b47555204e7e5a913380473e4ed37a890e45d12c2d955f20bd7c08f0ea060c47f77d212052445d01dd45477d0411bfe34b4a1c0be48dc56b673404a1d9dc2bcbbfe434f69993c2d759cb9c41276322b388b2a0000000b0108c2ca7f3f632447879c1d87d1230f2ca1453768c90b7ca3720c27cce8ce430a212c869a9d5c6e86583bdecabb6ff9e925edd6ba06c0b283249b889981408b7a895d73929ade4c1323f6b37ebcef3a38edf3eabe563ca9410ab7b8c639b42397d2c5fb9482badfec1e1437a8fc1e16c0b271143b4683d15acea6d945590b256d22b45dd828e3b291af8281afae7ae152c7d20decd42594f26fc7efc8105d7b25c7b997b44bc687ef9a5434fb8b5654c0000021c000000b01a24a367710bf00cb8d352696595b1d44816609da1f606e2bbe6fbce1e8b5ce96ad9277acd6fb202c11052ddfc70d4bb5412f2cb8df61908b2bbd3e6128b2c5b861c7b616d8db8dde2d2b6e490f5c6ef65673e432eac454a8fc1819c9888c5774ce087772cafae1ef607dd325be1d10f0943f20bceecb60b686a76ade2ea5e97301688914def54769d48d9ae12988042036018835e63eb95918be4bbae0f210333cb0fe78be044ee8797f42494ff3809000000b02d964c915d78bca220aa47ccf5f040ac6903f315a405b7595770d1387ee44bddd211ed03b8fb5345db5de53a35d1c51f6feccad6e38acd2eb5902667f9b70679c7ef049bd864076c022eb6033fa555156373bc9e5199ba9fee4b9af9e079aa35f417c0787fe62dfe3bf7f2887dd6e50f1da0a4e71137ce7dea51fae5f02888779dc6caadb1e268aec4cd3056f723d0471cab1e54d6335c15819dc67e995d2324bf6606b61c7b4d5b6656f1a3cb8319ce000000b02e61cf9ca39f00e42b0eba8ca65c56250c6ef8a7ffe8faec2e9940177c48afaecb1366e46df6cd4bab64ab049bd9f4ea5b0e0ebe9db7f3b9143d3fbea7bc4d9ed533c56d789dad4c6452ddf524c7f7313239f1acd7027afeb7a7fbc5dbe729e777e80b294460d26d6b437a1d370d4c7007f8b50665d945c491cdc63ddc9c140524a4394520e49477908b12167f248610045308cb53f122ad28f718e887e1e64be5f8462f148003f445e134e06daef7f00000021c000000b02ae5e80b86337eb23a091b1542add8799e5669cbe71347f9e5f1ca44c68db24c34eda1d7882d6222994a8d4b5df8fb78006e7099861d66b37d5af97ba2947af46a51c4fb03f6192fb5252c18dbf15d68ca0a7d19b0e7abb19ce864f240d063dc34361259aceac01eb5dcb75a7bc6888a1f65c1bf6bc63a2ec6b991fe6fa6da59b6af53ab097403c7209908c8bdf4cdce11775caf1f7f21b312111c35d7ae663589d81bd88dc04d6db5a857e350cb1d04000000b00ae3acbfd84b7ee1d0f384d52da2007422ea4b7e0dfef7bca4614c6cccfc218e2dbbeae8be85b17ba6b79481d3a2f8b598ddb9e8a2d67609f3055b1953d256db9c7c6e6fbe0008ab006c90431e9d323538d318ff296ece7fc0bd4a8b47ac3d7e55512cb2fbb6a2ae6bae8bb7b208801c2949c7c6ccd1d9411f7c824b718acca0dd4ec12a8d2c625301538b3ef2725f8d2eca717ec832936e7ac7e523c33c817125b144a823e3c38780248dca3fea0a27000000b02a6b124e55cedd05d119af78d4bbbf130863b941adfbdc16963eea39293df707c57f6eb14644c40a6990a26c59e60966d474c6a6326ee46a213f1ba47f83690ea3203bb3f994b7851364d2a4b7a26773f930c1af5f3fc8559983bfeaf26e09fe0fafe279512d429947906d634660eae3298b8001fd47c076af3b0652669fe19c83c2efd5a346de2a7eb38014f61b6a213005f306f95214a30aac397c3bcd4f0aac384c6ff9a4e29a63c72a61dcfe79b50000021c000000b027d5477e59c8df1b0e4155cbf4e1370fffc4b2ae63ee0e09d08333f7e19e21fdcd41a03fcbbf777b8d0d9035a22a71fa21e86b4f829af710032cc253b38ba341fefa2e30ea17296b9f44237629be7518f7991b06a562038db11bfa362c24c5e4471d02fcae8fe837470dad850f25b05c09a2bf6227a4ff82a29784867dc88fe4588abb5d67ae6cb7a3d44068185134ee1d4c2dddb6e48146a8d33c1d2a5368aa8337bcf4e951dc8628bfbcd9d7bb0cf3000000b0061bfc4dc70a85091dc28b43b693163a6282fbd82a9c1f872f43c6ecdd816d41ac025471f9709bf750c5693a0d7b54a043b42ae5a90b1801391694165075bab3c289af237088ac3cb7a0a37f348c25a5b924f60868da7d0c3f5e5d40793335f8a720445a7f94f6049fbfd1df97d906131260ce682f151e29f400dd14463991163cae08e3abb05012935b70659d265cd91f4661618f645bf5d3c6ef611e03666f773cb3d8e3aa192d5c147df98a82fffd000000b02174ae48b3b861f2fb074ebc8db243d247feaad1f19624e99ef326895147229d0d0ce505e960f8112ffc04418455533db251d51f9695fae93650046accb7538cd61a4539d7ce485899ffddb8cdcf298f5f9475760bc068e270dec9f33a764da795dd76ffb053d39cea28e7753bc81a042e42e35310ade8bca3ae9fa5b178ad0419c96e6614149afd07c47dbd056f9ea62fe66b60cfc160b4685a0799bddabe276ca1d92dd0ef09f12ca3634564dace280000114e00000206000001022166534198038e812b91b4c5811520d32088f7d279beb098e408897512b3d24d3f4a12c0000000da1c811e378ffedb9e3aa6e0b6acbbd723c7ce1343dbee6b41342f73bbb66ff0602e146e223065603b5f319e0e6a9647311d54060b4018632d2d6b7326e3e63a9ede39eaa209ae605dcadf1bf732a36c44a26937ec1a04a105c28fc96f83fe34b69a5f1a06ef3aaddb0bb4504acdcf6378985ef0b42330e6616f24e90a514e341f6ad59165f43d855f603710fd10611249beffb7ca28197b3ec0f495f512df67281aa012e28a889c83a57b09047a114351477b57d91c147aff266fd5a214210d823e8ff1cd93ce7ccb2fe60cb4aa4511f3642bd062c7251622fbce000000fc14db1e744b5ae7b8c0071bbefe80aa361a2e6be9eae505a0ef787308d7e7000a41372eee000000d4e4aba298bc5a8a3a08a66bedf90926b8701ec34116a66938818bf5365cd011f22463ca51c1f4ba5520bdbdd337a6dcb09b4c1087b9eea55546906c6bbdb086baa2a9cc3864a5c92705889e813c73f73370582199753da4a9af4fc84f793ab4568742158ebd37996525f42be24e5c733bd22b7ded3f8a33797d9d7002eaa23b60f252c403b911983861587116c9e081ea46d9e1cf77a5773f1576b9bfcaa7f294ff503c14f83d2f954353e3bf91c634ddcc4e90d3f817ffd060a808aae7bcb603702ea84147b60d575783c850d316352e998d7136000001860000011313cf26a3399d2a011ba5cadb8e6fabf2dc9ebe4792bfb719f443038efa9416ea95171ae0000000eb8bfd47f58d2a355c8b64de8942be75bb8caa93515e92f12e354da947f19aec9f784072bffb8804fdebac9be4f362b235a84518e9d86d9507084d7b27ca50d3751b2e252b5469a05e943515a056f26712fc2bf3f6ae68a2e3acac8ff69a4d968e8790a0f8afc991cb39a07c1e57a9e62b1e1bd025cc4ec31da8fd6fd46aae41bd29a953189811c2e6c6e5a7efa14d3a39793e572dbd7a0969d16fc059bb139faf206e0572b64edc5f6b139fe3535aadcb909400bff9eea1bb72d97601a3d6b52be0c19a16b99afd7a0e3ac08d1bd9c173aab9b186cd46128d4cf1e40b738595a6e414a2d8154beecb2fbb360000006b0bb674df96e68b1f997aa78178efe9626f875a068643ae6f24f23bfc6fd467069b0aaa3e0000004381e842040c3ac299d44fe44d75e8044ce84e712dd60a4c2027ae769e84a757158b5671595f45b29b5fe24a7174fdef3bf0ec09275bfedd5259ad4e55e78c38ceca337c0000015c0000008b1d2c267d1af4d541a6eb5fee87f6356b4d28a12d7abf9d30adf55958114ad1bd3590357600000063b02bbc92d70481b0d2bf035cdedae00e2917ce0c38a6f58aaa12b1c489a0cbaff26514a7d74e4535b3b1c708585f1b4ecbd327c3282afd775976a26e7198322e5015b156f1c8609a4e1e0dd48a11c245a7fa31dff1729c69fb00a075ebec36861b594c000000c92de9cac555a06430405822eee23e31227770b50faae9459bb8b2c41e727bd342e93397cb000000a14ccc19030133341c2e9ae532101b3d45b4ab9ad7522a85062799ac1553d20547d613c55e0811dc7c40baf58238a9fb9fc38cdbbf98428cbb8202533e5050ba6cadbfacb6015dae922be9453741ba077e3a0b5616e548104adc3eedff4b1039fc719186cbcab49b31dd815205f9379075e692726f1428e45c5cc48bff6f0179cbe884dfab39584a72b34c2addf6a836560baee31ee06c352cca4ef2eb70e030f6520000017d000000722df0c4bf69ac25b6de3e2c02bd8adedff4aa40656ee32a341da13d3730d0ca8ba38a4d150000004a333af1958d9741c61dac1675a6791cae9f2ecd2c27a9fdf8f7f37c0bdf1ab418966201ec841acd4c49d25aa25062fd215f54c66d48424dd2ca58c569c17b2cb8c5ce16149da8b36f5429000001030c2ca3efa7e07703f5ab0088e5130d008f4bce8155b03360569e3a6bc29cc63d330f17d8000000db9a2b3e23ec943cc0163a0e035a291f9f0aa31e483af8d488eb640b66afbfa3a9f6bedcfd64e461eb76f56c2c580dbaf23538970add420068d012d6b4b95b5c7f42c0d5e828ce81dadb5b2fec60f0339f9f0a67436b8de37839b26f3063306ed3b244e98ac82bccbc95b713a3a7a9a6848bad8b149dcfe69032f585973a6a9fb170580178ec792b05a1f76145159532c3a7a1b1f3dfff980e859b9ddf69d73224e739d4cc04f3e6f885aa58b52a31bf75bfb482625d4b64dd3218a3327874e5e227fa8cc7d16f66d141f045efe74c401d77a10649349447338ad18e000001a80000009629eb223cf6ed817aa8f2720e64179dbd03bee892eed1dcc2612cd26f85a3ddb3b22093670000006e73391d7f754b209b7d603fa7928f05e505a536c62aeb99290b7fff680c375b83019e7f236f1a54dd44dd0f86d0c81355ef1d69b192fd208f99920e1af3bc34651a98b7371665f95333bdcb3e7f8612e5f17ee0a8e8455b95cf13c25fd1110275e947d77fc8d2d76932aaedf310da0000010a1dd295b039a7cb6042d69d3a1bcb33eb2944a17590f8e9a7440d2e4978ba1b6a0a535f75000000e2b3175439cef42a79b23193649a1b2ac31602f327b676842b7f717f32c5ebb7dc6ab9512bf339691e6d2fb7a072e6763f89e0a9017130278100ece04cea93f694028942eff97d80dabc8bb1da9e449b879c3e70803d3bc5f8b0946d36277ebb116e731dde933a852a9aca92f58beac77b84af243ac22b4580b13912b925efd9942d3e2b90f024d3901f8c81dc0c79637ec9c21ef997bde9804e0d0f671f7f27245a1f058513cd430d6e66fda102568a69f75360afbf6bbb720e607f6e4a3414f45109b1490bcdb9e2bef92b7ac0aec216249c7a837147c0df7f10f16af4cb82315dfb00000188000000fc2bfcad9251501ea2a27349528e81d4de5db3eb5819d26f6dd997936c31870008f51b50e0000000d4b1ce1cbed91442145d210d9e04e1271822085064f0511dd0a06b65363de42d00a78b4be7372dc8cde6670e8d10bc5180149eff83095aaa2dd164d194244d476f7623d3ef9d8d5431b0958939ef9d22615bb16409197d762252b0c92e0bb5c3578b91e959837a90b76ee81195951edbc74279b63fc808f0c3c4be679de8e8cb2d66e1a16195449cf052c1cc238ed3646302855bbc4411f29f9555c35c1e24130a3154416ace5b02fa6c03753afef00408cdbe1b3c02233e71d672ee06277fcd02460fe351693f68ba9aed945d7bbef4589d08f967000000842ad0d1c689bffa958d7593cc4d48878192ea935745abbffcd4aeef89dc80e84fb48906fd0000005cdd00a166d9ca6db94b025637a2ea8102f2db04b1e7ecd1a6c35af0d3ac0e260d5e259217b766e85e65ff5fb2ba50b6d50bd7ff2be0abaa39c65149c7df1066c70d3c5c6d6e6dab5c8a872da32b188a84a20ca043b0d53a4901cae460000001c00000011a0fd247974937545f27c25c6eba750c9db9d5323b358ead8891a091fdb7402d1e9d5d386f000000f2c23795cde3c49937a74e21a1b9cdcf64343757b38b3682fe6ae2f6e1cc624afeb27f2eca784125c5c25224b09f8a0c89b5061fb7c011e0d1aba1ad4ba6e977424cd00ef4445a2d84651e95b90cf14399f16aa3a52674e7129689494317d19100215b93a82a55565b07064f155f43eb93a1cc6d5116501fc77a4ca2066596058e339d92276781826d095fd7b2a15dd8e1717bec856b5d5d6e3369d5bff908955ddc909f3791d4d03fe09cb01c66e2530569c0eca9af1fc433a7cc9ab0415c0006af4891c9ee2393a989b4461ffc1c5914207993e5be9aeeb5227659dd73141660f931f4bcbb1dd9c3315a35efea6d9137f7990000009e1e29a8099658f0c92e67c52fb8e447fb0d8fd97b8370eee97d5ef17f32931f8a246f6a3700000076401899084da14109e011714333c1dd3497c85dd5cd8bec3726456282b12d15b3ffb3afd0a96db606d534f2275de86b919412907d2a592cd80dba134097f0764130c7a790aabc23d6c1509be6f5b82ae3e2642a80df11d35dbf6e7bf339b7b96c290bf3cedf72ca7d296128312134655c582926d7b84c000001450000004d137757466ddec9e9b0f0d60b8da77c6f509bf8eb5dfcfeb5b92a9c35cad821b19f10fda600000025381a9bf5351ce3a8a28ddd37adebe8eeb2c3a3685aaee006020acf3ee928e76f69784d5fd9000000f01b5c745955f4c87a38406d175f07e58fb76ba97431af304bd65cf988533282810f68ad7f000000c804bebfa785b036f5d6d893c1e6b77891f34eb9cf69a9ef4bd2c298561b09b2c388d64ef967e308d4e53939192873578da05ae3bd1d5a1bccd6ef96e3433a65273356b9d958099dc3ae1d59508e8fd6186394a1f2a386e0c0efd1c0a5683f61cc35f6567ba39853c3082255c5924f3635a50cf759c7f5f3c0184753bc20a2f1862a301dfba780f64b35abeceed817f1590bf89c601b48b693af9f36ba9b99c7fb9dc268b727eaddffb293d9a578c1dfe2b13699b7edd097f3412d4baa2456a6c5e11032ecbf70fb9e000000ff000000680d360870153247d054b37f16e975315eacd3206f40b8e54dea0937ff7944e6062dd48393000000408e0958f0c285f912da7afea99f48442730b2e2a557a678eb5c7ecd64039e457c0d469240952b334c8e99fe89c7f33c6a0fdf08ee925e772af3b80c08c25e10e60000008f06c8cd3a5db1a9d304c16f662b863228e2aa09cf609b4ff98a161171c8b501c74a18f5970000006710ac9463e8b0dc14d97d4dbca1ff47c3af5a3b0ac1713a75a9f1c51d6af7e01781528328ec83e70a61aaede32ce967ff98ea51cd7e1fef21923e323db527aa280f1abe625c6a1fc7c22d06521ae7156b4e7c1182fee014e6e1a51692d4f7a6fa50c5b1ff1a604200000200000000d319c8de78a28fe0a2313ce5f7464deda38c9f331cd1dda981b95eaabaa654a75931e91c86000000ab71da85aa1a931281e67b51e5e4b63a6c1095f79ad3709dfc6480a51f83e300137baf0e7bd0473d2b641c8de7174805e624c969b69a3e8c82b959cd6af3352f50e247b93a7e055549cc82abdbec414681eef96cc725a2ac0971edb748132b42a0c7f0b0f85755a8259a6942a7cc124f98e3bad96577a2347d61c4f535de5a20b6ca78be5e33391fc618c1af102b41e0932858e84a5136b3a44b56bd5b804058653800ab7d800649bcef88cf00000125175dbb6f28b506b9a6294d068dc7f8ddb7d04639c48e1318a4ae01935e5a05c6c433e159000000fd0eb4f924b5bb852746b99301bfb28862c44e275bd7f15987403ddf513e17fe83aa26f2ec0f42aff4931fe66e432214049aafe243d6f3f3865e350c522b959b3f4ea432a9c269eae9be461c1ecd859fbc521f402e15be36c0ff9771100865d1752fe072d0860854d566281a9eaf271adff36298158b5da72fc355669e37791ba05b469be66b753753f4853066c58a2a179385147d67fe10fe47735bd6cb4a4f99f6191033090a0bd9088f9f1c404988e09151e2d373a74ce60a51fb74411a403d4bb5b1350891565bc3a11d8fa62f65c2fc8cdbceadacd10a45ea63e308945a06303a9771d7775eab61e6a5e992fafa611137905a2c887f444c4517fc1d00000189000000931342857d03df6c8b60e4f33e4f53daf8aeb8d175a5a3a83be4a4b4d14bbb96fcf59697db0000006b48a5948409bdb2fc8a93c2921abe1fbb3222fba8f200a4b187068469d96216e1297790a123d4cd1a078e18f484460a44487142b7d580119dbc55dde4d4717c867dc84363c5399e30630f5e67f268ffe9e0be6ba2311cfb35d44a8275a5a7c61eec53f75084921bcb9e5834000000ee0e4d78b42133731a781f6fc2bbdce2852125bdba50f9fad6c05325002b866ecf11bdbef0000000c66a0c8ffb4db34bb5062bc2d576f551e6d292c6375c2e58410f2941919e6f4ab6ad3db7cca2c58b9e56a0441bff6e8829e3f571e88667812d591a4a9c8489a2888a51b37dc56dfb4b2113a98444cdc801b1e227761dd680a59a3d1585ef0d913993d72b38de131a766dfb8b91394f7bd63bd1bb598d6824834ab319a12cf10eb1e418446de5f6cf29e11ab03a7d43eb79ac9cf9ce747b702de966c87914ea7647b9c0d83597ef0af37c2338dadabaa64c0c3ef1e342290c96cbf77a0417c2fbd77a844bf66d69", + "txsEffectsHash": "0x00435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb981", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e" + "txsEffectsHash": "0x00435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb981" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711479823, + "timestamp": 1711538313, "version": 1, - "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", - "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" + "coinbase": "0x419f369eb60187f6f2c319ee70c886d95ef96899", + "feeRecipient": "0x0a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2" + "root": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2000000020000000000000000000000000000000000000000000000000000000000000002000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c0f9316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", - "publicInputsHash": "0x00018e2cd561c8620160c32f8c374be37078e6d3bffe8747c305c9f3568a7ce0" + "header": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc00000002000000000000000000000000000000000000000000000000000000000000000200435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb98100212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066040089419f369eb60187f6f2c319ee70c886d95ef968990a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744", + "publicInputsHash": "0x005108b1cea12bcef5782815e444ca9507b2f7afee3b84816f0828b434dd5dec" } } \ No newline at end of file diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 78579281714..5ed0d1dc216 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -12,9 +12,8 @@ use transforms::{ }, }; -use noirc_frontend::{ - hir::def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}, - macros_api::{CrateId, FileId, HirContext, MacroError, MacroProcessor, SortedModule, Span}, +use noirc_frontend::macros_api::{ + CrateId, FileId, HirContext, MacroError, MacroProcessor, SortedModule, Span, }; use utils::{ @@ -36,16 +35,6 @@ impl MacroProcessor for AztecMacro { transform(ast, crate_id, file_id, context) } - fn process_collected_defs( - &self, - crate_id: &CrateId, - context: &mut HirContext, - collected_trait_impls: &[UnresolvedTraitImpl], - collected_functions: &mut [UnresolvedFunctions], - ) -> Result<(), (MacroError, FileId)> { - transform_collected_defs(crate_id, context, collected_trait_impls, collected_functions) - } - fn process_typed_ast( &self, crate_id: &CrateId, @@ -183,19 +172,6 @@ fn transform_module(module: &mut SortedModule) -> Result Ok(has_transformed_module) } -fn transform_collected_defs( - crate_id: &CrateId, - context: &mut HirContext, - _collected_trait_impls: &[UnresolvedTraitImpl], - collected_functions: &mut [UnresolvedFunctions], -) -> Result<(), (MacroError, FileId)> { - if has_aztec_dependency(crate_id, context) { - inject_compute_note_hash_and_nullifier(crate_id, context, collected_functions) - } else { - Ok(()) - } -} - // // Transform Hir Nodes for Aztec // @@ -205,6 +181,11 @@ fn transform_hir( crate_id: &CrateId, context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { - transform_events(crate_id, context)?; - assign_storage_slots(crate_id, context) + if has_aztec_dependency(crate_id, context) { + transform_events(crate_id, context)?; + inject_compute_note_hash_and_nullifier(crate_id, context)?; + assign_storage_slots(crate_id, context) + } else { + Ok(()) + } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index ed077fbfd35..efca2953dea 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -1,48 +1,43 @@ use noirc_errors::{Location, Span}; use noirc_frontend::{ graph::CrateId, - hir::{ - def_collector::dc_crate::UnresolvedFunctions, - def_map::{LocalModuleId, ModuleId}, - }, - macros_api::{FileId, HirContext, MacroError}, - node_interner::FuncId, - parse_program, FunctionReturnType, ItemVisibility, NoirFunction, UnresolvedTypeData, + macros_api::{FileId, HirContext}, + parse_program, FunctionReturnType, NoirFunction, Type, UnresolvedTypeData, }; -use crate::utils::hir_utils::{fetch_note_names, get_contract_module_data}; +use crate::utils::{ + errors::AztecMacroError, + hir_utils::{collect_crate_functions, fetch_notes, get_contract_module_data, inject_fn}, +}; // Check if "compute_note_hash_and_nullifier(AztecAddress,Field,Field,Field,[Field; N]) -> [Field; 4]" is defined fn check_for_compute_note_hash_and_nullifier_definition( - functions_data: &[(LocalModuleId, FuncId, NoirFunction)], - module_id: LocalModuleId, + crate_id: &CrateId, + context: &HirContext, ) -> bool { - functions_data.iter().filter(|func_data| func_data.0 == module_id).any(|func_data| { - func_data.2.def.name.0.contents == "compute_note_hash_and_nullifier" - && func_data.2.def.parameters.len() == 5 - && match &func_data.2.def.parameters[0].typ.typ { - UnresolvedTypeData::Named(path, _, _) => path.segments.last().unwrap().0.contents == "AztecAddress", - _ => false, - } - && func_data.2.def.parameters[1].typ.typ == UnresolvedTypeData::FieldElement - && func_data.2.def.parameters[2].typ.typ == UnresolvedTypeData::FieldElement - && func_data.2.def.parameters[3].typ.typ == UnresolvedTypeData::FieldElement - // checks if the 5th parameter is an array and the Box in - // Array(Option, Box) contains only fields - && match &func_data.2.def.parameters[4].typ.typ { - UnresolvedTypeData::Array(_, inner_type) => { - matches!(inner_type.typ, UnresolvedTypeData::FieldElement) - }, - _ => false, - } + collect_crate_functions(crate_id, context).iter().any(|funct_id| { + let func_data = context.def_interner.function_meta(funct_id); + let func_name = context.def_interner.function_name(funct_id); + func_name == "compute_note_hash_and_nullifier" + && func_data.parameters.len() == 5 + && func_data.parameters.0.first().is_some_and(| (_, typ, _) | match typ { + Type::Struct(struct_typ, _) => struct_typ.borrow().name.0.contents == "AztecAddress", + _ => false + }) + && func_data.parameters.0.get(1).is_some_and(|(_, typ, _)| typ.is_field()) + && func_data.parameters.0.get(2).is_some_and(|(_, typ, _)| typ.is_field()) + && func_data.parameters.0.get(3).is_some_and(|(_, typ, _)| typ.is_field()) + // checks if the 5th parameter is an array and contains only fields + && func_data.parameters.0.get(4).is_some_and(|(_, typ, _)| match typ { + Type::Array(_, inner_type) => inner_type.to_owned().is_field(), + _ => false + }) // We check the return type the same way as we did the 5th parameter - && match &func_data.2.def.return_type { + && match &func_data.return_type { FunctionReturnType::Default(_) => false, FunctionReturnType::Ty(unresolved_type) => { match &unresolved_type.typ { - UnresolvedTypeData::Array(_, inner_type) => { - matches!(inner_type.typ, UnresolvedTypeData::FieldElement) - }, + UnresolvedTypeData::Array(_, inner_type) => matches!(inner_type.typ, UnresolvedTypeData::FieldElement), _ => false, } } @@ -53,25 +48,20 @@ fn check_for_compute_note_hash_and_nullifier_definition( pub fn inject_compute_note_hash_and_nullifier( crate_id: &CrateId, context: &mut HirContext, - collected_functions: &mut [UnresolvedFunctions], -) -> Result<(), (MacroError, FileId)> { +) -> Result<(), (AztecMacroError, FileId)> { if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an // escape hatch for this mechanism. // TODO(#4647): improve this diagnosis and error messaging. - if collected_functions.iter().any(|coll_funcs_data| { - check_for_compute_note_hash_and_nullifier_definition( - &coll_funcs_data.functions, - module_id, - ) - }) { + if check_for_compute_note_hash_and_nullifier_definition(crate_id, context) { return Ok(()); } // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the // contract might use. These are the types that implement the NoteInterface trait, which provides the // get_note_type_id function. - let note_types = fetch_note_names(context, crate_id); + let mut note_types = + fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. let func = generate_compute_note_hash_and_nullifier(¬e_types); @@ -85,28 +75,7 @@ pub fn inject_compute_note_hash_and_nullifier( // These are the same things the ModCollector does when collecting functions: we push the function to the // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list // on collected but unresolved functions. - - let func_id = context.def_interner.push_empty_fn(); - context.def_interner.push_function( - func_id, - &func.def, - ModuleId { krate: *crate_id, local_id: module_id }, - location, - ); - - context.def_map_mut(crate_id).unwrap() - .modules_mut()[module_id.0] - .declare_function( - func.name_ident().clone(), ItemVisibility::Public, func_id - ).expect( - "Failed to declare the autogenerated compute_note_hash_and_nullifier function, likely due to a duplicate definition. See https://github.com/AztecProtocol/aztec-packages/issues/4647." - ); - - collected_functions - .iter_mut() - .find(|fns| fns.file_id == file_id) - .expect("ICE: no functions found in contract file") - .push_fn(module_id, func_id, func.clone()); + inject_fn(crate_id, context, func, location, module_id, file_id); } Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index bb941a2dc7a..8d9660cb533 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -395,33 +395,35 @@ pub fn assign_storage_slots( let storage_layout_field = storage_layout.fields.iter().find(|field| field.0 .0.contents == *field_name); - let storage_layout_slot_expr = if let Some((_, expr_id)) = storage_layout_field { - let expr = context.def_interner.expression(expr_id); - if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr { - storage_layout_field_storable_expr.fields.iter().find_map( - |(field, expr_id)| { - if field.0.contents == "slot" { - Some(*expr_id) - } else { - None - } - }, - ) + let storage_layout_slot_expr_id = + if let Some((_, expr_id)) = storage_layout_field { + let expr = context.def_interner.expression(expr_id); + if let HirExpression::Constructor(storage_layout_field_storable_expr) = expr + { + storage_layout_field_storable_expr.fields.iter().find_map( + |(field, expr_id)| { + if field.0.contents == "slot" { + Some(*expr_id) + } else { + None + } + }, + ) + } else { + None + } } else { None } - } else { - None - } - .ok_or(( - AztecMacroError::CouldNotAssignStorageSlots { - secondary_message: Some(format!( - "Storage layout field ({}) not found or has an incorrect type", - field_name - )), - }, - file_id, - ))?; + .ok_or(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some(format!( + "Storage layout field ({}) not found or has an incorrect type", + field_name + )), + }, + file_id, + ))?; let new_storage_slot = if current_storage_slot == 0 { u128::from(storage_slot) @@ -437,14 +439,14 @@ pub fn assign_storage_slots( *expr = HirExpression::Literal(HirLiteral::Integer( FieldElement::from(new_storage_slot), false, - )); + )) }); - context.def_interner.update_expression(storage_layout_slot_expr, |expr| { + context.def_interner.update_expression(storage_layout_slot_expr_id, |expr| { *expr = HirExpression::Literal(HirLiteral::Integer( FieldElement::from(new_storage_slot), false, - )); + )) }); storage_slot += type_serialized_len; diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index f5a2837fe1f..93d556fa638 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -1,10 +1,15 @@ use iter_extended::vecmap; +use noirc_errors::Location; use noirc_frontend::{ graph::CrateId, - hir::def_map::LocalModuleId, + hir::{ + def_map::{LocalModuleId, ModuleId}, + resolution::{path_resolver::StandardPathResolver, resolver::Resolver}, + type_check::type_check_func, + }, macros_api::{FileId, HirContext, ModuleDefId, StructId}, - node_interner::TraitId, - Signedness, Type, + node_interner::{FuncId, TraitId}, + ItemVisibility, NoirFunction, Shared, Signedness, StructType, Type, }; use super::ast_utils::is_custom_attribute; @@ -27,6 +32,24 @@ pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec Vec { + context + .def_map(crate_id) + .expect("ICE: Missing crate in def_map") + .modules() + .iter() + .flat_map(|(_, module)| { + module.value_definitions().filter_map(|id| { + if let Some(func_id) = id.as_function() { + Some(func_id) + } else { + None + } + }) + }) + .collect() +} + pub fn collect_traits(context: &HirContext) -> Vec { let crates = context.crates(); crates @@ -71,15 +94,15 @@ pub fn signature_of_type(typ: &Type) -> String { } } -// Fetches the name of all structs that implement trait_name, both in the current crate and all of its dependencies. -pub fn fetch_note_names(context: &mut HirContext, crate_id: &CrateId) -> Vec { +// Fetches the name of all structs tagged as #[aztec(note)] in a given crate +pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec> { collect_crate_structs(crate_id, context) .iter() .filter_map(|&struct_id| { let r#struct = context.def_interner.get_struct(struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { - Some(r#struct.borrow().name.0.contents.clone()) + Some(r#struct) } else { None } @@ -87,6 +110,11 @@ pub fn fetch_note_names(context: &mut HirContext, crate_id: &CrateId) -> Vec Vec> { + context.crates().flat_map(|crate_id| fetch_crate_notes(context, &crate_id)).collect() +} + pub fn get_contract_module_data( context: &mut HirContext, crate_id: &CrateId, @@ -108,3 +136,44 @@ pub fn get_contract_module_data( Some(contract_module_file_ids[0]) } + +pub fn inject_fn( + crate_id: &CrateId, + context: &mut HirContext, + func: NoirFunction, + location: Location, + module_id: LocalModuleId, + file_id: FileId, +) { + let func_id = context.def_interner.push_empty_fn(); + context.def_interner.push_function( + func_id, + &func.def, + ModuleId { krate: *crate_id, local_id: module_id }, + location, + ); + + context.def_map_mut(crate_id).unwrap().modules_mut()[module_id.0] + .declare_function(func.name_ident().clone(), ItemVisibility::Public, func_id) + .expect( + format!( + "Failed to declare autogenerated {} function, likely due to a duplicate definition", + func.name() + ) + .as_str(), + ); + + let def_maps = &mut context.def_maps; + + let path_resolver = + StandardPathResolver::new(ModuleId { local_id: module_id, krate: *crate_id }); + + let resolver = Resolver::new(&mut context.def_interner, &path_resolver, def_maps, file_id); + + let (hir_func, meta, _) = resolver.resolve_function(func, func_id); + + context.def_interner.push_fn_meta(meta, func_id); + context.def_interner.update_fn(func_id, hir_func); + + type_check_func(&mut context.def_interner, func_id); +} diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs index 0c53bff4a54..39aa6c85a76 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_collector/dc_crate.rs @@ -253,20 +253,6 @@ impl DefCollector { // Add the current crate to the collection of DefMaps context.def_maps.insert(crate_id, def_collector.def_map); - // TODO(#4653): generalize this function - for macro_processor in macro_processors { - macro_processor - .process_collected_defs( - &crate_id, - context, - &def_collector.collected_traits_impls, - &mut def_collector.collected_functions, - ) - .unwrap_or_else(|(macro_err, file_id)| { - errors.push((macro_err.into(), file_id)); - }); - } - inject_prelude(crate_id, context, crate_root, &mut def_collector.collected_imports); for submodule in submodules { inject_prelude( diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index 00bcb0cdebf..727a6596df1 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -26,7 +26,7 @@ pub type ParsedFiles = HashMap)>; pub struct Context<'file_manager, 'parsed_files> { pub def_interner: NodeInterner, pub crate_graph: CrateGraph, - pub(crate) def_maps: BTreeMap, + pub def_maps: BTreeMap, // In the WASM context, we take ownership of the file manager, // which is why this needs to be a Cow. In all use-cases, the file manager // is read-only however, once it has been passed to the Context. diff --git a/noir/noir-repo/compiler/noirc_frontend/src/lib.rs b/noir/noir-repo/compiler/noirc_frontend/src/lib.rs index 6ce6f4325e4..93d7960faf5 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/lib.rs @@ -45,7 +45,6 @@ pub mod macros_api { pub use noirc_errors::Span; pub use crate::graph::CrateId; - use crate::hir::def_collector::dc_crate::{UnresolvedFunctions, UnresolvedTraitImpl}; pub use crate::hir::def_collector::errors::MacroError; pub use crate::hir_def::expr::{HirExpression, HirLiteral}; pub use crate::hir_def::stmt::HirStatement; @@ -76,15 +75,6 @@ pub mod macros_api { context: &HirContext, ) -> Result; - // TODO(#4653): generalize this function - fn process_collected_defs( - &self, - _crate_id: &CrateId, - _context: &mut HirContext, - _collected_trait_impls: &[UnresolvedTraitImpl], - _collected_functions: &mut [UnresolvedFunctions], - ) -> Result<(), (MacroError, FileId)>; - /// Function to manipulate the AST after type checking has been completed. /// The AST after type checking has been done is called the HIR. fn process_typed_ast( diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index c8a7638c420..9834aa5f14d 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x2bc6a0e23550be996b215a1f0ac0dfd2d995849ca55c331278b727da280f18fa"`, + `"0x2f91a19f99a562e99f0f2d5504cf640ab73aa4971f8e5116c6fe3ccbb7914e62"`, ); }); }); diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index cea5f18f602..cb0ceafdced 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x00f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b>, + "txsEffectsHash": Buffer<0x008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x0000000000000000000000000000000000000000000000000000000066031ca7", + "timestamp": "0x000000000000000000000000000000000000000000000000000000006604011a", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb2>, + "root": Fr<0x1cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x1fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f24>, + "root": Fr<0x2648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e061>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33>, + "root": Fr<0x262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x13bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf890>, + "value": Fr<0x0f8dcf6d14365a378dd589c92ab8eec9758bc35ee43bffa2938e4c89c0c0f255>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x00ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa>, + "encryptedLogsHash": Fr<0x00e48b07fb4a516e8d49de15fb773bebc5dfd1a2b15cd0660ed873f986ba587a>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x1318b641187d9678f7db0e5b911c7ecb2291b75367c7fdee2b5a711694520765>, + "value": Fr<0x1123f591d0696bfcad186d783b617b44b72d81c99c91bc2b0a64d699639366af>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e>, + "value": Fr<0x0ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce05974>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x0ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8>, + "value": Fr<0x20562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x16736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4>, + "value": Fr<0x29725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 3558ceae438..08419f26979 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -15883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c4401000538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e7500000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c440100000000000000000000000000000000000000000000000000000000000000000015883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f780000000000000000000000000000000000000000af9f8c440000000000010538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1893a5f8a6edeaf9943a155114589b07f3d1d09e4d089edcfa07b969650eb9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fb6a4cb910fd2e9e4717e12e84abc2eab723b09bdd8fc8e7219fb97a395d8c00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0890abc78b8fa90c35f41934c751512ec2c2e1519e76c3b5e18efa0fc4b6d09176e094b458e5dbc261fddc9905fe0889f55c02b4655e8e3a91ecba3220eeb9ac74300000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +26269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c88af9f8c44010018d002f1270bd69fd0e3a71f9a28f1af98f37436199dc798dc937b152f572b5b00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000126269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c88af9f8c440100000000000000000000000000000000000000000000000000000000000000000026269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c880000000000000000000000000000000000000000af9f8c4400000000000118d002f1270bd69fd0e3a71f9a28f1af98f37436199dc798dc937b152f572b5b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028a3036475eb6e24127f3201380d9fa0ab1e766c43366322ebc0225b581684e0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000126269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004004a9e302a704ed59c22bbb8c1d3167f125cc278f31b171cc5adc948368070c000e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2dfbe2854c9bbbb5b3aa4056976697f5a48ac83cfb019ad91bd51f05988f94e722664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0890b964b33e04b49b13b7dc77659ae081cdb2fce7efb7bb6313ef5349434595a9c11bc91940eaf4479221a33412e50c0a79b794ae47c69de54e85ee050f0b4635700000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 41902d20920..e57fe0d66f0 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013b848b11a4339ef7a9395d66884f023bec1ad17c4792cfd07f422d2ef782b65034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001b83fe6f75fc7f54a7d29536f19195a777376fdbc959bed02604e2e262d979ab28272000404f8f47b27ca59c0d66f0e3046b3f079fc68ab395a7bc3eda35890e232e291a67a197a0b581d8716d53d79916851a44a10678ddb260212b49c4a4da045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d00906bca10100034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d000000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1e08c7474ec54e620c1374d3c26a9aeeeb7c52a058ffab74c6f94ed3df566683268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed11ddaf04805a6f068018feca53bbb9a7328e0e09b9fc7d48e6e5f7599e033dba00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dcf6d14365a378dd589c92ab8eec9758bc35ee43bffa2938e4c89c0c0f255000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb8540559ba31b9773451d62d45c14b097f80e29eb64161c1a05d4e4e7dc8ff11274ee664322721303e953ae2c580578d2fa50f9a1e1d831da4493204c25f90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c000000030000000000000000000000000000000000000000000000000000000000000001008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e06100000180262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006604011a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000177a85c4dc6dc9c76064717223743f4cdae42b86d63c30ca0d622eb8bec2c8371509f6ad3b84fee47d09209961229d6f46974cb859fb8082758aae44d8943d8b0ffbb472d0d553b7271b99470f66fd287caa19b085aa87a7f8dd909a7b7f688228a6d2a3039f54f9220131e0a6802062bb654a61523d2212c7b47500860802b20906bca1010011274ee664322721303e953ae2c580578d2fa50f9a1e1d831da4493204c25f9028a6d2a3039f54f9220131e0a6802062bb654a61523d2212c7b47500860802b200000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c000000030000000000000000000000000000000000000000000000000000000000000001008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e06100000180262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006604011a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0c92d90afc2a3f432f4ea45df87a4820bdf067b32bbe9faabf8f0bf557c85d9f268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed172f33f8cca31a0426d8a1b48e5f633705ea37c52a6272433bd3c13bb98609ed00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index ae8febef822..2010ad41a31 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd6000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000bf724e301974fdb4daaf99f85827638eae14a49b6c46a4a92ef060e265c1fac0783775f73852526669906702803e076d9e985652a7da3d7a9411153a7ce30c829f443365e401807d255a40272ae1694d8452cbd43f2c7df690019f2203ea8821febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026b73c377d9c8a2c7f1b1947fec75a6e1efb872bcd85df2436380625b4f533ce000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce059740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48b07fb4a516e8d49de15fb773bebc5dfd1a2b15cd0660ed873f986ba587a006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000022c3d685254f5fa2c359c276469a9ee3ef91c13bbb6728070d9d2987b4f7faa08a05b514adfd9b887e868b4eedbbd68f7304e272fc563e62bf413bb1a836ab81e15761542cad4e18b04a0ef5b50e730ef61de1f6b4c88007011b0f330766d6a26b73c377d9c8a2c7f1b1947fec75a6e1efb872bcd85df2436380625b4f533ce0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce059740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From 1e238d827a6f894af536276590e344ccfd350635 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 27 Mar 2024 11:49:19 +0000 Subject: [PATCH 024/123] used in e2e, clippy --- .../compute_note_hash_and_nullifier.rs | 2 +- .../aztec_macros/src/utils/hir_utils.rs | 17 +++---------- .../end-to-end/src/e2e_2_pxes.test.ts | 12 ++++++--- .../src/e2e_blacklist_token_contract.test.ts | 6 ++--- .../end-to-end/src/e2e_cheat_codes.test.ts | 12 +++++---- .../src/e2e_crowdfunding_and_claim.test.ts | 11 +++++--- .../src/e2e_escrow_contract.test.ts | 11 +++----- yarn-project/end-to-end/src/e2e_fees.test.ts | 7 ++---- .../src/e2e_lending_contract.test.ts | 7 ++---- .../e2e_multiple_accounts_1_enc_key.test.ts | 7 ++---- .../src/e2e_non_contract_account.test.ts | 6 ++--- .../end-to-end/src/e2e_note_getter.test.ts | 2 +- .../end-to-end/src/e2e_persistence.test.ts | 14 ++++++----- .../src/e2e_sandbox_example.test.ts | 16 +++++++----- .../src/guides/dapp_testing.test.ts | 25 ++++++------------- .../writing_an_account_contract.test.ts | 12 ++++++--- .../end-to-end/src/sample-dapp/contracts.mjs | 2 +- .../src/shared/cross_chain_test_harness.ts | 6 ++--- 18 files changed, 80 insertions(+), 95 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index efca2953dea..134342b07d7 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -60,7 +60,7 @@ pub fn inject_compute_note_hash_and_nullifier( // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the // contract might use. These are the types that implement the NoteInterface trait, which provides the // get_note_type_id function. - let mut note_types = + let note_types = fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 93d556fa638..0535643186a 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -38,15 +38,7 @@ pub fn collect_crate_functions(crate_id: &CrateId, context: &HirContext) -> Vec< .expect("ICE: Missing crate in def_map") .modules() .iter() - .flat_map(|(_, module)| { - module.value_definitions().filter_map(|id| { - if let Some(func_id) = id.as_function() { - Some(func_id) - } else { - None - } - }) - }) + .flat_map(|(_, module)| module.value_definitions().filter_map(|id| id.as_function())) .collect() } @@ -155,13 +147,12 @@ pub fn inject_fn( context.def_map_mut(crate_id).unwrap().modules_mut()[module_id.0] .declare_function(func.name_ident().clone(), ItemVisibility::Public, func_id) - .expect( - format!( + .unwrap_or_else(|_| { + panic!( "Failed to declare autogenerated {} function, likely due to a duplicate definition", func.name() ) - .as_str(), - ); + }); let def_maps = &mut context.def_maps; diff --git a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts index 80f970483b1..d59ec866cba 100644 --- a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts +++ b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts @@ -106,11 +106,15 @@ describe('e2e_2_pxes', () => { const receipt = await contract.methods.mint_private(balance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(balance), secretHash]); - const extendedNote = new ExtendedNote(note, recipient, contract.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + recipient, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await contract.methods.redeem_shield(recipient, balance, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts index bd5bcb70637..84388cc0496 100644 --- a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts @@ -87,15 +87,13 @@ describe('e2e_blacklist_token_contract', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(4); // The storage slot of `pending_shields` is 4. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenBlacklistContract.storage.pending_shields.slot, + TokenBlacklistContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts index 20c7761db90..4687a0dca22 100644 --- a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts +++ b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts @@ -215,21 +215,23 @@ describe('e2e_cheat_codes', () => { // docs:start:pxe_add_note const note = new Note([new Fr(mintAmount), secretHash]); - const pendingShieldStorageSlot = new Fr(5n); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const extendedNote = new ExtendedNote( note, admin.address, token.address, - pendingShieldStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); // docs:end:pxe_add_note // check if note was added to pending shield: - const notes = await cc.aztec.loadPrivate(admin.address, token.address, pendingShieldStorageSlot); + const notes = await cc.aztec.loadPrivate( + admin.address, + token.address, + TokenContract.storage.pending_shields.slot, + ); const values = notes.map(note => note.items[0]); const balance = values.reduce((sum, current) => sum + current.toBigInt(), 0n); expect(balance).toEqual(mintAmount); diff --git a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts index eaa666f525c..fa6cb40e2f3 100644 --- a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts +++ b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts @@ -64,10 +64,15 @@ describe('e2e_crowdfunding_and_claim', () => { txHash: TxHash, address: AztecAddress, ) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), address, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); }; diff --git a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts index 047e57674e4..7ed7cd92a31 100644 --- a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts @@ -21,9 +21,6 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { setup } from './fixtures/utils.js'; describe('e2e_escrow_contract', () => { - const pendingShieldsStorageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - let pxe: PXE; let wallet: AccountWallet; let recipientWallet: AccountWallet; @@ -76,8 +73,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -127,8 +124,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_fees.test.ts b/yarn-project/end-to-end/src/e2e_fees.test.ts index b03a1d67052..777115e380b 100644 --- a/yarn-project/end-to-end/src/e2e_fees.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees.test.ts @@ -671,16 +671,13 @@ describe('e2e_fees', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, e2eContext.accounts[accountIndex].address, bananaCoin.address, - storageSlot, - noteTypeId, + BananaCoin.storage.pending_shields.slot, + BananaCoin.notes.TransparentNote.id, txHash, ); await e2eContext.wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index b349bfb39c3..4225bc63b5a 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -103,17 +103,14 @@ describe('e2e_lending_contract', () => { const b = asset.methods.mint_private(mintAmount, secretHash).send(); await Promise.all([a, b].map(tx => tx.wait())); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const txHash = await b.getTxHash(); const extendedNote = new ExtendedNote( note, accounts[0].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index b4d911dfb02..f5f2a146fdf 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -63,16 +63,13 @@ describe('e2e_multiple_accounts_1_enc_key', () => { const receipt = await token.methods.mint_private(initialBalance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialBalance), secretHash]); const extendedNote = new ExtendedNote( note, accounts[0].address, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts index ef7e51ca910..f1d5e6ce1d2 100644 --- a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts +++ b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts @@ -71,15 +71,13 @@ describe('e2e_non_contract_account', () => { // Add the note const note = new Note([new Fr(value)]); - const storageSlot = new Fr(1); - const noteTypeId = new Fr(7010510110810078111116101n); // FieldNote const extendedNote = new ExtendedNote( note, wallet.getCompleteAddress().address, contract.address, - storageSlot, - noteTypeId, + TestContract.storage.example_constant.slot, + TestContract.notes.FieldNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_note_getter.test.ts b/yarn-project/end-to-end/src/e2e_note_getter.test.ts index 402b50f5b05..caa7f6f5750 100644 --- a/yarn-project/end-to-end/src/e2e_note_getter.test.ts +++ b/yarn-project/end-to-end/src/e2e_note_getter.test.ts @@ -159,7 +159,7 @@ describe('e2e_note_getter', () => { const VALUE = 5; // To prevent tests from interacting with one another, we'll have each use a different storage slot. - let storageSlot: number = 2; + let storageSlot = TestContract.storage.example_set.slot.toNumber(); beforeEach(() => { storageSlot += 1; diff --git a/yarn-project/end-to-end/src/e2e_persistence.test.ts b/yarn-project/end-to-end/src/e2e_persistence.test.ts index 52eb18a4fe2..caa827bd1d9 100644 --- a/yarn-project/end-to-end/src/e2e_persistence.test.ts +++ b/yarn-project/end-to-end/src/e2e_persistence.test.ts @@ -326,12 +326,14 @@ async function addPendingShieldNoteToPXE( secretHash: Fr, txHash: TxHash, ) { - // The storage slot of `pending_shields` is 5. - // TODO AlexG, this feels brittle - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), asset, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + asset, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); } diff --git a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts index a3c5867d403..0565f4205f4 100644 --- a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts +++ b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts @@ -76,12 +76,16 @@ describe('e2e_sandbox_example', () => { const receipt = await tokenContractAlice.methods.mint_private(initialSupply, aliceSecretHash).send().wait(); // Add the newly created "pending shield" note to PXE - const pendingShieldsStorageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialSupply), aliceSecretHash]); await pxe.addNote( - new ExtendedNote(note, alice, contract.address, pendingShieldsStorageSlot, noteTypeId, receipt.txHash), + new ExtendedNote( + note, + alice, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ), ); // Make the tokens spendable by redeeming them using the secret (converts the "pending shield note" created above @@ -153,8 +157,8 @@ describe('e2e_sandbox_example', () => { bobPendingShield, bob, contract.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, mintPrivateReceipt.txHash, ), ); diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 32910fade34..5e6de4b1bb5 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -50,16 +50,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -94,16 +91,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -159,16 +153,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(100n, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, ownerAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -177,8 +168,8 @@ describe('guides/dapp/testing', () => { // docs:start:calc-slot cheats = CheatCodes.create(ETHEREUM_HOST, pxe); - // The balances mapping is defined on storage slot 3 and is indexed by user address - ownerSlot = cheats.aztec.computeSlotInMap(3n, ownerAddress); + // The balances mapping is indexed by user address + ownerSlot = cheats.aztec.computeSlotInMap(TokenContract.storage.balances.slot, ownerAddress); // docs:end:calc-slot }, 90_000); diff --git a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts index 604f5edf920..b58e14dfdd0 100644 --- a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts +++ b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts @@ -73,11 +73,15 @@ describe('guides/writing_an_account_contract', () => { const mintAmount = 50n; const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); - const extendedNote = new ExtendedNote(note, address, token.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + address, + token.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await token.methods.redeem_shield({ address }, mintAmount, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/sample-dapp/contracts.mjs b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs index 06d62766d49..371d51d9cf4 100644 --- a/yarn-project/end-to-end/src/sample-dapp/contracts.mjs +++ b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs @@ -8,4 +8,4 @@ export async function getToken(client) { const addresses = JSON.parse(readFileSync('addresses.json')); return Contract.at(AztecAddress.fromString(addresses.token), loadContractArtifact(TokenContractJson), client); } -// docs:end:get-tokens +// docs:end:get-tokens \ No newline at end of file diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index 89f8778ae5f..ddb912f6539 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -423,15 +423,13 @@ export class CrossChainTestHarness { async addPendingShieldNoteToPXE(shieldAmount: bigint, secretHash: Fr, txHash: TxHash) { this.logger('Adding note to PXE'); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(shieldAmount), secretHash]); const extendedNote = new ExtendedNote( note, this.ownerAddress, this.l2Token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await this.pxeService.addNote(extendedNote); From 28ce5e61bdd61abddf6cf8950c5acc37aab8f541 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 27 Mar 2024 12:10:08 +0000 Subject: [PATCH 025/123] fixed snapshot --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 9834aa5f14d..b2b9213512f 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x2f91a19f99a562e99f0f2d5504cf640ab73aa4971f8e5116c6fe3ccbb7914e62"`, + `"0x009417f376afd94e88530cebf59ac66c028a7eee6fed699561eae1e0d136585d"`, ); }); }); From edba6f12f145405e580fad7204786ae8a6cdc26f Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 27 Mar 2024 12:40:20 +0000 Subject: [PATCH 026/123] prettier run --- yarn-project/end-to-end/src/sample-dapp/contracts.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/end-to-end/src/sample-dapp/contracts.mjs b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs index 371d51d9cf4..06d62766d49 100644 --- a/yarn-project/end-to-end/src/sample-dapp/contracts.mjs +++ b/yarn-project/end-to-end/src/sample-dapp/contracts.mjs @@ -8,4 +8,4 @@ export async function getToken(client) { const addresses = JSON.parse(readFileSync('addresses.json')); return Contract.at(AztecAddress.fromString(addresses.token), loadContractArtifact(TokenContractJson), client); } -// docs:end:get-tokens \ No newline at end of file +// docs:end:get-tokens From 99c5128f6b65f319e8d3fecb59de0f98ba58ca05 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 27 Mar 2024 15:13:14 +0000 Subject: [PATCH 027/123] yet another snapshot. fun --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index b2b9213512f..9834aa5f14d 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x009417f376afd94e88530cebf59ac66c028a7eee6fed699561eae1e0d136585d"`, + `"0x2f91a19f99a562e99f0f2d5504cf640ab73aa4971f8e5116c6fe3ccbb7914e62"`, ); }); }); From a75c8435e6817fa37364d59414671b37c50ad7c9 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 04:59:32 +0000 Subject: [PATCH 028/123] updated snapshots --- l1-contracts/test/fixtures/empty_block_0.json | 10 ++++----- l1-contracts/test/fixtures/empty_block_1.json | 14 ++++++------ l1-contracts/test/fixtures/mixed_block_0.json | 16 +++++++------- l1-contracts/test/fixtures/mixed_block_1.json | 20 ++++++++--------- .../src/__snapshots__/index.test.ts.snap | 22 +++++++++---------- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 8 files changed, 44 insertions(+), 44 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index bdbfa7ad18c..a9d3f6147f9 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7", + "archive": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", - "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" + "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", + "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", - "publicInputsHash": "0x00921c1673191eff961f7fbefc885d9f474d2e6c272c1932b93504ef32c7f84a" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", + "publicInputsHash": "0x002b3718c30855a31bde39a183e0e2fe51bf6de9784b88e35c31497d07dcd6a6" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 679c311f7bd..6a477202b91 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x10ec263cb860c7a7ea45eee0548d67ea370aadbd4da3b1a52d5b8869d919942a", + "archive": "0x1205c7cf2bb5c9844379718633439676fb40a25c1a6bc89a36af575447ac8d59", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711479928, + "timestamp": 1711947351, "version": 1, - "coinbase": "0x548f50153be0a98f5333e4d9bfabe34073adf7dc", - "feeRecipient": "0x09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d" + "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", + "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7" + "root": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x2ea309ad8e1beca471440840b52b62c995703d7961fdd95778c063eb9c6c94b7000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c78548f50153be0a98f5333e4d9bfabe34073adf7dc09431940c6f2aa57fbd87ea2d7df3b43413e325b7b1956475fbf2af630da115d", - "publicInputsHash": "0x0043c75b707b1077bcf67f74b67a7c2b43305209213888abcf8818d2f5ec1051" + "header": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e5780b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", + "publicInputsHash": "0x00c84265f5f882a389cbff59702265345727fecbdf116619286e372c79457de6" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 11424cf272d..7dfeaff9da6 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b012b05fc105ceea373bbe38874ae37a23b74144ddf183ab495bfa7de7c665fb0a8d522886137167eff9323bab8c13ad1726993679ffe512759050f0340853413785f2168c14cd538639638cfca8662b660dd80c53ce43c85b41d151b22ceeb3e3626f3942b66b72684cb05040f9cf331229e794e8d3e8bb5108813ee3086cb85bb10ead74baaec6bde977a2dbe8fdb2cc0c693ca52217b5c38cab5a7bd8feaa67d0670062c8263999b50bf9a767e7edb0000000b02c563cbe940ab44b660e984ff03bf89c0dd1b0d53425f5a75dcd477113b1d2ea42905f0a90d7b8770130e3dab454882e819f9ca0fba2a60044b7ecd46af40a07ad904e1e4a1a9519e6df261d63c7cb010714933b42811d32fbe407bd5be6ed2250d2b573656de96c0acf4eca5efddc24223da8ca7a16fcb9cae791c01b2980015bc07e21cdc593e413df3f0752c40fc30ea514188bd7247d4d625e5c49ac8dcb5bd22146db833bcd26aa2905e133c27b000000b02c79ff46e538780e307638f4082ab5c20856843d2430946aac49d3ee671e52db073f1e130925890de4f86bb115a240f407eb8e6cd2857613e2f11ee308aa78106f0138f1e055d5bf28e1ec2296bf792ab4b7618d74f14b37bf642e89e238f7508253706b03d0b8dece152e90762b38922dbc69806246efba3253f96e7485fe1482e37c066a16c80887764ce92833fde7039df530575f5d5a9ebbc2455100dbb6c3a1e7c78acb630a7e0d728f59f775660000021c000000b00aed9d482c19ba7c23229583522ac2f156a3f694589cd0644ba5e7fd718a4b43abe38d4caf9ae059fc525c71ace25b70990701b27cef566001a213e3c927cc315180622fb84f274958ae57bb1f0659d9da6b45431bb1200771b282cc87c17fe968ee89b3a1315ebd8e816f8e195bb014083aff6f16b1ba9ebcb287c31af5d194837e2f78686d01ab409b3ccd3e71e88302f65b42ea793f9816a941814f96722d6831a24958ab6fb8510dd640ba44bb2a000000b019035102a01205f3563e478ea50921ce528c27dfe985bfa0a2fb52f63b514bd85fd2d563d88d7a1829dcd4ab63627096878ae8698c0eed8e062be06873eedca5d05393cfa0a454d593825022e9271abaa08cb68c4f7c9533d3d5edd9cd5c41e994459ff88728f655d5707bb064415c5911ed2de0ec850682b175152e255aced3fb1cb1e0ec91abfd85ebee2865bd0f4f153ba96169f50c8768c5733bc64e8d87b7b52c1d15ad9a39f680151219ad9f74000000b02a4dc21c4cd26a43bc10ade7858d0925be1c729a88a604e7577402d23e07c6f1d2c77222760b6eeec66c86814777de9935fa30b4429dce72308d37da9ef653485dd2747fb06f0ead18b66f80fea0bcdd203b0bd931f8e48a0a9daa3556d9767a84440fbc8a1554d8dc86ff89e10e2649086c73183aeaca9ab1b2727a0ca14f6abc28cef7fe2aa81ec7abaa67e8d5f2d3274f72bcf1ad43e29223b5f785165e9689941dba5ebee800a7d546014ddc3f920000021c000000b01363923ffab065f062bfd9e316ebf71d855fafa043e6599ce1b53667965d6686566b2b640314bd10c559b24ff90c8b4bad4d3c67ccecfecd7800520541764a10f83a13167db2c21a2399e4336c81319cca041c0eac06b31ac84c8a36874d8a223c3f96e89b0691b0df317a8b4ff268db26078c53b085f0ae2c46c15753f1ddd96f26db55361c7b27d7770c78a6f60719253a2b18cf1fe4893845966050eea0c2dadc4542d4e121eef02476de1f02314a000000b03055e0822f598f6241c76dfcb7545786517c062a6d232cd2e63bf2d461cb6a5cea964332643c77f25e5b3f4e8dc29cd4beaea4d250d78a9a5a427d34a1f2919b4075ef7b7dc4caa403fecaac91f0d37dbf8d31a4c66eb8c4f32d2b9e1b32f5547f28821331ab72ca27e5e4a122960017275e03bf8f4d8fa61b415536d77465823d64b8adfde4fde49a7a6e2d35392d552b68232ec08ba643914075035182c5237dfe5ae2f187fb41661e016bc079a15c000000b00293304fe2c5312fc2eff48d9c7536da42f5e0cd8583c5704b26311fcaa7671dbde69d6772d96e50da454b84eb47ee61d1d66e2e4ba7a57b304d04280f54ff48ec5d752c6ef6b38f5c929da1aa96da0cdd53a63851cda5579b773869ea752a0e76dd40b0e0ec9b8a9e3f67111c8fbd411dfd4f7ccc704e91e6943ce46d2977110c5b593dffaf8578cb01d68b34f575521278220d444ab4353081877bf3cea7991dfc24d874693c0ae77fd59322b50d580000021c000000b02c8975b2a052f09fdb6a4d05806c16cf3c0b6b227e69cde9dddc6f6d8d2a1205049a994622fef693c10c44f447538debd4c75fda5b7098ff20c09f8193789f2a2b6cce0bbe1281a59b68e94bbec5194dfcc1119f82a130f1f7b710c0fd3dc7f31d821d9669d5b55236c06ab1fe7d469c07deebbd4c87f6f5dd30e67b9c2af51aa2e01cd1e87fd4285224b8643b8f6509019a4637ecd9acac317fffa9e3c42e837f843ca8f0c2c2092db93e1044287435000000b005d0462656bd9c7b205568702125cc2ef51d57aaf3cc76f8f2feed2dcaf745f2703d7632743a125d1e3e77170c2ee39c3a2037fa0270847aa83fc3d9ea5a5a15a5d065edd2b4c89475fbe063d323b3e2cb3cf5c824216630a270b24f51c35b0f9d79faca532acf27f7622d098d424d52036d6545421553f65d56c64440d4c923f7aa21e79b7a2188b9b1f991e78148242195faff89daad7f01f808d180d1e144b7f0dfaa68415f8b73bac59a7c82254e000000b01de4d306c7a987df44c6d8309839b205212521b18c8f3c42c03f0c11fa3669a70f8507ebb686920e5533b3fc3c771aa862f1be2d91315cfe3b9c85ee873897532f5e9edaea3fa980e56d896efb38868a49204d067ff9c91d9640cdf2222267086eb076e1970b4bf40e30319bb6ffc6981ec4d2f5de87a70b824e129ad54729bcfdc9e341a92925841d4a83192d5e94482993067d9e0124d5b77fd13358a44545d3a861bfd3998e1d0922fea757ac11940000021c000000b02ebe9de6a5e9e5a201c52d6f998349dea219be42a477f7601d0138b0d54160776a611d3cbe6a4ef2d76da37384bdbc29d0fe57eb9611a905e92b8d70714a292c6fb4686dc30be17833a39ad99b4c94d9b3bca71d1a5c4d441f7376358aa755d702a7c0ac3e9203addc596757b51b97e3277ef5ee5328de54b34e2e499e9bc750c6acc7f31f2eacec9170654a0ecd682f2b4e49a2f2258435e3dc52930dfd5421f3ace46ba46e32aa67a1f9ad2297cf2c000000b00c08f76d66132e0d5b8b2c13346e7aeb593f26369c0e873eac81555872f39dfb8602329de28b258c7dc188177b987c2c42a26b6221a1a7e15c0263667b52878a7b75de7ea65e9b7aeb3c75854756b44983293362bd74b4856f12d6a4a1d32afe40a4c9e3865ffb26af820e722e316e79089aea85656b8c0baa6451fa9c2d2eaf33131bb5108c576c40f30b90f1187f98010da2a98057524d6f8f64515146aa5563a26d0a262eb9f6ac73fb7c4457f79b000000b0252aa5a51a3c3a5e404805ec9c2b4281429ee6a2e1239475a64d10f9680526ea128026938b821f29225a518379ff3acd1f9f3fc5f9c7926ea5ff7308374c981f885eeed0fdc2e10be68fc3ae613133daaca34869c69e2d16c57cc0e328b89edec3153f2c28301c53dc553699ead8d61222100223ce9aa872133e4da2b1702ee056be52978347edb8aa55833adbe2c0171a20d4ff878cc8b21269402d7bc213fe9745967b49602a1188ec2cb4126817b50000021c000000b007b98ca44d372eb47228fb5a441f4ede1a850a334889de3d6c38a9965f476deb28e76a08c00f202d055b04ecf984a5eacd48eddf628e5fabf47fde5baaec8eb1e900a683cccc79a32f7e5754b01469c757fbcd248909cfeeef57ac3ce2d7db3beb197c2f17fda376f9287df120f252231d0c8973cf7ba0672ea644bf841a6820e9a15ea148f9180caa4be93c2988f38e2d437ef82da8f6ff4721f5c4b2f43b2a6ec04dfc8bca8f776137f39157ae03b9000000b0056f545ea3b8be32f1ba8664ccff5e86319a88120ed990c801349b2f48ab89ce5c7277c1c0dfd67a7cdae0c139949724a0d10cd556081aa930a78338f75ba69487dd4ed43c63847ece2d3751a3d9930fe8b2f180683496a9de1a9092cb12d083161101228605e405dcd1fdf70a76736f13f983b19100c5f6c1cb18ca5104e32ba6900923c8445cd266dc3bb6676421f70c10a9ce08e7d0e20f96635008e01b82a50449bdd2c12c0d900ee897cfd177ff000000b01f0de827da1cc548c7902d2e84d1683c5b96878bbcc1a9154866a08f25d6488d74cd4673e6ad17d9da8039f452339da95904d58e57d7d14454bc89948f966ca20d215bf8e6b7195f191efd1bb8e55d90fcf8f8dce16fe1df888a54204f8f969495bbd34f730e9e24790c513a68d404e02822eeca313e2804134be4115d7dee07ba6fc2b16b33ca6c5b106e57a0fc55a00b834ba9f7ddc5df86ffc8e345146bbe0d0fe26a7488a643f0504e405397c1420000021c000000b02281d2082a19bf375c1258f66d778d8f7465c022256d2063d91ed9da8f9e579fc1991d0e94d64eb5b49dda282a08453a41c102642edc2902c39098f3892810781ccab542d712d43346d3c23e915f0387d5e087b32f711b611ab26133879d0b0343706bb14856bd3ed5b2f95bbec353e823e1c8a227490925afd166dbccb3b67631695b26ec71da65435314432f3fab132ecc7c91fa37b65a75a0cd3869d69808de4ffb547c3c5b8a66831a4e6d1281ee000000b02b9b5f7054d4c95f0974b2e8fd80f83d95489d86c9d10203251f1ca18a856e3ba4d68c43a5596ba1448c476a07a58048e1477972802e0498559d6f1b6463472c3721544f486d4a25debf080e65f7c2532437aee2df68941f25f42b26bf954329f7a861d0dfb4f16cc8914f22f06b6de712868fe61a8f68e4a7d91180aa9c9871aea0e0d276d20dff0bf1b7c969073f020a832eef6b780b0b2f9bf30c696d2cb40b7f8c0553c9f326e7a218326e7912be000000b0114aab494689d419bada0522d9a76d46bcc180401237ddac7206eae6e08e59d5e3435981b27247c64b3fea0dff0683f1598a923e5c4354220a5df4187a3d948965a695933d37cd4a238e5b6dfd1045c5d450ddabd55811a70d257ca04db58b434386cb44475433e83b8f6a86d17d5e9928e17ddf5096417ab6fee80ae8de5ebc88bdf439418919c0e8052237bd2f93f9070fa7630a486f2ad7d79531f3fea87f5989fa2e2db71f064c1d64cbb3b3ac470000021c000000b001bb70983789e86c4e0ac0ffc9b75d15cfb1ec2545e63f0d0d05dcbf2f70bf49f303a27f7c5342af6a0ada854c32f8171aa2f5fd30f6c0c07bf18814c378be2ad4448f0c1133a32574c03284caf39e646b41365c114443926e3b92084c69f666ba25f9f063c7c356664af0848a326c1128935084f948a384be340cc18ec18d3b30da45919d50c5058c8277c67236cdf626b062da18daa00a696c2e70fd2d8a6ceb90dcc87f72faae9cdae7bfe7f66cd7000000b00852efafe35cec680375ed7073c30e06f377900cfae6e448a6323795c5d4ad17308c870fed90ded5db047bb773234c670817c2cfa598987fbf5f2411053c5eaa929cd8ea18405a9da3d4a7ea13cd9e989196b02d98de1f2b5167c1d5fd88a431a826b42f9d751ffee875af0e2d0c65aa1a77c80b364646c507f524f0168e5e51b3a11f4f1fedd32e0c0e7edba67043a8107e819ce38f13cfa5c8c8dd3a5890906d693f7707691a3752eeac75c4e95876000000b001110648d10202e4ab5ea47305f741f0f51205f52a6cd90a5ea69b88e4db199e8a7386768ccf465892f387c44449f85b9b3835a3a236466557cdf9fd3d239b2e36d806a9b0e6a8fcb4b18b6d5d26490c26846bbb34ce10c4fd711cf3ba8cb4e1b0460b0122f9b5e39ae53f93220b464701f1361e164bcbdff7e764a9f1ffddbd4afcf70b8cf89109ed5453342b06370314292277aa481fbde4df8a217db2ef9f0ddfd73359853399bb8d3000845b503f00000fa400000168000000b01aa89c0854af3452243b5c8b696d018d4e902b1eac5f8b2144039a767c11416e778f6e0142ebb8c4107ca844e6a96b11127c6c5d0f36b095265de957e7a72f5d780ce0abed2c14f80dd880da129ca4a4c789d8dae6d925941e9a9b1b5c0da455bf95d664ad1806713b8db283d7aa9f39242bcd0e9b91b653ea43b616ce408b100731b87f72403426ee568408369bd1400647d8e8298f47a5829a73e38fcc4182a13bfb94bd4e4686971ba39666c2e9e3000000b00e1379a8673dc4da198f83fa91780e1c6430f13f4f6d259480198fbc6ac62a41ccc1b9cf056bc6e9dc0190b1121c486638580e25f47f8b60a91949f166118e5c74bd913750c722c9a1dfcd0c2a3248df5bb33f6d6b4f39e839b1335f5a98316ad4eb90e5a72ac160b5309f8b7337d6c32ce75aeda8c6a36c3f33a4890ab2650080a5a723953fcadcf41df1edd5ec84e029b89ef1623e6fb27a540ea1f63c2a856cb2405f583f8b27b9c26751f643215f00000168000000b0020f5cd16d6acbcf4ee49cefa1d116cd46bf6372387e12f0e9c33e9a68180f4014bc602dd593b208526dc4c205d1fff3b332622ca9032b30c58f7a3828e6a289c7071938eff7111b0080842e65c96ae9791f2a1bf55aacec63e046fa60a68fd2fc0c7de4f5a5816e0838cc30fbe4d7d3176fa4b31a41b8eff68d38f6e1c1ff13ae3645d5b993c49e328b808e9a83443212e42ae6a3ef2a022bb4b5b9d13c6d4fc0947c609c2ffc4e9727f8945ceb7517000000b01add7007e7de216752a3b146ae1b79e3f23f16a8757ff3c4e5829b009a41c64ec56c0c6a7a3ed6a19ff917d44a921dd56b68e249efb474459998f94d98e4498ac4d913e74c940f15a57d7d0f025d0876a5b3a7c9830170b1dd40490efb101762923e017b9e34333e4f6a31a8a74aa5410459ad85644c197d3f8d93680fc9ca258261d4a6dee53839f2758fa84e84436303f607eac4ecba54c627e8d295a3694b9428fa0c3d3cc7c73b7735c3a1b9680500000168000000b01fda97d12a2bdc9db592a8a7e31e08a4da50d3aa063519e0ea23a11996dfa2d27f68a2b4aafba58ba5e58268a50f627c2018b65b7bdb3382f3c28d2522c6e730262e120755f0f717986d1252970c5b940af10da6f107f835055bb188a1e98a17ac8ed8b4a633813459722116e812644218430effedc5659801d5169dedf628ac4354efb5c5562bf809e0d7544810950d1f884a7fcad20e6b7a84f67b246d4de6b793db34e153521c97517904215dacb1000000b030204d0b44041ddfa44c932974aa31d730073270ede4d5b4889c52300ffef48f96e2156071d0a7ad96ee20f766e27b45064a0a3fa44fe442fe4497bfa6199a7a082e12c9c55fd9f8395a3e6e44623c888d326b37b27bf9ff6071b861b7761568213b2b87800f911c16ed18fbdced0c5a2ef85677d45f9aa1c6aee567b0b261754cf2a2c8928a0d4a59c2aa64b1a218741446c06a42e270c5a45f9451a30c7eb5a0f00b4e90e7b5ea6906a857214136e300000168000000b020de358af53e960f85a6d44c1db0c5eaafb983c6c2eb6d6914efdeb50ca94d190a0fd1db40b021634db077f2574b021e85b6db860e8ab32454aa3e04fc0c3388370618d0c072f5a1e84241e96bfadf61e847037ce2a2b3f2296d20f8466518f666b8b9a6949f7143a79ab3b8f4b97fdb046ec3793d3e88b0fd9169664e3cecd43fe74e475b4006c704ec59ba7fdfddf62b3e69a9485576b69f2c6376043e2c7a527548a39725392383f5d274fd8f8cc7000000b02eb0992058a9066dd3e36e183e5c24906119bbe3bb424eb3c20c12bf3bfbe67d607449a769f18f489ab2e05e7b2ae03e75e3b8f30d5334f6bdc458f7ede67327e5ac12b508732297e98aed8bffd47be912fb9a44465ddcc6aa4d5d0eca6a52469221585b48c5056683b92563125489870ee34f2a918f591de4c238a6870eef6f96944fabfaa65e825bbe777191b71c711db2decabd7841e3e1d05c6c76b29dfdef9418deccc0ec9d2b16e0b68371c76300000168000000b0139a568fcd2c9328b6b4b74503840c7ae6141b8714f5f0b619715ea8d0ffc0c1c1a790cca27eb9bff2fff3cd0ae3242c710149eb8aaea54810676cfe566750be77411e941a19f21f472ebb83bd7213f483f62a3dac18979ca35e3b16ea305c03f70e79711ac1b30274c5f81e83acffa40525c36ec50f20c0371bcced4ccdf67c7573160ba38787fc173659ae8ea12bfa18f017bc81ea9b7acabf7b10f4bf49f7943f20381cf52fc354a70551f503bc48000000b024b488a9c871481100819ec6ce6f08f715ec8862e34505a794c00088f93e2c1707aa01584bd4e4c874f8cc819481c367384310fd0877296a5175d8640a05edb4129719bf5ecab0c8e2122a285697df626642ba7436bb53002b1cba69bf94f7357c3e8806cd3d6da0fe6300fdb3df2ac323cfe80f368c3f33354a5a4312fc1fb1597bff532a493a3e1e58932326394bc20cd0d3c2099f682868baf232fff1d4dfc096bf7634fc6efbc79633554a0a274300000168000000b00e1f71fe7388b77e65977385f1c6ab76c64e93167298a4674b6694f39ddec7028844be4616cdb1da1adb8bd57fc206add37612ccdf4e1a6cff4528efa0cb9787536b18b8f7b4be92d0dc67bd372798f83b1ab43afde341d957c597b10840b149ffdc6ef0f02ddfaee47680ca8bf8ec942ac8ff4235a3074255dc6a85f7a7f79e64ae3df1516e3aae0a90e6e406b38e0b06938636389ae1f2cfaf2f2d30bf2851c0a6f2eea668d7037ca9ddb208a640ee000000b02ceff583b5454388d522de8c82677808350317dc08463f26831a03fe57071c748c4a29fa3e71234948af93bd0d7cbae3bcc9801930be91a3fefc6061c2ba4d8346485e4f5f6fb4c052165ccf1387d3e34d84540f015888a484db461fbc335a581d310381f7100a60661c82c12ee6b36b281a89b2563bf54cadfabc01dd1d4d0c0cf8236bd43b05f823f5aeba71a37e7d031ddcdabd13074e7068bcbd01473d5fa9fd2cd4556a499abd7990b41519b18d00000168000000b0042409073390cf9a89cdf908dd4d49ff7c0f413960b2e41ce7eeef857de890c453147f1077a8b2d16789f9980834dc14e2d87c4765a33bfb6faf4a4dbc39e2dfa3027e69d94e27be131b7ab0e623e810fab2069a3a27632b360735a479b129c370409ccd7ed4c73e432b24042a07e658028b830807e2ccfcedd4178c3a6bfaba0204429664be3469af5f1e49917f23cb2cb3b20178c47b94751eea9de31da30927e25697047d534fecb7f6ce90ada9da000000b02f8fbaf2e5a77aab038cbe4e3207b71e791294629afd274917c394449f82675828b4f36a6683e3b8742d1010117c4e6b2686ac7e27d67b081a71e0c9188d1fde2ac9ca87bc99bc62dfb8a97027da13541b1874d5126283f2a770a3a6b5c6cd0457b351c082b868c44a611250d563568808def002cb68dff41663bd41c434b1b34a458f24df3fd121ff6936aad6eeb7260f07f28a10788fe9073db930f54f860c8380d4ecc73cb0bf547d136d5e616e1700000168000000b0218f9e75abdd64c46b4c0ee95188cd3ba64fa1288ce5750c6c402f318cd2783aea999f43799235bced475b09160ec8d771aeefc4a4c4c153e8ac0eb199c7cd1ca76fe438eae799d88bf29258c3db38361f863396888dbc7db2e0a28e924e7d2fa4a6dc1e1a7dbef557a91e44c5fa719f096c114e1df02d8d59d2055e0b96ed1b3b4d3523d7d4d2470bd55e23061afa1d2a61decd93db9ac920946378f2d9aae7f25665371b12037f8208ec682748cb18000000b012d640749ed0b6a35dd19ba483140795255ae39dcf2bcb6f8d02ea639cbc4347604c084a5f7011a34c91716ad919d92d2382b3f96c450c18ce9ab57155264751c5f9575afb47871035ad6766e9d58011939535f4c2fc74fe85eda20b2a6197ee132d301e5dcba42a29003b8952674e392158df852ddd14a565ec69dc4f40505b516dbf73ec51e24652c45992ab389db719d7c1a021a1bcfb648184d9e239c7a6d18990c7e22d9dc24162be56aff1da9a00000168000000b01f292a2afc0028a52100e82cea8a912619dd33ee1c6d8b84a33f3c89344fea4d7714fa1ad067f6ede512659b1228ea4cbf8972899724ab42d136fa7f426ddfbaa6e4f3f85be8b085db3a61a63bbbf6e1e5aca0170791b2867bd2568df95ad2789fb27982133fd8d95e6a6ce59292c1472d5c6c8e79928a539d75bce4b3dba92c58bf76987c2e7454a7ad345bcb7bedad23ed906586b95aa160117a7a8f60c2d26492dfd111d366bbef20896ef22176e5000000b02c1dc36bcd22c4a200bd5d28d8a4f7ddd5a7f90d4191430099f7ee0667c9ec45d0df9862ea51b2cdf69aeacd41d63642fcecb91e698bf732e8eaa7cc0fac0a9d98dd7eaaf70843e4efaa236f54ab563a993afd0c7f8603f1c2c3fbf0dea970568641c97be7d08f5345ae929401eedc240d61293d9836fa697750cd9dfe3a6a2c5b60d0d001892bd3a02223814d55ca2f02da6f1ea1e60e89855a36babe7ecd6a6d9cf9f495780e3ab60e34ec5e074fa300000168000000b029f5f36d311fcad943cd5a9fad3a084d8c07503f019b5b1f8ed5a648642a976482821e1b0f5ae5853e220e2d2ffee78a2ee555fe104800c234eb2fe0a7dc194b13f86417c386a4980f9fc28292545c4dda8c0d34faf76c913e8a437bd1c5cb4c3d073eb1885b32dc0d20ddae6b7fec570efcbb8f8a978df9878490181ac2befa1e85dfb743a8c1043b3406161022d9182f294cb1ec7f33abf49ee6f243efa003f507d5514da09f432d697c955fb360e4000000b013b6fdcd0fe8fe8662420ca84d69e46941e9912423fd622fa7b9475863405fb69b44c5a9178101bf21a301f7f001280b145cbbda6729c84c45f8be579de6e6028ec3e5318a8f39a88cb8bbbcd15af6e5fae0e26418539e1894a1c09f62664f3cb50ff760cc3e1c793409b9462a6e2dc919070710ad409b33accefe6df608be7c97a3cf744a263e0f3ce65f87189ddef52c7f3418603dddf9af9e14d533fd35842eb54f60f83de3def22fcdd3978aab5b00000168000000b0248d693fb99496ced9732fbceed19de8c11f9138a69ee83ed7c56ba72c8449404de04538c1892b3bef8bbd9292fec342850490b2c479e4bc7d4ddd899b3d81ebef511b259eaae53dfbdbef8f4306d3b10a63bc324b2d34a015480f329f16cb4ec6ebb96a9aa1675811c5eb8a0e71fe56029dd73532341cf6d94331265d1fc44c0dae733293f654cda19434061bcee0a62a335f850475714396917b2ecd9f659c13cef442313d3a665d9d29b12ccc1287000000b0090591436746d59ad6707421e01f0f37dada7345303e11ad775c7c430eaeb0c3ed823d0e00015397b805cb8059ecfbe38c5e5346b6629e48fa22e5501453dfada3dbf644d7002fbfabdd7404c855656e216c50d178f79ccd027dbefd0cbdcaf5421be6c3198a7985b31a31c09815f7bb2935e3086da6e63d7cbdb00b4badf73568d0bfcf5506d2754867c7f111ed645b29164c3cee76013d67e35dae899fa4c7700672fb391cd34a84981403eaaf81eb00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b02ab5d595a67edb3facf6b66d86b21db6a9873756a62e24ca8d4a09104248f5a9b61a920dfc9f5e7373417712af13bdc259d21d699580191f688dc7350c50152c81817b31a252b5d2b3bf0076aace405562d9e362c672ab7674664f8f397c41a6c9b17132fac585c3916d3db5c241f07b13253e9d1e9fd43824b9431380400c36ae35c30c98139a3998b941b9ff84256b00a6a73fb2c69814bca39226cd3f54d40f8958f31a37d26dd2cb674f87b4ff3e000000b02e8822f02b28f48e05b212a6fb9be5e3ae248bdbb1e5fd7f36cfb726b319e73f1464a633893b4b499d20000b06743c0fd0b453541d15a470f7aed9c6aabf849c32669ef84ba0020c70f4cc0c604d088193ebd2e4bd7893318b17f7f75f405e1eacd38411e81ac8287f039e1eb4835aec27b3fa6c391d3a3517441cd9caac8f1338189c488b3e29e47b890d2d30230bf21049302b3871aa61a00f5cea2bb6257d8ca03374b61245087abe3b682c830e39000000b0035f3e3994796b86bc5cfeee4e2dee937b8600aad3520b20d4fa01e45316733c72776b553c95ab186cb303ab210e7470ea161dce20670c6b80a5490473ba86e7363bf9fc0851f8d7097756ff1eff304538cb8daf878193022349e6c7d6b0c5ed7e4e83f2c6e46e94aa420b4243a083672637dcb055956bb3a22e967eb79bdc5b690a2ddad1da150afc4a080cfffbe3840739260648517bbe0126594a9b332647decad0d1c74bebd42ace0c5e4a2c18300000021c000000b01b69f7b7488f947f28fb4dd5c3a3f3269e2f79dbd047e99f40a161db71aedd9729e5a3c7af9ffd8b3d8437e7e6c01a68cb8496fee41bccd96e760c08ee75c4667f54ef035c791e654b179a8f1f64de80ef2051dfc1e982f4e53ef831f710c95b21210b5703a2eea6a83f52f7c8eac70e29f8fa3f55eeef3850571472a42ff1416364bc78d9a658dbdce8e98bf18d44f41439ae2e8e228bb4433f68fe91da9d0a1b8cd9c853293fb4ecef2b62a98e164f000000b00a35d20ec255b797f31e8a1a7267427e173a43e645509158317eb7bc578c657c8b076ad1b7c097c44abf297485c06de702ad46435e5ef74b44e685c541e44e5d0151559652adb75f0712d89d0e315f2abf58ba810f5231753d982f3a6316be75fb0ed9b06730cf91d221a25a8add13a22e1ba57ed28d9f63abce703f9ab1731a1a2d5df55e9ba9c817c24eca6935397120367d6a427634e5a834181c1c1b15a93951631d4c20bbb6ca540307312cde96000000b02ff322d574d0e639420b3fcc334218cd3909c326e0bdec1a63e02c327cc85651884ed6841886e2db14fa647cb972a314f6e1b0c271facd64b443e9ecc3e783b9dd88ed88af74d341b34052794f81b6e8923ecb6e2b7cd36a62b287c3dff445b5a30ddff5cda25eedd911e21a576d2acc08ac5f738aa25ec5499b7f0b19fd80f934fa73ce63f0f536ac011b3e07baf25e0c70352bc61a688eb4e0f7dd0e5b1571ac75e2ec8ce49429ef8ebbedbe705c8c0000021c000000b028e6f3003a1d0ecaeaa8943e9f58df43cd1260fdd636873fd19a756da94898377d7c821cbbfe09a23118e9921e496f1f4830761a5a7ec8cf5fcdcbda69481cedb37fbcced75c9619a06d50af07252750c0005bcd053cbebefe14d1983447464be62c0b71ed7a77d00e90c8c39d0cf3c000ccada667ca9f4deeaeeb1e0a6e31f8b7b016417664d5a71969b853547f85e9109478abbb1aef09850548ec3436268ee1c786edf4adfd65073bca32a0a92259000000b02255e6ff594e734df2fa2e9f60cb3b2e27b351c8869f30dc123e70efdecbf19726219d8e7bad57feb585f9d8d9b6263f60d79535159698260e7574ccbfab982832a094921eb5e0f3a8094b6337c4c5401b94c1d0d8c94457002ccde3744530c2933d9a86fe9bdb8f1bc57ba4eec0c6860e45790570846bcebb1485411b114d3b06123e88648fa4558ebc418c5878f17e002effa97f9f031cd8fc2707df3f000cd88889205746522559dddb1f5d2793ca000000b0051924de84864c347a4eccc9cff312d4caa401c91603be975e19ee62c210639a493238ac8c237a62953f701fdf1ad9a2f769bfba7de7018069fd593fa24ff1a00389c8bf1734d5164025be0c50dc01a050c8b04d76d3fde943a89da7d8e66cb75d61411293ef3e5ac53425f99e0bf6ba0b3dc12fe7b9b7cc6ec8be35d31f9cd2d6b94226d471e8504f7f50ac954f61c6053e9d49013e8d1209523247d0107d1bb094610399d763dd007f17b9e23e55c10000021c000000b008b7f8ce1689c3282661819c34ffca3a23d22ed32913588d39076ec0caf30a72df946b7d2da825ec074441d9d12154f253463cbf0d09fc51ddefa07251bd9ea6bab15224a991b2e787ab010bd5c4b368aa36fcd5d57a91590bf2dd8fba4a5c2cd47e4301c52017327bf2ee4f65e4af581c43d2e11b10b5a459ae021d05a365e1566192650468e146d24668632ca98e7f11004bb90a9bc76ac61f0beaf8f78d079c619df74b590b93fefc9f054f57ed2d000000b01785dfde0f083170f91f2e685bba7c362ccc8a529d3c75646801052de8fb0c9e6b95ac45caeccda8212d9bb8b450ca888d7313e3829247abc5238f974d4fc7b9aee5be550a4d8549fb4aec7bdc7e68bd35063d65db090c6b9b6872804f6c505ca258d1e518719129880819a019df836908a147bc46dade68548c698bde6c4bba10faa163a7eada2b747037e8b5a68a492f48cdaded1f3b49e2f368d18424129ceb54606a0e5cdafcead3b2e44dc6f4e4000000b00ebf6db9ba4d351c19dd9448f9df1f66d96cc789fd1f6fe1637f3f4914a453c6b60e8a73f14c4875868b7ad231ff894eef058c4d8d967f0c9a9a465d967e89333f367fa21a7ac0ceb1437db4345b3b1c5a741f994484f9a59349edbfa1a491a932a2d9b4f5fdcd56ea4eb1555e47e0db2c4557b49e39938d3daf2946f6ea9e4e08024b548ee1f9a8cffa3aa9078dad730aaeb6599a2abf15b1afc6496d1f6781585fdacbcd904acbe5b100febbb336d60000021c000000b01bfcb1bc151aa3f747a5a9437e9f375796b323d3f1ae9676538a123bba55ac8a4d8aefa39f2ac1c6863f4629235bc8248f5ca57fbf35dea6a01b5cd9a2da37a3f270867b0ffa0cc33e3942437784be9bd7e9751f9c8e83b7b1775a1225df6145ce49bb8b4e08dd27fcb49c62a12682bd2fd55fe97c19420ef253c95df7609e217018c4fea5cd764fabd633d9e10f69dd2bb37d2621eaf575946c840d5a120cf262b4d57a337bb3291a34cd5e2ba6f382000000b00f1b8b49c1fffa1c0e3c89c834d66862cfc75f4cb1123d3c2a654b90fdc49bd93a00a599e0c68f5f2c9aae2cd2567518d417aa5709f05c71d22b33769ba95b071a85bada910b917036f112881e67df3b19d987bed38c41a373db23b5cc5eeb8461731d47b8f3f549ac313cba8882441c0ef080c081250afa2487fa1149ad997ea13297dadf7b4468d8d1c231f8553c772fe6720ac74ead255656b469ea54d173220bda1916a3481688c58811590b19d8000000b02235de69dffa13692d0a67754294c7ba7b1d90d81cdd232570b85ebb62e44b45b334f28a8f0733ce16bf5c9e7250c392909d8ac38f4a0bf7f5691b3eefbbffdcd2fa6c9b18270012dc5c8a29e4dde5620b2864de5c6ea3e2ec81e05cdef4f4f490a801bf4bb6065abb231fd185fff4680ae4dfc0858c4e2b5238c7295cddcf90198696e5aaef867bce8e5dee1cc713f013ac277dc4291a8716cffa2a8399040aeb71b76ebc266916d39713709d1411460000021c000000b02a62832001308690d71e24c493c2776909fa09e07670d1b04d4bbeefb7a6ada0e219a6af440ad0e04b0ec875a1eebef4a8486e7b7a4364388d105d5dd04fbf9806b50f843eacba971e555dadf1efd6873be0df6dbe78e1728765a4e3881ba2de364370cf4697ee849b34df4d2f1b7762269a38b596829f4c5aa0642adad369a106cbed03002f38cec3e0eb30279cf91623a8e62713ff4122fd9cdfd28113bb65135e3811a65da795f64f9cf7e14ac281000000b00a70562548d7688e2e2eff3ce7f2d0686f2a22b319f6e1596386d2f88170072d219327bbe0bd01b93b15cf4c2140e705ac4f6f5f9adea9066b95222e5e090fd3d4a5cde608cb2a4c403693de85cf5a6449980e4d8c2a495f2f802d3a7fda9e5eb360daecf00f5f6a3be68e77c3a3e0ab0e766849259ff287706dbb06ef5acecb68129a88a452a0060d567ae85943c0b32ec525818e8a0a976fc4b79ae062b4dd1550f1c04faceb302a2deebfbc80b82c000000b02275a210c377c86661dd245974060872317eb49bfe575c7a567604fbb16ce815abfef35ec78a9c6cbef624a3571da8d9c1504339ce87152b1d2e8402de6887809f72f1aac49ca40980a347d47994d4f3a6f46c9bc04386e56c15a8794ec2dc5ba7964a8ee2bac8c357ade35c95817dcf0709999265c6062328334ab176e08cfae547ec5de7ceb5ad70171d46defbcdf72f85eab498715c787eaf848d4b7cb32210bf29ef5682dce790365cd369c198610000021c000000b019802d2986a933f02e7e08ff1d8d6a636b6a656659519ff355af56821b851dc4d69e2442f25c665cc905a049d92b021266a7bb213af0c5df55ea5dce15c829c24f313ec3479d6c7d6701238cfa687831658dce781220f156fcf8a59fa42c3a05093dd9fbe7bf103af3aba20fe6a1f73b1ff148c55139ee8151ba9c5aeba9e35fdf71f26dd0e746387334d1c123086e7f16901348590d77fe07a37256c4f8ccca8c33493a88c539289e3591ac0e0a40fa000000b007fa142850d2accbde26f1e9fdbbdd8fbe82b4404fe4669888bb4ff1bc7abb3d2903382569588bac33d01f5303c134c0abd1893432e4139824c0b8fbd1fbacfe6588e2373f24489c6bb8d37b674440f3a9abf7c6033c283aca897532c07570c5a733941704b4d28d2dd751dddee99719142014b58c044b01f0ed606e3ef1c3487e256184e246befdec9f941f8a9806c62491f6b86e15af2f26afdef47f0faa391ac11489a676fff4986c419f677c524d000000b00a5b03656f887ca17180c7bd917b7f0a966fa1e3435c6361d9334908ef12c9aad8253ea9deeb6e52267ebec91e1add12446adcda04eac14b61913d16459f1ed1f11ff96d05d67fb09931b68630bf94b74c13ce75bf41ccf6a4c9266f963bbc3a2bef7b6c1fe8625baa36b031eaa9fab210c2f513f1fcfa619cb26d8261ea333d62ca4b9dbd5ca513ce6a9460fc4547df2e300f6850491a9fe1f5a6722bddf1225b7b45a5f244b52c6884b52e01b720800000021c000000b0107f5d2b2a3e4a1c4b8ee22101f2c6a676af6cc92204dd6fa877b4dbb0cfcb5147e5ab792dbaa4766b3ef22b4cea29fffba2b6032a3a86cae085392dfb01b80142b309cf5b400291f64842a01459604dfd418a4d02edf30f3fc7e0e5f80a165c4edcb9e221400b6bbfda8a25de56b1da1a8da20189697fb8d394dca78b4950732c1c077d8229d68ea5afd29f7e05225203a075a0904a51b8c142a73d0d9576750598c06a19542271e7ecad8b8f3135f1000000b01e7f5cd1212e8faa40e39943ba916b4c031989ad3c24c660bfb8659e114d1c2efc577d19ec17070a100fe02eab05370755b52f1705395d48185b51e5ee8c1afa87f654a3937831faf132890bf1786bf2348923dca5fe49deffae2bc3473758307bc5b4572593853349d6e4b52571c77500619d92b82c4ea4924b99d916cce7e059acbf12ee1dc2177681472bf914f9de0228f803d41a1662076efb259a4cf4651bc89b9b21cd54b94c4d404f600b7d8a000000b02af42015aa807e09be6ae0e666d22213923855ec83cf99b10da0ff170addfffe36b73a0583e7a78a7e2e8d7644fb931b543a02403c1cd2300db07a7c4dce29171155de6d327dfc6ad05ab5609f67123b2af01f05283f5749235d14ca20489b4ad8f0ab2dc50eb6664306e5a7d2745ef2245001df22ef3f10952cbed8a78528af5eced922c70dd2be5f602f23a5dd73f70ce5a3f992d10f719b75fc00ee1918d0c44bdd12148ac053e4210804b611ac6b00000fa400000168000000b01d391cb51b4c874add2f0abc8a0baba6b9e009e072ca04e4c86aa5c24e5c8a327c5f1041e6a4cd8d2ce679d46ad849c3b9bccc488f254252d5a5ae8e50880e6027b691cd68ae5807bc494dd81e2db0a0613dd4c139276fee835513224b5bada4873ce7f518d522d5b02dc6a5934db49d1994c81f601fd49ebcb240c2bfcb384ac896165db5c7204fb88474ad49bdaea8038471f35a0d0a56fd5a7f0c08b485961486d65f37cf43bc41cfcbb11853be10000000b00ebb5cd5e05257ec380708e879ca33928caf7fb489131c39cd51aa81089e0d6bea5bf8f279aa72e48ac6e3c452be520f652fa68266909a7cbed98b16375d67c437c13ccf06dba6b295fc18fd616f6a8bdc5be06eaad6f1520ba214c00f55573b684acad30713014b3592f54bb59342f60c8e7ad750f488d2ad74ab3ab4ab3217a972c0808d529e60f4041b77aba6e86b032618683dbc4be05ee7e3c87d372a6b96707625ac7c783c88e0c6322a909ad800000168000000b02c33a07688da6a715484fe8398be65ded38cf250661bcc2b8eb24f2bed7b8c2a288995a2ce08586c498e30715de1b33eded2423ac315e730c04ffac6a4db7743c2524dda6c26db7bd9e29231ba8034e28092445b4a9d058e4076cc09674bb3aa6cd397b90595f4bf6992c007408c69a0298fe8c9061cc6ff82a81ace55082c5a6629f29246a06f42ca1f34150590bf0a25c23f6f319fd4ac9c1b7e2c3df1bbcf23281b6811c0c3754ec784ab22be62c4000000b02517b867f7b85a3514589358c9bcefec8c92c12fcb6a4a267f020c9eb829bfe8804e903198fce413675896e0592481ddb59ba15bcd330993f2222bfa393d0ceecf958fc74ed1796f2dca08a2a247ac4cd662dc33ca7ff7dfacf3f8f62cd229777b596fe6e825d1c6953fa8f69de7669d02684430639f1b5e26ec158af1ff40b15d0ce23649d5fbc2ea940f57e7ec4d5b0ec1d40a8de1d9f3f0b9154b759cc876ae5161857c69b1168bc8ada41e422f5100000168000000b0168911b2e0af0661ff739779493c9b3c42452baf1ef1d26c348253f6052923a792a34ce2e3566859d7e787b15e865e36e679796f5bc200632d93fb01b50de3726499e013f5b95d7434d2e62e7f19a59cb1ca0d8ef5e021168cb54e114e5d5fde99ffa6c8ac77b4c61627a56541d5d5f223624c924589214af3be3ab0faf389d8d8ad795992ef6d4fb3405a6009771ab12eb54fc2c07d1801156bff21b8e36a8a91412d22e8b73e03076cfd1a8c99f784000000b02b3d2107234f52d1e1a8f17a8474711d8ac9d48bea0344abfad1a0e374415d538ffbb53f2684cead58503db7f723e8df9142eeddaa7840400af4892be85fa908b1d5d0a965a957dc666c334b1dd6e36881a2867d92a39f4090b3efd0814112c1d8904c91a1e25c827cf6a56726eb6ae624c006ff7ea95f7ee980fdde728a99cfdb11be87b74587c87bc696e0e9e373bc01bf315e362eec7baba79de91f267c9d6dca6388f758f9179e4bac032dc8d47900000168000000b00b5523f39a065de4cce6f8455c74f7beb6fc567f15b7829905a352057bb1dd7c6797a5326bb6fee94844954bf6cfb24b12f1a288167d6833caf03e7c5aa862f3301151c9d8f6aab3dc00dd650a68f5f72f7dbc5cc2a80ef7356f09051139f922d61164cd92a054c5cf23a2360647605e1ba9a36469d54a783c5aea80bf86d34af9efcc499594a83a6415b6591c5277f72bf68699a608cf3f9010ef7d56bccd4be5a17c771fb50e357db6ab20221eecc2000000b01d754d3d40b986c8bed8ac02e0305327942f86311a48a5dbef606496a7bff4c3559ab977315b8eefcaca6aa2f6b79107fdb004560e8027a957ac745b3708023ad2436f8ce23ffc5a619f7097c958d3cc9268dc9bb80ff1dc469b78eb14868ae16bd3ae2290656b79ed7761d4153a0b2108424817059f577cd06ee855bffc81f197a75fd010cfcee4e0c50661dcfeb07a1c25f9a42b98002f1bee774eb96db97e7ce688c58006526dccf1355509d859ba00000168000000b00f60e4150f8a42167e7a7508c73b28636ecd3a233deb626220d6c25b66e9a76f2b5cbc477c9a50dcf903327230bdbaa7b75174203b9f43d86798d0fd329ae613a813a8de4d3f79cfceedae130bafcfc6dc27ad9b4f0be922f871d2238cbb486b378791c6c9e184b912fe61d0f53032c217356b342a63908904e43d4d77f516b49ed8773d0ef94af2edd7671d44e0ab7e0991ddd44b14027038829902a306ef29a3305cefbcb575a359fc17f746fda0ce000000b027b43e3edae80d8010ab94794b2e3a1b1652338d115fd1bd16dc3dbd69d63ab9f062ebfab3f229ac9cda9e962aff48033bc7ec77ced8efe586f7f72718095a176e9ed1d3d7b9abace2a6ecae5dd58240a0e68e76b60e58aca64c78f64dbbc3ec3e2adc01c14d29bd1e3329a9970cd34b07d0c7eaf87fe4c01d66634840b27313426f26cefd9370b5fdd2325da8c7ee2e1ad483b6dedc9f3ba0b82ab6ea78a76027ff6bf5cfc5529345a913c9f79bbae400000168000000b01fabf4d6daea202a6f50dba6e46672500c76092798199bc152a4d704a0ac739c086faa94d50e3f5c43d82438018a2078c60aaaba9251d35918a220866ab074094c3426990b17285daaffd6d3186b15923e7a0420ba164dc8adecfcb19d3d7d9464789f4746c262b21d6bf03db6400c991feac33665c593df5b00f4dfe9c5a4f880ffc8ac7e8da72f922585fb7c260a2111ced8b5093676da51a1a69308cc5ad700ad7c6e33f6a2f0a43ced0ddb81ebd6000000b02efa70158fb381d86cfb5853c85699d2f41f0bd339005afd07386f0220504e6c623c507fe4d292c6e86f8cc38c0858208d02cf5573762b488b5821424fd91b1092b1ca5ed215c22d2b86ce2cb6219b89b9a3479f69c002e22c93a0378ea27b8695d7bd416d9554e6053a7b025f1f096f2722468eea58abebc8484d98d69d81438989da96ee87543ce9eb372586e6f7810d4f3e4670f34d5dba24093b7600396ffd291ff7b64f38bd4ae5089b887e0c3500000168000000b00e80484c7e1d2c103d16a2fdf4890ee43e9b0754106104ffecfa5799e2335e30c652a58548fe10588bf939b85a6a996672c80296591eb5581fd589b01d236416720ddf4e50c92056252aa2108517de139b4c6ac75bfbde33e58b152144c6904eda75e4f7d64b7c6092085aff39d112691151290e8c0a2722e497094bffd0b961958a91b5c39411ba71c15fc6234e3f09050d1061faa04e9c49362000db6196030fbc4e48f0a08d56e8e8731613cb94ba000000b026f5008a0ebbe1e30ae63696e7ac0f745828061eb0148616fdcaa6872787044b7835a1d9e87aca2b5f7328c9bbfa2cc17d17f67ba3f915def1742a4f8665e0e3c967c9de2ba9e3c176eada439f4fa48add945eef9cb076fec74f83f3c65dca72dcf747daefa0e5aaa5909a500a3241380b807fb303b13e136a4fccf46ef912609f9044b103fc88dce5c69363a1a82b8d2cdf1c284b80fc9dd9810dfe08117fc995abed3d66a7ce13d948b29c37dde6ee00000168000000b019bf0bb679472a2851cb504123c4fe5a736af7fee08d3828943ed7225c8dd65b60ff8dbaf4a3c4a221cc28e0d8face5d8fd729457542e1445a7a58a4c5c8128c2914291bb7fbab2fa2f173aaeb2b6996a629591edee8db6018e6d835e9a65f2af776942751b0477299356c527c41bef8223df67968830f1d1451d8cc8b62ef210d04772096b9a29160b34ac64da37f050b44bfab16b450453a4d9c62ae0d61ea99357fba0c5d6283ed4e8b56037b9072000000b011738ac33d38197ec9a4b3c0de367070931907bc27ad1e1267097707a007fb0b2b76fb76c55a440737ca84c7c5ca186723dc4e981128c0c6a9e506bde2ad2df8594972b6e047efafd3fdacf7526155e996f71cc64db6dc0e12a3449616bd77c2834e37f87c4885ba04faa9e61f0098340ed1b87fe23b4c1d40d8d606ce98f64697cb732f9ea82c991a4101451157af8909d67413c0e7a9b7b81aa0733a3fc2da07d5388127b09edbcf051026170caa3400000168000000b02eafccd3e4b23c232f1522776b18583c54dd4bddb10de53ba60b2b33494470cd9b6e1e0f0ed84c56f76789495ac768f8814a0730e2cb08d6b5eb410bc5a9db0630f4d4a70680a1fe8d29cdc874e8c77a71a9ceff47d29daab5f67e3360c52700d5b5685ce369466482df6b9558a390192a0bde1cd84cf320b4d0ebc02816110ca6b43eebd575960c3f71f9116b0a3e1b2fba567b2e5ed9759821abf1eec143d3c636e1757e22645364f9bc98892cfbe7000000b01ae47fdb30f2d3a13cf0307d269714ddc36e1e29b3f060d085cadf53f9a18dc64eb5d782071c1bdf286c27d76b1fecdfe27a300a0d5d06443b86a7d93a9194bd8a056ad0b3b6d56a530e2cf7204091337a18665dd4ab379ca113b131c636abadd0b3b83ba5fc5866c4611b9d9638db6601fcfd44e0d38464dae6baa2f99947eee4e70472c5e6bf06bb8f296d6201c21a12a4a04cf4c46d312874ae17cf0004f9b560e97a1b02c23c972cd3c27901783200000168000000b014d5743757b5d049304624e0e0a2a3ab07b520003d6fd1c4ca70e56ce82682b2fc75e6322efe505a06abe1784c81edf9882b8471ace526cf2f7bd2fb0eabd6e88e2941f850c07f6970155b1a35eae9025897d416f64711c5d2a33e407eb4b04fcfbc5f73f4aef7ea218bf9b8eabb6dbe20eae3b616bb02d04c26509a4c65a44040d73af94f7ad60d7b3fb2e4519ea4fa00d8775b7f550745cf5b2cbe65d7d8cf1f42fd2bfcf08d8421e38ff6be12cee4000000b01cb64ce3ee861d3fafcc0716cc2a7fe09835cb287098a84a82af6c8746aff2564c203453466c38f563e70b76dc4e8adc7603ce6b13641114f41e18658c145bf9d1d4ab20f317e5cce3cb7dc5aca33c660a591e8bdb77644807ebcbd8de5f8579501bf85ed20fc5350bb3a532512bf73321f6c44e28614622f2c97d69885fad3715cffcc7fe4ae3b16cd33bb21d0fb8781be9766434c59462c8911f0ed9c3b7f66bafa636e72aaae500fdf6e36bf1cd8700000168000000b00524aa987c9b96992eb381bcddb3aa351df1cf3cd283baf3502caeb5f7be991fdeb40e75f585da8d8e2ffcb61d7bd5095634775a71ecec756b6fdf2329f1dd559fa344714151bc000cfb20a68f44cf8345ce1a488ec3c4f62fb03ddfdc85e6e905aac45cabc37e55dc559555bcb34125268d24f9ae3f5cc3139324512b94ad38981b15e240e34ec880783be53ea1aa3805b35e524d41a7e531795308b26066c4211098fb4cb8c0fdee45cc066b2562a1000000b006f2175f11664794970e9eea00adee72284fc35f55661012b3f1e2ce662294972515f37ccf1ec2cff3eb7d5796ad8c0011c160afac147fceba6bacfabeeb721307837eb69abfee5c2a22f7c46c966a566021cc64a94c864ccced394d83a5c07f53bbeee5ed313164b9c2edaf48a7d05c0ede2b5267d731d9311d77e17e6c49b8b58eb294cf1283696e3ebd6f50bbe9eb1d6b64369be4277ed710387434ec1db21b0d365f22a6f9066ca86c7185253624003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b003946dccae961c128e511709c7a6cc7a630b7e4927a6fcd9c821118569350bbd3be2f6c394c3fdeac9271e2b7154b3f44a2262d56eeecb458ca1cb2483ef8e38dc3db01dc5663af74fdb50bb2a66abd34e5009dcec3b9164a2c20f3909c344004ddaf96d6e57fd0f47cc2550bcceb5bc0cdca3dceb22a82d533d595b0fdca2aa17f5a115f03448c8106e519356aedaf6178a67ee73d0f169f2dc3357a64e80a89308a97ba47bb8c03e8fb9f7ada0a702000000b0070f465625afd6400c7241801a2b4e91efe2f68d2213c8931ac147c4a06ed14806b4ec6f0add14f8bf8a25349bd0d59c8c77cf58366ba1dd0cf7141982c7cd5b715dfd70d58a9a15a3371e9225fc8b78988dc96b70c53885ac2578a3edad6386bb103323af88108b3fdf48cf24a27ca01e6893dd5457db7648b57889535352d7c2dba7c8b77b005c97b5ed585ca69ddb110ef3ecdac5d4472c8096444e8379c5ed7ddfed9b740604eb03e0534885f9d1000000b00d0a01954174e2d39be53f39f04c70392029494647603967a14e36fd9436688f21b5efdd8435a749f1dd8dd56a6de78966a61cf99c6056ebd2e2806a730386b0702fd926da921f11d97aa834e2231149cadd33e17535c2f04eea4e1cf3594c35d84f0b97c0d30634fc381fbebc5d9132292d429e651960f5eeb64784291bd27364f6914baca7f3ef74db18f926a7067b186e260f70d113a9417b409c16ddf80af0c784f53563fe0b4c73ba3fc45d7c7c0000021c000000b0126589f7ad4767568913edaf756942c6dcdb0a9b7b5918121e0f1da9483cab009df0072412a090cfb5e7623907c8951c1507f48c861da98e80ef4e7c4d77e87895ba9dc97fdee505aeedea251dd59bb19963bb612b554aaef7bd4163b8e801aa1974fa500eadd90697f3210597503cd10f96a416401c88f94305d1216d1c31dd5c206c2b1085f17f3b809ec74b56d1140867d584aa06023cfbdb6ef4df49ed793053a452fd82544cf1f89faef5f6502b000000b011e2336f2300b4f2cdd3fb7bcfe2235e6c03125e31df0dd6cf2b185fbcf3e676d380ffd7d3cc86436bc7c8b8e0e9c3bd8b70cfd73ab4cd165cb37178cd0c68244e1fcaf04bfff30fd9e2c32d9a5ae6300a018d4ecabcdff19fbebfd30c21dbb54f55b7d2ac42d168439efa107c5b33be25cce7d3840ff1b323ea7c9008a1f68b67331c6233752924678af87ed20cbd581f657f556efdf23ae999ab4a608b0c8904556b61148d6678823baf0456d63e8f000000b00740203b4ecfa9f45d04aee98b1ef65aa1c58c52f19b272b779682148728d50428a73419edfbf099928c2d7eea1c508ce813cb5b8d85cad1b054f8074d17f8f9aa594c6101e7f931e0276ebea88e75c070005f10b0c672c38566a3282762758ce96469f8fc41fe63c671ea6dc679caba0b4d8b022fc6b478ec940f4f0ebc221a8d6c6fa5ff13eca06030fdeb1abaa152110d623e1938961b6626e1dec2279e315e731ceb10e96e24a114502f0e6512ab0000021c000000b026a7db2826b933d2451fa8e178fa90f048fd12a26b17e93076990146721db3a2d98cbec7ae26d8623d90345a45c9dc7ee9a7ed4621f9cea96df7b81ccc1104cd78ba8a6b9bafaeb2e52ce1ae39cde83caa36f7be721e2f4f00783ac644268a18c280365c6b448f19a609d84218e2a10618cdc7bdfae31c72db3bf61b09378412808dcae3febf5cd01918819cea4df3940785a01b4dd7edb95cb664ea9260b1f26e8ebe2b1a781be3f02309ccd2c2e3aa000000b020f31ce0d64bc9858566f9aa4be385a416c781ebb9530c6a08b46aab0bf26fbf20d6f0cb4a82e7232135e5830a6ca4d35fadd7482e012ce14fa9e2942d59c2d34911fe6bcb3a626f2f1fd95cfd5e5a1f867199757960e9004c9b2aa36ab84f05b2e8576d4ef786e96e5598fc4fd6fcb92607e25b993a7cf028e0c654cb0934a5e4274f71f720f3ef94771f5b5902ecf72ab5e377978b5755004b9802401cf1f923b09341288fee7b95018a387426fe36000000b0010330f3d0c969b395bd5ebba7f6791d98b7149348039a08d4b796047a7edd3ca424ca22c0398578ee99b96181419d63630cdd7fcba9e4312681ea3cfcf13b44eb4b025e73fe1448bef66dfe721c39270387b0bc06f93a03988181f3c8f758fd358462a365344399d99426b8f5972e5f161de687215cb1faeba6b8062fc02bdacfa061e39c7358360094a628b792003523ea6ada2f69f6d0f36dddb50b75a6232f080c8791f9eaab4b10926f062a4e240000021c000000b004abfacd392462db23bb3f101900f29f2c8cfc55a93d90ff020b610390c8ae45f35d8d6affe08599a09a3b6ccb7d5151800f93b665da0d295f656863f0f349feb3a3f1b1d6fcdeedf5f48805bb845f66cd653e62928a1889cfd7b6399fa9510e93dd0e363b822c167c5ae8d6a28d3065048da30242414796b7473545b30012906aca492baa2c1dc33d90208469517e6117e0ebcdb3fe501ac861923696d6396b1783614b3d3e05a979dde3cf1c6c1446000000b0170849d0016faf70007aaa134d0b6e907d93e75bf239eeacb1928039beb6a82014d767f1f6ef334e7c4fc3423d09f39e596b3a5dae68f383bfc3778dc40a64e67eee1416b84fdb0afcae7a08136d73da75ac671c196cd957fd159a075571e0e3e26586af1193a4f5b09b5f5b409f0fc71aff06e99a7138dbc8fd11212e705b1a3e84c90f84d934f891d9f9ee78c7a31b10bb4881a62c9d5df6f5e8066d6d3d42eeecef9b09de5ed7fcd914b6fc3dffbb000000b005e85bd67698869c80016c8a51a11ced3e346000d335181534003acd572827559791cff1048bc8408f53395c8a5d835119d3788cb32f2afd75539feea9b703fe6ca11ccaec411c8eb696a0f56a5b315ac97689022d61085585d178f03d255c442c364dc39694536534867ddd8ab159c01e58788dabd6bb3f099b81fed94c4303beb1f5f63797f2b1679c55b0245cd53a1469695f27ec08d737042c53892271f8687da2599950c46ed1a273f865c2c80d0000021c000000b00a655a3d720b4f1cbf931f03195456e851007e0abe280a33e898c8e30790db0a079f0d659684776be752490050d693bb1a47645e48d9db616cb40ffc7053f2aa91d4e5f5a903be7b50367bc42e90c14609edfda67e71ed510049d7abf87992d0918a4ffa2ddb6615407a9788dd30ca8e1aaf761003625e3e2ca13e71fc5d1a6c25b6c06df3d25b2d15c479c4504fe4c62b3ab913a2b6182c8dd4acde76d5cbb1c2c6fb9570010aef6bdc16b21a371511000000b01930622bab6c635e5e47efb54d918f4f75318b1cb143c75d9f59b0e02ae661d473c5d595ef079ec960ec39bc3fce086c17de18ff7c5869a4d8c62020648f7aae53905873c8d9a7173f245aa47a0f0c32c151ddb440e25e78012cb2fb60cd99d8ec01e87146aaf387cf7597ac120544c51b40c747a5352d7f0667de4014e981cc43e4e58b8a32e655b35bff0073fb78ee1e2f0865819fcc1cba03ee6b71effc6a5db87a2b17a0a217a96e6f0b20785d85000000b0286406756bb3b496752af09125aa69709b4c671f674ee989acd65c756a86922eacc98e891e7c564bffa5266f8fb46e1200c3175d2f152ae2174eaf266789804528b60b8896d427c3856ca5cd163a3893ed9e6a66186080c9bd74d131a2d56f95d0f93f69e496ed37fbc2d54a51321243197e9c7a6edac9cbd612bc0793ba31a11690965dfaed5f6207f1634a7814dd3e0810a9810e179100e02ac4b5a4c21eb46c72241807dd78663922233701d54f720000021c000000b00e7851a30c5df4843d1825fb8c1f84a944c83c95891f3082050d908099c810f3e5a94cf6d6d5f88376994e0dc1ec3855b18a0a59c11efd4667ee06bbd5ea0db6f08305bbcad504504d2a2d45b820b49d184a0ce4a9a4f4e5bea4e94c097b4871ea8c4a0dec116127556babc0f095d2a72202989f184373b97972097492995cb97635800f4892c1a52b9878d8c1e14c522dccfaa06d2d6d2a5dcab0f2d0302acb6b7956a3bb7574e38c4d8b67e3edec81000000b00d03125c4326064dc0c38e73e760c078ef5b9c7d7268ec55aeea295af91fd73558ec3f321a912c5f840dc9ebab7f8aefde4f1005cc60018c1f004cd4e4b9e1402a8f2c1cf54844b9542de0b248c66a5f1c0b7c39209773268839e2fac461dd7034629d75a62e47e67925028c5a598e501ba15b29d8d4a2d02bde204088fc874c427d640e6a594613aa810b21de377808090c603b906483214c3c49b491269ad2b1a82b31bb3904593eedc2c959be182e000000b02b0fa1b3e7fe82052c4b23dce49e312f829f280338af6d7de984c010628f435f7ef83a5e69a8c42a2c0e8167e118a51d0a1a58d0b767b9e2556e8b3b692b34e15676824628df734cada6908c406586af5d76a68f85e08693d6834aca208fd4215077ba448a375f02e736fc6856bb92e00b57f78a7a131c5d32ba5775bcc6327b22a9c1fb8ede126d44284c0a9bc6157a130bc6a16f60ac1dbd46c02804a2ea10afd119503976825eccb47a3075b7495b0000021c000000b02b33ca3da334232c699cc2c3b7c36e303c1ba26d95d4d882782ff8d5ce4481230ed9f2b9957628105ff7943ded1f0afa4de6a14325f930f88003dab53438d7dfc44f1182aa1d7f0b39de5a546a4063c0e0c22e941ba1b022bfeb9075b729619f38101acb20d429516a0bbe0e620d702815e5be792147c29f7547ba9d3854b77fae4639ae2838840458effed9e17559a926ce21730f1adf08f8244fe81a159e8340f04700fdfafdef9fda3049b6eec965000000b016a2930b52f799fe37c98b8e516d8325f20c0c9ae18ed0b6902e54276c316d240c48bdec8eeb4c40c29c1591d143fc4b0b542c291eff23ca5069347700c1a6207227da661b5aceca7a3b350aed704746f3835e8b0577a41da025aef1babebb2d76dade3299c2bc7d984509e621088af0033fd53ff4efb4ad84749470fdd6725584dc32e23d1e95c1572c5854b00b59ed01f367fa8de039a314ac972cded9cbf85b41b45965e57d3ad50d32e2f9099cdb000000b00fce360518978af03b69e845144f48bb57516e370ff20c2f3dec35c6a17d8c3dba621ff5d661e1525bb3f856eaf83b1c17e7e00e6625bad34587779af64e948892e31b4e84cffbb086472f9406d580559c48da2f190638922bcb304534f774eac64b73e386bcc32366c6a54d7691ce6105175b8a490b1688bb6efa2bf26d7260baf446cf53edfb108130cd3f734fd6e72a98735cdaf7963751793368188829ab3ff005b3436ab069d876ffd343ea19550000021c000000b007333879c08c38d0c8b993e886e7b74e54bb8e9a544b20fea7af00fde3153d03af4b17b45bb423a02934b4d65afb85bcea2abd5733220fc532d456e7465ca4bef79cf4edf8dfbd22f216e019f23a2bb8cafbf58c7cdc68c3078eb8536a81fb359df072cca462749a39d9a5803d4cdc7d0d61e5bcb8d76b948d279b02dac70cc4f4cfb3d3a7cabe07a5093ed205d955e4248ab7b98dfb8b4b058723a9f446487a238b589afcb55a93c059f669e48142d5000000b00bcf182143974eeacf533abe31ec56377d31aabee3c30364e68788d87bf6f8f19c7c2ec43e488ad3c6c63c242080b0ecbfabf7d04b8581909fbc232b01405d37bbfb4df976bee57cee875869a68ca76c91550b8f437c789dd1b5173b0cc3aa990063faf9d4c600b0d75fb7fd500240e7030046fad7e4cdb82f7c8c5dbd8dcf88a03aa35610c07888d9fa84a38a726d021b3b4b8cc87312be8ac32187269c83eab65576133a7735a364b086d87abfd3a4000000b01707e297f4d0fb1ea74d149c2c77566a96d926f2479d289784b25045683d440cc4b8711a39c6f48d03bdd717b2d42fe5ec4af1f8f5262852d6e00f0deb23c76bf2afb0cf137c46ca69b1c95f67a903309ea61484cc223d82e75ee9e6d9ecb27d0d2f01efaed2769989ff95fbfa66c76d0b078b48453e610d00f3d2391395264846ba8cc80e7618dfdbec09a0bdeaca492726e57349b64f0fbdf05478dd9a3ad1f829cf7374eb4be7f10391e01c8384e800000fa400000168000000b029990b18c36a22ebc3172ecd92d6aa7d04771a3aec27b5512c1300d1f52c8005561e4353b5bd24431ff0f6dce91533f6bcb796ff89db2ef2fe691bdaf358ea6362eca862806a43444b1e0e4c3aa35deea28542ffe239fb4d77fc098c8ac906d9f540f10a0bd3f7a9c852bbc3fdfa72dc25f520bf0d4651d15cdbbf8d791d8be63ec5a01aed79694143caf82e7273d4651689d9ba3c9b727789fd5f7f6ba0e1e9ae13ee5d4a616dd3dc5a912a9306dc4c000000b02da23d9588ff6610d4cf962c758109a320d31422bdd1ce0ac8cb048783da38466b149bcd4eebc46e40aeed893b5ce0c1c60d56fb4a3438a61be49898ed0d8c6d423ce6c74d8fbd1247c5dde41ff5b84b1c1522eb801cbadb7d8dded420aba8255ad17ba28aef70051bebfc42e762761f14b48a7e7bd003ee8a258c3dc04286703df628d3438b2e7056725be4340420d9259499195a9939a6b13eaaaa036bcf62584f039648276dab8b29573cff7f359300000168000000b003ef05cbe9576ae8d0d28bbb3da292e4c3eca3fcd25e0c767dd0d66f97fb7f3bde147b8b04b699224a1309abfca7750240683dc0adf0fecfb1c4d6a6270aa4c266280d4090b3a22ba8ade7849ecdb4b6b75dec6ce74cb14a38e4caf57d1f832f82a55ffca78f742020f4cd2f54d3146e14ecfb0ed2240432e65bda7bdce1592d59c2c41da5dabee977f1dfc2236baa46053b601e083397c0ed3fe1107f988ff307d85f77ce2ed9aa9d921c9fc920c5dc000000b002e8b105ea38122af6149ac49e489d3d8540ce84f0e79522d59d532a4bb34b2ce3b94ec9e1f55c251e12378ed75b9c5de179293af284389b154c3ecbe09a388825b06522a6e6ab9a11bbe31dfd5bd0e41c83d8cb2229c94d5f05385e9eee7ffe6d7f24d757def186cbcf7cd5a6efafcc0170dcaa1152f9228f509ad4e45e7c436a3ec9eff15ca7f94930e7b0baaac9f71d74a0d3eab03cdb9dd78b251534d9588f66c29cfcc7ed04c664064058fc590500000168000000b02e49041ab15d87e4ae513949ae9e5a0d995d97a6a751f2d7454c20640eb86d1599057590ad148ab9898a99f668270594ad54305f4e3aa2c7dc3f16ddfd3b0a1b4487893e4c5ee0ee8c984d7014930ab968d29612d21a8d00d4a783c4bf7aa8307e43554a3436bb4318adf37062559c342d9f40db1ea02c35493d140c704c3b0699812ec0cb42fdd74d151372e22ad113223ec09e2262de38c6b78e5cb340697fd8dafa68cb0ff250ae6e5b17499ef6f6000000b0182528092432c4038815d3d3bd1a8addaeb66bd5c188b3ec2034d07b3617393a5fa70cb6d923a3e0b9187a0c6dc8466793e7cfbbaf84b3cffa380dccdffbaa9bc3c973282c3de2de83663e241cebb0798bef34ca4bcaafad25ae531ba4ba2012b470ea0f69ebc61bc02e0e8af10b204f0f04bcd6084c1421f5d1cbd598edfcf8ec10abb8f7c2c7f78f149d1c545e48e10059e6d4a009ed513e4f7ba52869ad8a58ed7ce2a9e4fb28762cc90f4649528900000168000000b0100e754328b8341e566a0f86ba3bdf564149d7c09ff66e223f1ca42943477405e621ed2c8828aa16fd16ffaa1453cc4759c4666419ae5fcf204097819bdb8f75f55421f9e2a2397e9615e11372dc571bdc0f14d5483d2eb937e4bf285ce2c2b01b7f405d08fd9bfe6a3780d07fc431521deeddd956e394c499569bcb5a14478188c3665a2aa4281a37bf629577db83ae2667414959474b92fe42f199d44fd78be0ba29abda4278e26de3d51933a24cbb000000b00b5ff9a0f1c02bfc5ba27848dde697e527dd8e9e4ca0eeb3f6e2708cbc6f9d23f70823752c6781e4d24259ebabef09c7a3cd7ec14ee2e795ad102031da4a58dcd32de9fe1ce9a025d8cb12ee7ffbdd84a949e816bba13cb7a2bf0f8bcc8602fdfdfa79c8ee4c4fb1eb27b9ec06e5c0fb186cbd9459a115dd5f6a29c8010b7f3aae05f0d1b6cdbaf41c582855557612cd023b293a02ccf54c4a684b949e88a67bb9ee90a5803e26b01a75da8bdadbf03500000168000000b0150ab893fd2bbdf4641a8b7b4fd47c6b07145658a9af9afe4866d96df241dd473ceaff133b833d1979e31f84b0833aadff180a84281f1074f6e8445c259a588f658a369de31145ba42879356ee9105de9314642383fc371a2b92e0b57be2061797e3a384782cd5819d2e92e28f2a6ab61ef32c414c28c574f05a13cd8db76b6203dfd316c2422ec0458bcdc1253df7971845d5244962312b14da04c0ee12ed45a2cd6ff6f3b3c3f11b98d31b2165a9ca000000b01cf36d2c8fdd332b349e60a28e916cd99454fe3e18d6caf663b8fbe399d1ba6d37106c338f28234bbe58206679226aa7c5d688e36d27e28285f106aa0a6841d720584905ea0486a4152a7dd4b71bb7615a1be806e6b59830bc03560ae3a059089f4fed1eca387267f2030c67fe3b9971111e437e5feb8f02eb390f7b3989dd364aae9b46c77f51c62acc811c7ce236fd281fe4e6837a03e64b6b518f6564b73308e076d6c6aecc1538a29dcdf831a4ba00000168000000b026fe52c9cda50d4c01f946a3da967d2647650ef4c5cc85c861303fa82bf087a28265768e5d0b120f489f464d3b04d9247ccfc9c7afab8269168c6f8b3c22d34ebb024d4959fa8a182e853bb4b71c6000bf01f44eca2bda266bdcdb6becf7c6149b3d1d3688c66ac578aaae91047a82b924aeeddc3d2d0a7118423e2d07ce99ac51c5f6886ddea1b9bb2b88b841b1f37028370f5c301c5d07d6e7c869effb3cd6789c0e47c1c7df4692eded6082f5488c000000b02b6b49f15b7b6b73de700853c0e3fdd14f40412b791e19921d17e546e0d204cf3212c3819d4b920601039ae5c58386993fc4447792c108e7e58d886b8f4e875a86c74c1f5acd6f37bef6e40f5459c988c430d0b37141f3bdf281ea8bc9097327368349f8526dc3fc760ae3f0ffff784011bb24a231486bb24f1aafb1ec08efd01cc87f0edb37d060f8ac5cfb0c0f022825bb3385209fc149f427fea710cd2c1f8d1c409518451ae6d1d20fb83b55943c00000168000000b0156288b5bcd11a259e4b5924859e3ff6885ce38cb04756f5dbd8bd7b47c012c91eb730a294707ca88f920a2fdfff2b97807050a11cce8c1a0784c27f0a039e28820d58daaf88b80c8a6bc5905e0e342bb9d62f911ffa63ca3e7b8dc6f692c596e0427205fc7578e68608371bfbbdd8471686fc18303f81cbde6fe6a5162f1605f76f060e6321867b07d9610faf8d215315bb4fd3c83026b577c31918a023582f5235a86bac7047a0e7ce65f728c0ff4e000000b004a13a8ed647b8ff3e92dc75a39b82bba3e85c7d6183786b19ba60a3ebfba171ef48ccfabb6792891f2a47e2e7165e4ff0c52989ce7451492bd8674f810b2d434de4547bd762100f5abfd0271d826cbfc81f338b6b06d1601fc4ad58d33574b097479598f554700297764e47619d735e17ba85f76810efd87beb3eb60d395311776514324f4e5b8e9a2df0781f8b197b15a27198347f55f6a5bf694900d4c60e8fccb62147ef5b81bc0785374edd292200000168000000b02193b1007c56869fb1a2346afc28d97611e4b0271add94b4db565a73bb187fa8598b509db7309e58896ec8ee7cf8a87429cda9c13320c7fd30fba6c53178711bc43bb7d5afbdacd752edf92855a67989d0c9178a1338238cae06969be76fc04368120c9e4b23f40280433f85ef8610c014acc881e8398430bf19638b07af445dc5cd2ed99c292c03bcfbcfae9ec5a5402eea686fa533cc17199eed6cbbe4d8dda70818120202839698d3f3a3d179a026000000b02032df390e29f1c6b8614e58092f1722963b5f23e789aabe1e1afd66d02e852d0d9694d74ee55091a63559b2ba0f0ccf8332b6a895f2ba1d3b561b9fd61e285db40eb02765ec972e00b11d484c9379693d6d87196cd31bdab29dc2dcad804fb81ad74912db0ba044fd52346bdcd8716112bd02be4fa09f41765469d55ffd77e4c6ee56aa88ebcd4b3fed9b7d1dac07fb209e71643a723ca3ebcdcff710ea7764b11b22faed302cbf4afdbda943cddba000000168000000b00faaa02dc57603825bd5f12fff2921afc735e98bc0159d99794677c263792ddd9375b94a053e683b22be906c80c872db10c9139617a68320f0f6f40c62663a5fe0fd2bb4407b4dce4c966054366d8003fd866ca44442c2019b7546d2419e59029f2e95cbed5246932499d1a9699e484023fae61ee1112bf276821c3690f334dd6b2a33ce50a2c4fa1f6280dc8e65e22b29e05b6f12f3b9118aa2b883949100caa6019255cbce4082d7ac8e067175a671000000b00bd33bf9d97d98b3331c43087c03f197ed645699250840f55c0b8b3759423127378fb0aeee60e67a9c8903e9a3376a507292712190a48744d80ca6e0f06ab6d7df60798d96f10fbd20d02d5472006da363e0e6fae3824a60120f734aaddc9903b877de9191b823a4d5a833bd5f33739407f06f3f7afa800c3532fb8d629e0e519461449a84a1ad4eb2096c3ca30c35c82570848135c0f7e410c81665709d6585e63868da01924bdb1f30542d738fc3c000000168000000b001acce755e1f887088e8590097efc785d541537ebbf15599059a676205d4847800e7a5797e12714ea5e407c0baa6c856e03640205163a23f4d9f59d25e105cab465cc683cfbdf1c9c38a3869769a5266f3e998920b9a0fd12b3b79a84fb0cc06fc5de40e1a3bce677d614da30f89fc5e21615872f7e38af72c62b831b166495ad408a490cb63f8db3745d346da092a4915b8a17c4c47db0dc671611210a33c8e4f0933c204157373bccec050914c1c5f000000b00caffa7993bcc9450f489d12f0662b74517be8164c9f56674da22bbb254c52026c4799769934b93f89d115e220f2ad7a323b6f65d4b1cabb4aa019160b0ca8b6daf44874b7d37b66477879e379705d38003c4bd3e9b57a0037f19a956be3629568a288a2253fd0c0806b015c09a7de211dc55441ffbb64fba69a46d4aaa87dd2967a2a6ebe4ebc8dbc59ea44352f52702e96fa6680fdd0985900f342e183a84f2a8068f55a61ac835dd78a1bb508e5cc00000168000000b0031765163bd977018ef88e8a8903b30581a8e7464fc522c2b131a6d4b2d30caf82fb219505f9439d9011384eaa66a3b22dc7f532f578fb18dd2195e3225b7c9ed494fddbcea225fc6919b9341350dd726242034ae68103642bfbade49881a4026dfe03fb00e012c77fa99aa1716fd519252263d042f2d5d92817f9af2f4e5dcb285490bd0a0cc1c793d7e700fa21087c1f8116df5f466e6552b26a2f97fa4ac4ff319c6da49b219c2be2964360dcfb5f000000b00c5b7a2ca497e0f89fb4ce1b9fae8d0f7c598104f79467e39d923ce9981fa2456f39215160af5c6efe5bf85c63169f18f31c3035f236a6140719756a824f703e9cf5fe38e25be71b46664da7bd0740d95398109dc9a8828d7bb4a02b9b8f7b4884c19bf07359a5011a56b85001b27b352d47b23140d97b0f377276820a24e3adcacf9733a476edeb46aa054e802f5b521b9dbc0a7396ebcbba54db250bfd919c14f3446e986f83f3f5ecc36494556cda00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00479c1be9323601bc381cfb4bb5cd436733fe4af5565330a111ff97894cff2e1ffe51c9943c20077a5cbcb69194778c034aea9c992b62f5926c173229f669fa67c60d9d78478c578a823fd2654fdfefc0df1ec683664cfeffd38effaccfef418e9a2bd7dc7672bdabdaacb04bce2a6060553aaa0f0f4d554a123ea12ccc64adc82f4653bcd46447e9abad8c84d3b984b291aa322e76d2e821f4fab6493b9998a028745bbc8368f691d666d3c014b4f3d000000b01cbf564972cb1064fa04725bf92a227078cb3ea77fee629248bb2fde5d28d9f1b060e288ec50f1ef93e4f4593cc0eca5f506ac9db008fc312a0c93fc56419fb8ce69627cf47c7b8a9013a46d4d5b05cd078d0e89a9917f28023d618c2951420fcd9a5f1fdaae492496285bf301888efa1170a94cb7d5b7de62a4265ecb7983402277fab6b13634782ea3398daa0d66021f1180320cb0b459dec37bc6dfb0f6b5f2208cc3792200eb2dfa94cf37d9d364000000b000e513084ffb2b09c17815c886fba848d4ab2b13a4ead5e046bfce4fd240786c482b002b02a1165845f134e934f69e36fb09169ce5aee3e37ba8d111ca7ea9533e38bcd2b82af9caf741602e777c43c6a1fef58e186cb3760d21432951372cda53d10255a87125114e36e3e17875b166171bf01d1c1ceb9183aa0d5824fadebe29994392c53a083f30d0797c1c4604911bf2ecad029881544e6f32872cdfb1b699f4d057dacea56650a4a8f5ab10d70a0000021c000000b02c83920dc7f2eed6d9eba1abd9b70b2f3e06ae70f2fc5cd54e3b7407ed26b18168ef855ab7a4a4452e9e13c9eb3ee22d40c12d8a74fdeb16d373c6496603e8f997247f9b7aa19e2da0ff28e0d61ef722267e29525b4297c7bcae3e4d667c1c6c4d4d10e37a5f786d626909bdc214eab2062c59dac9e6116ab4d0bcfb7ce497a57bd5c8f6998f226505fe5a6017fa28ae29d5593ba0b419f8294c0c1f9b271524b262c5ed5734b87c5b7794e03d9bb595000000b0025c058250c6dff33adde16af89440353311c4e689a83feb957dd6fe31f9332b19b0501e8dff196cf5d4ce722063fdcdd3f6d71b9e506a0532e81d958da9a7445ba7c0adef93af6b85cb3889a3c81f9954a5930df0a71b683d75a2874beb65723f59287ccaf373ad8107b812506488a12797e1903534620e4bf07b5ddbc2c04f0186e4f2950e9c8c89999cb183e2c0f30f3e9019e442e4091ba4cc3241cfcff0ea873c8abfa6ac938a7a9414349908e6000000b00d91a6fafc512462293ce98aafb4d776d304961ea8e62224c20610ac7ec2f3320072a538f97f96a300f400050d81d1c8316ae226436e12921ef9b73e69e0bda7b4d30f33bdeab3d3a370b781c2eb0ac530b0be1b1577a5217c0b3cbc66cfcfb09d0c3abfad5afa1a5cb14edcbe193ffa05a399498d6157604792bc1d866f75635db89b1c1d38b7926534e2d2122aa4741f60999b10a551fa42447e3b789c5547efcb97ef893b9779a44d2ec9c250dc710000021c000000b0257eaa42923689583543b0137c78f7d41c0e5421516436bfe8dadf3c5218845d9ec30ec0011867779daca30f6cbba29098cd1c6f827fc6aa770def70ad5dee165cfc932e127b4b28fc824b20719e5e7f72f1ffb50fa9a0caea1732dd887942698254e1502615c89b6adc25f88945451405d0381241e3a3229f07999cf829cc13a60a3b3602ab5b09e04d1232cf48c6620117819352d289346a17a791e4ccf16b927fe46228b03a300baf99f84624e6f1000000b00b68b9b703cba726932aa1a52e87671bc24fd5441a72b8d2e7094ab56dcddad3c2d0156fb10ec15e7796a92dac4c2b8d37b36fe2d2e4cdd77fbf571bc51f8d5384f0aab5ed924a13f2de201434058f87bf74614da2d806a662bd1dbcd9a0bfaa2e7540703e7e724057afa6a9ee91dfa808d28290e91c2c4aceb199f1a5b8eb264b6dfc8b09949b7c50532f8168fcb70b03024ce43541638cb3e203016d315f94baa2b65c0903a060b5dca2845a3300e2000000b0211735a86a4c2f0a0aec0d42d867fc94e8b242e9cee59cccac7a38ca860f05bcc59a537d4a9262fac5100d147cc0c86f275be70bcf7ff74b363f7f2056d307465ea1c6d6c67fc85fcad555157e5efadbdd9b4ee79ed7736549ddcf492567499f4a9f322d8319edee89feb93bee1e21e80fad38f0cb9d17a69d95e4a521aaa00b04f3e8761a09b4a0a84eb1e2789128cf06d9ff671fbe0edb673a996e6376bfd41cf703ea63ec2e47971ed23422846fbc0000021c000000b00ef2508e4a60d89bcd4ca31afa8c6ff06d72fe6ed0316f9185db23b849e09fc431373f04d8827b033ca231028e2f51a16e74000b37af7e4715cd490efc475c512a4bb2f065896e1621f2a7951bdc3f106bd94d4d9c28af1fba1b4a8f53aa84ea336912454eb412950683f4b0e6a01af7103244711a93accbb0105865b638be7f481829340ad4a5eb36a25de21b7e927c003bd42089b2b135bae5c3f778b822c0746d0c4491b8ac3eef7be5b174c1c2d9000000b0114357a742b09cf8ba18269f929ba3eed9d5ab5224c616dad40188e9ca819f7266093a2afb044363efe17d354d92518514c655f1c1c23fdabea9dfc0f822c20dc03d8f96dc1538cd513d01d2f58f1e887aa5d7f0606474e23f5c9571734bdc0109fac4ab9321d3ec49492bb0b56b3e7628a42c241acab6d2f5a7ed0bbf8db439da95505bb11ecb89c95ed113daea89ab16dba6473ee02ee006098c3fdd75a525595993c74d5d20be31137a71c5e62d21000000b006285b593f99d01d5c7fffa5a5d659c3a29a2074f77d386bedea159183ee0b95a2c997fc80b02130c5c8a3c85af4a8e9e30579a69117e28451099a9541b0b86aacbb4de828e04d2f6acb2ad2c04366a3279918257bbf608871ae846a032e45dc5efee18d78e9ee4f1dccd742e09b80b12ddb9e7eaebc8560ef990f8b5e5622dab1c305e68496e73ead4919d8d94a63d00d1dad4796e68cfc62f185d24de4f05ffe3f4ec0b8c29d4d767bc5cfa52aa1650000021c000000b01db54de7e2178c1300b8101a404856482669dd5367bfca4e657071bc08051133addace29d6ff3c55b252f97d195f533d63d4005abcf4084c2320603d527b794e5ef119f785c87f56f732eb4eb055898154bed02adfb6c93ebb5f4d77f28bf953b7a8c7536d6449cf2995fb705d9b78cb2cd3fe4bca615d12995c7f4c4055acaaf18bc422f0c07a9af4fa20058782f3680bbb75488247e448c6cbb939b061500af2ab9a4164430d701295285dcc2c75b9000000b015b852352dee308df1348fe95011b261e97a9ba57c2f68531a089b95df7b7c96fac5859f1a54be60dc41413112d3568dab1dedeaab5c40ec3e5ce17169e421d48e81417bdda6f3a9b492e6e21547e1c86080b2a90301ad732732f41386076bb8c76a6ae8dd592657a66fef958fc78e111ae68ded247155b31ea26d6273fb1765efaa1ebf8dfcb4474404842243446f35124992d551426a327482c2fe225e2e9ce7e4bc5781b7c47f0cee2d73c8aa773d000000b0034cb617a0125391aa2602a4abece6148ac2fde8bac440717e0fa0a50031435b1df9a4a88f1796bbd2f2f62d4d4a0f3fa55ed7c3d5ac104c6d1a5f692eb818211e8e4c2be6844930b63bd5a01a73dc2214cfb82503f01ae83b9fcb347623eb496a1e4be96f9f0d60ecd2456d44a8ce76108233a3b5883e8650234ae81efa9d4ac18ac486975a110970a86cad63f9fe2f2d202172e34ac1c8ea62e9d2b3674314a556cad88a0efdbbdad2f51cfade77c90000021c000000b02bbeffa581bca906775bda3a296f1e0212178751435c37b6a5613fd602bc54dfe34f05019f886b1e9f5f616294a9ab8358356ca8e46da50190af411349c65d0c8a9bcf3abd2cd35c508ec724c17a1b193bdd3ea827fb917c0c9d29b719b89f804226b928f0506baeb550480315268d3b1fd7bb5f80e7e9acd40ba4168db2972c3fbe3a17eef02a37a359772687c94a1310aa5729febfd6c382b81ec37b8fa76f2e45848ff571e1b651c9cb46bb1fc842000000b00b7b2bfb00e1a2419532ff16e3ef8baa1900fe5f76e26a3854509063a6f71c417ed492f1eb912e9c2faa7f2a3dcb6dda87e48d298fda41c840ec23257d6b75825ecb22aa663bb7b36efb26caaff964f3eb2fb1683fded171c95a91276e22554e42e3e495864a2e8ef9cdd230944f31c708175306de378308dc28b502bef2b8f9c90f48a7b848279456715ca4f2bbebcd260e227e60feed18c25473b4fd23227b36944c7888e5862f2736ffa740a611f4000000b01979e57a329fb2c27eabf25ca7d2331dfe8a1088b7fce07d59a8d572e8caa4966595f33865fa1266defb20b694377e1d7adf85b472d73eda71a640cd47dc0344082801f8ef871cc7cf7da14316de66ba0c0a09bf7c1474eb42b1a28a94a91efb7cc0b38126aebc7d42f260bb3809401f165036f9b128529d6fb2247450e0ef08abf543cb27d714fa7ca1062c50acfab82d63971374222472ec174ad69a66278bea1eb68f3fa1d501d7fb8e25b91d9cd60000021c000000b001b1774e6a6b48325e120ac971d414f090cd2115c44327055b7e4c329c60326dc4f9377d8a28a1791672c37a0cc730eb47724384a527e215e261aad49bae9beb7b51d9ded63043f2f2ff2139bc3517b228157faa0af61b468b0eb5474149701b195de54214dd2ee5b7c164feeaffb1ab091e44909b8cf164abb10bf8ec0b8d50ae4af3be7c7174b458a47bc435bc130c3059509095ff7f22cfd231373809a0210361efdfba9039b38aeeda6cc8055945000000b02d45818bebc1e112df1fff5fe709fec62c66aac1ba2ac1fca72b2a3ed73e48772b2f439ab8d7f90f8385e721dfddc3556d366509a118e67dbf44c0a416fd350c641aac466edb2af3441bc8cd40eb294f85fe18d954ff2555b963c9d80672426e79a20f61601454b63fce8cad41f005eb0864a7901c060b4374ce3d73225b19971595ce0c3b0d8db338eb79e50a1f3f8f20cfc822e916d10d5c2b67c95cc994645149e571cf0643d705649cf95ed981cb000000b02b72ba7fddfd1c5a9a1fce8edbf91cf0800e24d836426220c13f7bfbe83ad3751ece1d2d2a5574cf364a745c947e8f36f86986cadd5d2515e1b42018f9420d109ad2025478b341a2009f86c90d52d6f32d086ab2ab0a0ff483301e952624108621a74b05d285d0455c4ce0a0c05ec387101dfc356706bc419897c01e3cc76b6f8976170ef04bb883c5e33dcaee9c695709ab7348f30c85a2a582f3e2085e0b3b3944442adce966f7d9f5dbddc1b428bf0000021c000000b02d44eec53a1f2a7e0aab0d73e82ea1779d90914f4689ee3c2fbd207d62c98a3565f1aa56344ad48eaa3c95e5e6b9525d6e03ae24892080eba79cea8c92cb7744147435933400233bc01e40dbaa1678fc7fe05c82de5a2f4b695bbee9642b76b39b794dfb5cde392bdf624f51c9ef6758155c5c8ea8c58b6e9252973356390a2ccb995833128c22aa6f015da14f9c1ce52aa331b4fea0f408bba510f7ce03735acbaafd7b1bed393e5be927c326a521fc000000b00d2a456536960ac7374b31b5e98bde005d2fb87fa293ec7fe97c1ea4faba7ff642e30f569e7ee770bd75a0fd84045cb3841af1f364584d1a8ab17fb4f69d69d7d336c524ecba7889a9f2b386ac0203bd51a90f2d4b587404ce1e7de320b0aa71cd064c2d1a9d0ca801824ee6c03cc16003646919829544d33644add55c51b408fb7410ab2690e175d87980ea8438547829d83f1669478a8d015f40d1d0ea43074eec4558728004d14bd3f032a56d9762000000b000b8880ac96a9184e80e0592155fca6d1b01e293bba979f5a759e948e8c736e587401858b8a70a6ded8812981c03df3f23ae31d7f31acdd996cf9a413665b12bb5fc234a07c29bb218eddfd5ce266d262cedbd0212332859d83c81e34e88e331da9f2c929dcdd7ff0e021493feea411016de15280428046422f8aaf74c4715a98fdefdc7ef6c8f7272d7fac7684101f51aaf10e9ab4f560503365a77e54e92974299fe250a96b20838177c5b6b487fe200000fa400000168000000b02040751d62b87bd98d2713bcb358524cb2ec5c813bf2c1cc71818e147f36b3e9ba61f1c6f2f2d2601ee131ebc8bb9c6287a80d360b3f4fa85a74ec10a12baa9b1fadc503ea33fc1fdb75965f31e61ecfa19ad4b92e48154c951f0c9b67190c19aa4f2bd793cff17bdd6355cffc082b27285aa7c457dbeb055f35c11a23ec2744ca0439c020f6c173f538f472128524bf2d2274a14765ea0216f3dd87d6ffd02de631131c90c48f38efa3d210f393680f000000b027b70fb8fbaf57ed4cf5bd233d2d5e9e038fcea8b0362660d3a2838b71d3aa0ed8ef67e9df996d998ebe1d5a94186ce68683443ce8d84306d710b632a5e22bc51ebb3e1f41f480a24efe159f700e8e22ac87b4c9b32bd1cbebe3ca3d66ca3f2cbe7f3e9a6837a9711be3a3a6d99e04c115586ad90c0e40dbf1a507b56648e647eee76cd9df3f63224c989ac92f2083790ccd64a6bf67a789b47955bc910b5f51e3e9924db928f94977d4900b92968ef300000168000000b023abd9ca0e4cca827fb59eb012474fac62f137202c679383477de63052a50125b3f640a0143b904bda5c99a222168e6523c8de339bf1ae6c8d424548fa6b354627be9c72c3dd73817e4e3a9176b571a3a65b1cddc0eb8d8f1363e9067f63eac7cf2dd48a18cf89e1fa55d75bc1616cfc29dbf81615e4bf528b2b4b7fba97850ce929feb63730b3230eaab9ec574864802fe055d6d95f03fd87dfb85da0ba2ce4b92080258d3391c8936de60415c5572a000000b01d4dcb52850927f5d168fa63eae6f3c30deab53c2224a38360f2a797e5c3aaaae17ff78f79a1c43929bc17bf58173c84f45a5ba08e8b72b71059a7f0fb8998cbfb07220be6bc4ff1c3f817e3956ae5b8781e0c27ee207451bf7360db418d3f627fef00e9f5a34e193c6d30fc605cc15028465ec8e4827efe7f660ab00384209bd2e41587d038975d14c1b29af1c06bad1a6484ba4326f6dd2c727da18c770a5178f951b75fae47e1011ee626ee421a1c00000168000000b003b49fb3abcc14372f256da63030edea6e2c34ff2b8f4929093cbd9d593ec40082f9a63456524640678f57f3eb1c397148c4d5422eab07c57b36e213fecad63b2629a9d519829ac6a10cb554aa7ef8df17885008b3132bd21f1105c5587dc90eeb82adb18e3218015a5b0bc2fe764b30272546220c63e890bf36f02a18a360b3885098fe256f241634bcdbb7c212902710eee4f8ffe8eba12f424070c018327f16e53308569e500988b11b9cee1ebf38000000b000b06aad91932ab08849f3311e131ff8f54dbfa59c0e5de6d702cee806bd3a63da81a6f7ca28ff1ec14be1a050b923f1964d3db5ee69ac58ece6883bb8b0f77e18988aa9ba996bbdc3208597471c9e59a5948b5f74cb6f276462d6b08c3c45f4439190d19c33674cfcfe427292aee00f1e1fa471cd95314f77d3778a19ba1d6fccd8ab8d69b14123c7c02f361484083d045fb1bdaa114e0ab0c40a979a7a3d998d1b753fda2d7a484a968283738c2c3800000168000000b022bd82350cdcbcda2793ad19a3c28ab7378e5bf6021b99dc6da8dc04fba44e5ab41a966ffd5ea573c758fbe0ab3cdcbf0b764040847fad005714cd1047276acb43b1c9a866e1e2932ab5e7293d4d68c52a85ff58b393b6ba0fbf94a3ea132c957728c96b11fb79fe45313e4d835221db1d6a34d535e7968a98fcf1019d5749598487d9d15dbe0a53da241d110e53e91402b84e50e1e40ca2b79078b035b8559622d74d7316897d450a161fc8595088e0000000b00eb7eeb7509ed3ea471d85caf02476a875a99fab2046b3801bb89acd7687f44039ed1c2bb2bd29f4624e7ce7379167ceddc4710481949655cbb37840f64d6396c09deb528ac6bd939646eadfcf3f25fb0328e42a69408ae31b1ed680c8c1d010fe716c0dd0fcd73f17e91d7a14446cff1b4047a5e40dfc94af482a65587ca88b00df1516e0fc427e3ff3b6446afac0610d522d82a98a0239f333d9da4436aa988570e60c38c3a24065365efe44ea17ec00000168000000b01906575d77cf7333395067f309b7b137c88482478e3e44f240a847f052d3ab19a55bff8e95f97ba5c9f5a092f49d437100b268a2ce49d2298a8dd4b449a8c372af4ab30121c7e768e9a3c4ce1ba38fd3e8c5537a5b57894b4eae9b9377b55bdb8e1e8fa45e8fcbe44481103d8b95a1822be8e790cc76943d083617629655383e88352e638b3c6d7d25edea8bbcc3a0120f32909021d1c79b96576bee489ef1ba5c2d39e3b5abb12810b1b805b4581dab000000b02a0d7abb0cbe256dc2f13ad435566dbb26512e191351ae5be0ec20b4db4995563c77aa8ecfd8260de5743c788687018ed54a8aefeefc515b4d564b6980376721e057896f2b6535ae3708d8fcbb859b5cf57a7ec03e952febdbfaf8b004d5883a82f57bec69e6a4d8f916285082ddde242ca9ed4cd696cf43c8d37e0d0676c6f36b6e12dafd4e6e8ecaf1ef683608775a20768901d3f0ba616d514b85d5383e6ee5a21fae928dfe9f12357504388a938b00000168000000b01de131b1776552a0b946c0317cd1ee5205ad03f350183305bd4852914ac0bf107b64b1c7043ebd5539876e3031527f5f3308aabe1588a98e60e76ef14989dfdf42103ac566e2d31ce4417ff69e2a7da9c03e18599feef53f477feeb59f871ed202ba72cab0cdd89e8fcdd312b41144992bf210839c120fe5fae5d591859817d3ade23a79fc7e8975e6ad8a4784bfe1991c4a0ac5d7117c4a4da6d1e4d228ff84753773991c64475844731ef43a5ffb6b000000b028e4ef7cb76d35b66c5207df39cf2fdd2ce1b55c82570de2d3c930064648546d1add13e8aea834c319069755ff2ed1b7ad1a40e2f046a7bea3be48616cd63d775799c11510edb60f8be590ea9d139add98bf7b17b4cc4f2f56a1c30e88a57436b69599bb6042252ef535ea0533d6286f10da0acca0df2cb29a28618685b9cde1a0aae97cb1afa292aacaa1dcbceb8b85233ecfb94a8a9e39a303eb7d3f889397be2f50873c21650e903e9e248d88361f00000168000000b00b16c4fe42bb9f6c881c83546915c589db9aef6724096575b4f71ff23b11f84703fa423abcb18ad9b435ef819fdd8a6bdf6f742b52248067564fb94816672a73a4614bdf26638652d9f0923a88158e35032f02e6375b05b91eaf24b3a76a2e518507f89116292e87e0d3bc97bdac489422f21d36db62d65fd337122cdaf83ba935ec4b5d0c95731957e82a17702ff7a41ee4fd22a79c51893680191ab038fa3da13deec7a33547f50d2ed27753d5e711000000b000d6e8c7416079f484a74604b80be94ac98a0d0672efa30b07a147529bab718880904fe81043eb7a16dafa4a450118d7a04442f8fffbee3a4ad08d540f9d79da62bc1d2484afb9e63980b57a386d2328dc833026b4e41899a3de77334325869d232e68ac06528bc349caf63f82b19673287d0fa2a9683a7750de4d2f211662aded9521f7b7216cdcd403983e977fc07d166abad8bc1d0430a35365c0f3406fe5e86387fc911fa5a707f87d3b51c07a4100000168000000b01f74815ea6117f90a3e0731d92d39cd6e6697a973367697904d0b37defd377bf8485a700cf7101e73bebd7b4f44c78b4967b857b60f424738043748ff35fc438b6953bcc343d5503635dfd6295c9e91645ec39b3d5748f9bcd3e5c3b91effded52cec1354ae2e877025f6304788010681a6afa97b036965801a3baf7cc1d830562692733c13e713e78842aa1d853faf9126f945882ffb5b6ba532537f229a4894df0732b034a8c127a83dec8abe9642b000000b01ed715efda5495421af3dec214d4a7994c7d47e693025bf70a1e8c91e27589bee889d0aad91c585d90e8ba6517be9fa3f10c96ec1846196357decc6904866e8e14105a44cba9cb395eb081a0128886bdf12eac1a16b43c3fd5eebfae318a14bcd301874f325320bae951b88a789f11ab02f510f8c420258f08899b7a6277cab9fe6bb18e4fabcdba8a4635fb7050eeff23e9fa5153cee0b355b4357a3b37dfd1435caae2f13baa3b3539ba239c65a60500000168000000b02562512a85bef00476abf2498c1720c7e3ee4acf81edcfac888cf527deb86216dfa23dff14daeef49315155db4e9075782ebf14ba4aace3308ab6fca9ad96fdf6dfda4476eec983cb88f824054a6f1e2a65d1fd611a99860725fdea7719c7f93ebdee5b5cd2d9e4a0793fb846134cdfa1627f873e7c11c8cf5e8c41cd8c7323535f758a2129b6d498c6b867a3d5f1ba71148836b75c76012b333ef786421f4c8d0dfa4da6a6248b8934ad5699a56a855000000b00e49fe37e3380cc6e036850efa8cd0f80f1d778d0168cb3bf367d331400fa6cf9be2d750f4bfa3f79b119c4b5c4b881cdd4697af764146422406789f0b9a57edeb32891a1cb45eb000333708e56ee3de863bba7b57f2662d7c354c86f90d200069598fe582b917d9161d70339cb8282f0def25d6aaae8192dc22befc6a129a73c428c6a4095812ef3bc787bb2cb547b9071678db16b1717b43ce6b2d6bf8a2f85d9caab75e848435d32bc857341f6ec700000168000000b016bc244a65c120bf5e833c0611245d6c68393ec6e707d2fa72164b8e680fa2e2f1dac4ded9a4acdba9a72492d012eec16feb1ce0e10e6eb11a9e4b313bff1e270f4c03e6952b00a84cc5605855f10d87ada4294a9c5b5a9703bfcd55f023d2fd3cc9aaa6cdb31bd0fc11c10055caf3ca0128d420c49577e255c155a6c148742175e549341dcd83645a22b641d09470c40983691524624cc2f467959f78f659481336ee3aa2aae365ca690e562f2989bd000000b01dfcdffcc9a4c8d09586e578e549900e7104f87b2c64c2403c475c0d9a6c63ef7f5a003bd4eb628e5846bb6a6cb95803b5ddbf15c176bf4b858c7af0eea8f7991c7e75c440b0b10ad1d19917daba90d10c63036482c0cd6a606d6ad137d0b9737e222480231b55fbbef2f274d8ce8c57093dfdade3d73716e37cfb43b95a84c37dd57b14cb019ab245e1f960f8df12fc1aca4a10a419a744c4aaabb3b697984f0eb9bd518c02fa5bac911c5e6224410e00000168000000b02b4b6d83d1d9e14e9565dc3f09963572338007c7e6d3d729b7af39a274800e81b3f52dc39f9235ae3ea81c52c7e26b5049485cdf304edd9beaec3ec0b2186d5fdbb53e75cf950953d3c3e8bcc03028c4a656b7ce0551cc2d5482a758c420bb6f1b43f3f6279b2d3e6c1b07f73483222620df3c2e6a0464e6a7e40e89e558cbb6b0675b1e7a5a1d84c005fcecb06b3779142983f238f4b0a1921604338cc5860d2d651b5a83e98743d439ed211a208253000000b0186bfcb5115255107e585e3f8ceb5a98345442bdf44a29a5f88b5469ac6fa5200093f33fe1e532c3077c6309da17ea6338deb9de1436b6c3c455d621d07450fdae9de96cde038b9b507365ae366a8bbce296001ac7eae6e21accb8d4e9aca4ef02015c2c81e4b86fd80d63e971bc27c613964d8e259ed8e371f1a15567fcd3ee4c66c35934b50443700e256780dbb08c1f520718ff33349456c2add9cd81903d316298bfd102260fea361dca10516b3e", - "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc", + "archive": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b01f71ec5b5c2293fc361459339250a294b05961aefef5446f9572a26bf7cf0418fd3c2bf927113d9803d211429ff46561bfc96b46135d956c3f366be31762015185c9f4e300fdf0973010189346dcafb4d50340190dd6815a1c05e25180c9a25b0e163c23f3e115f0b54a280f5cd4b0401e377115871bacae9d3e8f79515daea2ce3800a7ddc46cb223d560f75e10a6dd0d1b8ce7ecb9122d831e7e1587c4bffeba9b1bcfaa909e601ad63f82b5bd7840000000b00fc41764fe69cf93975e96cb957d6ff5ec259feb6b3c9792bcd566b71606731b97019a17048f88843ad29a1c0b008150225b9971a84fa8bb8d6738862184a8c8df869b288088484aa25645076cbb4b5c155403bf8aa41af248881223c22e2a83d3a574d1faa65d23078f9cb8fadcab32040757bec6481126fb3db1a09fe8be3ff13ba50b46f92cc37def616a1d4880fa208acfb84f20466eda0720fc7de75e1aa22e0a717b7699a4383d877a9b4062e5000000b006992faa8e0e87bafc477560abfd3d13536e49e1a9698e0673218c16ad3d99f82b75af083a982e40188c1d0f13cd7547c25440e6f9b393631848e513421fed037b230467383b109fd9936b2c96b8ee3ba63d8202e94a83c83a7506f2ff7dfc7cd4eca941dd7b70fe66c70cd315c9d1d12fb953696afbcd1290ae46c5af945fa271406f6ed0d4f766c9b1f27ff66a7942112487dc2976780c52dfc84b7263467a32adc00f81ce64ed6792f4fb12fae1f50000021c000000b012856bc6cb2f903f4e43c65586a6036dc65abbb528e60732b54badf61aeac47ff8e21248ec9f211dd7bd2e3cb4c2937d6e318d7fc0097f2de9e871c0077433dca261add840edf43d4c3aed215f23aa4b511f75faa8e8c1adccaa72314f2bcefa25bddaa611733532c0a230fb5d4a8a881ac57cda84f569fa37f0fd838ea7de8da8661328b258a573e442135e025dfd24088f4f98529167da8e41b3ef3092d92224c8b62f609409470e98ecc4b81008b3000000b002a9d921e0aa49de71e8ef2ff25eb658fc2b00034146174f3db9e76f374d22a057af381cc9757c3557a4e7a694dafb74d23cce3d16b2e331297bfd3475fa8073dd2dd94ecb31bee2624ae0d6e529886697340ce115caed2cb325764c98e6729efca24202956eac1f881f36d4615f2e3e271b05c0733226439f3374ae19a0be066a45344f373b1dedffa2a6f31d92c0e91b9c8407e4ba2ee8feba5b573c532fee5e877ce7602c22c8503fe3deebd9eaf3000000b00aa5c18ea087706af3c20e0662ad300ca120635e39a199e67d9ce8a7e8d5c443ab1c2b5c294b478b8d503330599f296731d6e62149cd7defe27dbaf2dfd8acf9ab68c06ec0d27229dac5fa836f608ced2876cd135c089f6cf9128bb434c7bf19cc3dcf5de2dbb6bec17712ef1e1f81122df5b29841a7eb7a1560b4612c6557131fc75448f9a6b1b3828e4058bb2e4bff28889cd7c4dd362d7cd0b53e40ec34a9a5f52aef0ec90b2dec2ea9b16a0d49c40000021c000000b017a3601a7fc9e0e2123491f31e4af06436912455291e7fb88e88a9eb2843e1a8739f5403d68d785d18aff08a9d93c2b9b41909d326df1cfa611c0bae5bd04d79604e8f1171be4defae6bee01a4af1c20afac3a58a723555dbc211cfe81539365683a6f763ec849f0267ebafa8a9effbf0d54c44f6207678a71bd92f66b778d859bac328587829f09e4d36b8d148dfefb25c643a241f9f307ec07f3f41cd09444b28b35d030c95b01d1801adf611910ab000000b0246c17e033e968b057f009fb4d1c4e9d91005f3febd36f16e453615c7c411be42bc3b3496b7f3267ab475aabe180ba6916d8f0a7da1a18e5fe8d00d69e95a0ae9a4d972f027857ef3818898ed9709aa2261cb8ae0a56fabf2e35ee1282952a962ecb0771df5fa41ce6655cf6131a7c982aad41eccb371c76c2f837318d747f19362296ef35dec09966e23af4a8e4caaa0a4c9ba3e87f2672b9ec7e78096913bb7fc66a6bfd2b1671aa87cda1bd9ee867000000b0141ccecf05e04d31964c4c16d2ca0be65047d1152662fe7e0b0e45766b8324258538af3a149a2d5c251be211a4f9863ec17adfcec419cd9f9b2a6eb92396da3349e4ad43bc7dbb9fe3d92fb081bb95e96c4352f277bd3f6e0d6348b3daebcb3151e77944022d27063da75d4fb9115f4000adeaa479e2eaed678af7c36f3f42257d9bd241c51c7ec0d0a0d641a77d8a8a2ba505403df2f461774b74098726ad5b7b085e2bb37a89a1414ac944c11eb21d0000021c000000b0164a956fd938e14f48f2f36912f3cf2e56c8df5d3330fad09aca62426e38adc76c4fdf5728e954b32b181c215f585e30ed87bb3a0a6dbeb99e81872aec0acd9ff1cbacc3943f5939283910cf1cd5d0552df75c09315e1051679c5d458851d4f301f5ce15e4be094340259538242584561403ec2fc3c921cf80f8b5c0d0393da393739ed85f9554e00504e3e7793290df07fe8cc3decc120b4e504b3010429271a4ae030f8a21539576e38557cd9c9744000000b00c34ddf5e80e8ce04734bafeb10813e31b1aed5d8dc38ff49cf7d4b59a5e052592cfd188f63232bef9c36b4fadd1800361b6ac9ec5c676812ec432d9b7e46300b72dc73cc634b19f55afba7fda63054bc6965a0cc74af7b322b37db0d93ffe4b61975bd37bdbcf19863e926fd2b59f2e1585ca5589aed4852f3cea64cd12233566d817be0baf696ebfe96c4fc68a253319be781154f53eb2c6b337d9cfd8b859ea09b8765a664668c4d1a55cabbc9b84000000b020366de2612f4ffe609e02136635f40022efbcbb1a6cc0db965c5c57b02bedf1346bb04008bae13bd13506d680df1b4c7230fcd6fc5661ca55e78abd28f2f6513aa7463dfc2baaf636b94764cca2e757e10cce10c57558e920a6c63f991098552c03bbc603ed7de68f426143ec402a4803527c2194e8ef851ab3ab28dd1dbd40784f0cd6a72973680bfb6dd07eaabeca2c3dc34e34ebef2e1998256210ea39b693219346c68a338a86dbb753c6cfb6bb0000021c000000b0047be4b53244ae6eb70cdf66f3363dd59edf718a3ae2afb30b1b0fd79d8d07bd30038d4ef8184cd0fed0a391d01c488c9c666d42c6a478e3d5f6908996cf1b81670011df255e7a5bea5dddb70d150e2e7d51ba1ff807c78b186621ad371b747b2c7eb19c2317d1efcfd555f763fc37bd19ea4388ebc7a20142aac995169426b0d1717ee1a5ae39019df688fdca28390820217b3ca5b30ec8a33b2d2e39bccb98392dfe18c818eeeadca5d0b9b4630b68000000b02ff020b10d16a84718fc1d9a16d1611b74ff473e90ca72f78f19e846ac173a2700efc07d3d085ec8f2de0afdfd2c80d2a1f98b2ab48d676a96d1e82f664d1f39a005d68be1b6b2a3bba429f593e012db4175b99dfc135371c80fc483b1024649091e02d4e5a62deac2e296d0c123cb51119065c09b46487e9e4448beefce42e97c4e7836420d29f5a4b0c59898081ed725087b16a485e4a0fa95ca9e15bc24ac82aab81f674e2075ee52a2f4bdd46234000000b018e0a494e75c22a724e72adaabed4a8c375a7a9b71f8fcb14a27d64a13ae45242a249f900c152bdf9696638a60cb7ed9783425b6b302776cd2e10c1c6d747dc405e5d3ff558961d9f63be8c616a80ac913a3ffa01927e04cfc3445011fdc5069e106da153e42375c9fc3bb66c1b408252792becf13c65943918b3c8d7c83fb10cfd8578c62e4c69853c0ff176fc32413187a16d8a753f127859aad3d993504b8121cc6dda0e3bc684e5cd201700bbed70000021c000000b02febda87d1e2e2401696e10eb213125fcba87abf8b680204fd7bff8b32c71a5f56f7e598aa697e5a95cef91ed9771ceaa04d82267409c4a529c5cb0fe99bfb6bcbb3f76291e050a7788cc8058a97f55d54dcfb5ea0279c01a2a0db1ecdb6fc5a06bb63d0f3813d479facf2121d40eca80f2346670675c74ef669a61b589f7e647f30d32a3b6ac1ba40b82d586b3dade4222d0580af2ce197dbd7355677a6edd46ae8efc7cc44de690a93a051f504822f000000b02aea775138060b0c09e5208ea1183e4324c0e321b02f1ecf61d462e0a930fa7dec246509829b729b2c663119f180f8a58d2cd328d3369811679d59f91016de03c5863052544c3fcbf2382382c757d304ee6a6b990555f6ec462e6c6d503546b3dd349bd1a68891992bb958e201ef93381747f6ee8c630bc0292bbeef2a1739b0a0e368ae042c7f185f2811bc592e10151e2d43d2e1fc9881348db7c6a254f86a19cdbed01d28ce85bf3ed251c8902d57000000b018c9d03b3298835fc3c6dff2afa525df8a912ca2e44dcddf320a728126eece0ababf5164e538c6eecec7305acf6cef821063a1f73dfa1e6ca41ca7a9221cb24f559346485031f5d6de08032e2f25996a370e92dc6b46e7eeb0899760e65036f70ea37807ead3b3392266494bf81c42ac1e5d3a69926e90776f025565cff8dee508b8c539bae4c2ea6458825bcfa4401c0bb66e1285abeb98143e1919d7f40cf443e5fa542a687af2d9246d4447b238020000021c000000b02e1e113f3668dff9f9ed9b65109fc018e370f61face03d88015979cc9c825a408abe73e2b8eb8579115c2951dcd0c11625a3e8917fec4d9a9b415032893556380c051efb95550fb1f590768bd771e88b5f6f04a677f238c49b0f0651d90215607dbc25ae32e90d82e4dbc1e9cb3c50c92172503d8dda5d40637c0b78f5ecbaa9fcebe46c1b8171191e187ee43669da1b22c342109142593177ab6d4f5b1b93da531786634fb861d38e6669bea3520db4000000b01f1ab1803275282016a5a185328f562f53d17a83045a1bd60a43c5fe55b904d24355cad459502816e88c27111fc44243c75cce161806d49f9cf67d80e27919365fda545cc54273837d1929500d00ea8c0f81a3780398882a86120fa53e3ef22bfc99b621e6700c332dd840598fad07dd11fcb07d928f3d532aebaa81d7109ac127b1921b4d1040109b030ddd788ec42a223bd31f36fbaac2d98f60fbf7f71f9de3485ad5d344bbe94060ba797b86c6a3000000b02bf21f685b7658a04d5b0cb74d626a0d36be5bc37db7a8d0b160b02ae5f25b674072722105b9e06c9d4d93f50c9e5fdbeb0545233da41e609075a766833ee4f08297c452f8fd881ff6fc6ff357a66153ab9dc682a88f1bbe130b39462f9c9362e5132536c43aa9403ab808d549ff05e7207b59921e4d811e0fc56a377d0a3e99988ccd3d9eb9c9b52b9f70ca03e18443234d67a9b835db64964e8b2a094f1c50f0497b300355061103028c5089865f010000021c000000b0047f78f42e568a04eaa697b408881d46ab979198f4ed2cb4f2d0731c8f58ff5a37456caaf633ee17d3e5a9750ce3d2cb47074920e17bf44c262b56c66db0cf02687f3b4133b0570efc476ba938e3d571e2a7287b13e09da43dd13595b7ddd23c83b87a10ba85b75c3d0532a910b25c5922adbdace0a148da2e5e6c6e261ca89c0010ed8adcb7cd873e27e8a3cf6f0ed301e72c4fcc03341c32bbd52c3c372fc96f1c5507b669e1c6e3d037dfd8d6f416000000b003d1fcedfd4259c7ffb3c838f4da9e22d229f46e68b612ccb1fbb1571c55ff234184b5f125cceafc068d6d3f70587827170a59478bdd1c747c9d928fa0e2d7bdda47dfdd75ea0144981f3569ad0c6875d89887928bc9eeed6e0f0660010a51337d47905b40c2747e3e251ec4a27e69800765a947da8a3bed51574d6338d3b3aaa70ff6add8b842a3c2ae88afd491363626ff44afead6913ba84af807864ae1704e87347552d444483ff5658416da3265000000b029721b57407b143c9085a2247b4823cbba318f4b71b92c14eb92b93632baa54b68a0d8cfa025ba205e2546c77913427e15cbbed4515c18ce7ec234d8d94e7d1fc399ae1f5e1e48761929434693de8867d5716bc2445f1af7d20839486b7eb3915b31e2f4e1b225e560c866142d53092800910bcaaf6ebdc588c9de3ee6f07693901bc625f0382cab06e61b5d3474e12b0ef24352b719cbc0f66837f86307550cb2458483a6d4092ded40c04a3b435c8400000d9a000000fd0000008a14e4bb55508548af6fedf5e8ba390bef413a23a633faf7fc0c8ca291521cd03e2dd4684e00000062edd557ae581443d7165335c93b56341a0931f14e658dabd73ab19cdd6fa8502f3900307a22387ddbde78542f8d33e4aff1a8af5a0cf76727cc3a08ed0e7cfa702034cf0bd7f687c16834db49719ef3a77fc8f57f211fa7a24466f1430951779116a90000006b1b051eedf94769007221082fbd567af6a30a9654dbc8aa8fabd02da3547a10afc3fed88f0000004371d086ae9f21d0208c8a2297f97f2abc2c9483aa85120354ce43642976dd76db521fc6a138c9132742e7d81eb5020483350523ed36497b428747b30fadc6c1edc02eba000001900000009e2f1de42d2e569e395248491d6dcf6a5dd9d2dcfb92704af7cba08bf45593cea012ada0c5000000766e277464dd5995d49353ffcc83d502dc8e9361bcbb7ac9882a62b9c0f1ac2201f3a6b319ed11788c2742ca18bf1973d374695c245a690589a25556a99d168d51534cc2f349462af3ed3e14330f5be06a591a875a4db26f2fc91c1e728d4b70ad7fba17a5830c42674acccbd6d2f38fe9a14c7bd501ab000000ea16792974f765c3ca7abf1b7b38c661aba42a7c1323317707545848ac22a755f63016eacd000000c25a19525dc82a4550515c1e02e2422b9f87e9298fafc5fc5615704e2a24b67d4ba7ee37e4d6028e957d17343e63885d29337e53b1a48f008379690985e45500661e600fcafb5c280a4112674e3263f031fe5ba8cfeda3808a92b93ee7579d44570385ea88993d63dab382574fb6683413cd87f2928462e916e71337446a6645d15498aa8392c2bc685099fb3241d979ab59bbc5abe191500e681c2d05c2d41cd368cb08fc9e6eb43927d78602dbdf8382de06140b26a1735ced26b6815370ac93524c000000f80000007d1c58d8ae23d6d76704625d9e91c769bcd48dbf55292c554651bfe46915b29eae899748750000005562d3909647bf97ee3229b0618515231341ca7421cf35a46ccbe80f1c5e0ed8c4fa68ea826ab23fe45b7df38e1cd38d70187eed6f6be4b6f6db6f7b66dc11007b33982172989e4a0b83c527557c602fd27cb7a4f45e0000007315fc948fb50df693238eba94a6b33b055932edf6ba952dab865bed8a57cd908edd5f62580000004b22be4d90edc016c12fb3f95119cc259c1d7620188ad16dd9e6e780e867ae272392873f9294c212e0dd1981ee1548e13a4e060c24403e41f07c29d7dedca9eff7a608ada7726ef410407540000001ae0000008209ee09a0f665173062b636cec323de3d22c4ecb07ae6215ac808cc7828ffa875933bd6610000005a28844857a2329e275d6e9fcf167524fdf015ff8c9314fb3bfa1fd803133c1994dea11144c125784133df01d584c466a2b16a9986d2088c147fcc2207c1e6def853caab102a71932d5decd159fedea1d8fc1a9e6f640376c234670000012425a95095ed3d30268b97aa1e00593510e2b4eb5d86677f92eefdcd10cf0a83753778fbbe000000fca8e2b33cce7f99f20fedca455ccb4187f393a826df51fdb518a8db364033e743c12244143ba7e68fc93d176402f533654797656da98c0a3528582995defb952831ea96517b41b655e0768e8d9d3b9facdda5b69653300d5d6f30a2b5e607c699b38dc7027aa9274acdb8f8eebeda77255e2eb0c70e5f1dccdb882441a4ecace44cc01712c20b21c73ebb680bb6c07daa8f212e4c50cf636e5fbc702eb1b8089537cfbfbd357a4e3c4f8da430518a20f25addefa923230385a1475178e28d148485843e6e714cad6697b2e9e25c4245dbd7de2254c21c52f0ca479c97dd81192bf600bc84139bf4fc37f8cadc986f9db9f3a9bb8233014f61dcef2cba000001bf0000008e18ad7f35988617e31647b265dbe068a65972271ece31d8df4a74b6a536febdd9f1145bf10000006676bb18fbe613bf104a898d2f6e310fb194283edde37e996c7c65a1de82383d5b0d844ac0fa37fde0777b3a41deb55dbe2358e2f6a201f8531863cc7193a53f60a488bae03d1954e1aaae7e9b43fc7325c7b42f98f6f97ca9d21948b974f45de165119baebe3700000129118cae333ff5fee1363c783c57703820d89cd1e93c2b55e7c6b6b689b17a7d187f75d4bc000001010e169550eb01147ebe2749f4305d445cfc71f9cfd37aebe2999ebf4d490a6f2479da4d753f6ec034ad7b28f71c29577782c329d3e8649b6f9cd5232be7106c16b1674d27d4c34b36eca713f35ccdd9e95b7f9adac46e3b22117249ebfbd24b0b1a0c61477113d9250b2c98e762e5189bf0a00229799ef776b7f7098f6f69bd19facd503e3d3f888b715fe1fadb2949ec0d1830d5f296e288bb9585f3404a593577c1a835241238bc9c0b3a23dcb6fccbc44dc089ad5c55d814cd3f249c07c130003227c257ab5fd5523e81ea03490e53ac3d46556ac94c4eb19e710e02e7ba82406af163c0ae214b50b4dded70c926efc39e20870321e571f0ecdc26c8bb6f74fe00000158000001030c676d7453503184a38376ae2b92b2f6fd6be741c328660ad8bff40375eac3c0001dc9ff000000dbe41a7ede72b31647886ee50aae0e29fe774ff6f429fd1b35ac81707f9b435a872c145aada39345fe1c77d9c3678e30f1668913b1517c75162cfc9b923c72d0e9c877a8aafe48a2cc05100d43198cff869f6bd4e793e73a089c0a78a843e79047e2f96cad714ef689cbdf41ea2dcc4248f22141b05ceaa194d4b97b49f7769dc80d53e7d9bd16680d87e81307cca5df2f2f8eee88e3432f8c2a67f9d64d507f0698e429336ea5f0d040955d90fedecce1cebce2571491cd2c5bf19493a436915b4e3774da01f1110decdda95d2766b1d6b3b3b2b63cd8e709ac6e010000004d2876c52e75b5df7c71064ee4e9a6b2319c5f36398fc0f9fb7e56b082ee9e725c02e3e02800000025690dd29ab3aab3e7e81e808f7776f6f3f45ce74bb95d6f086a6c92f4ff715fa61e5875f4d1000000f4000000481301f0c83c8546b3ea5e84865c1df6841479930e07ad1df9e18d373f16b27cb94c7bfbf2000000207dd3586549c75597d74b22c6a9b0777788a942542d46a28ee5300de55cf606a7000000a40d6f8188fbeb65a0bf8b2f94efa1c78fd05d818a656e555aa724598ac6256dce871e82420000007c82b760d3102260f7bc59daea11a182a05ad092c94db0754019990293ab9e45b1410b8e0cad0a427953654bb3c3fd5453e64b606661d51dca4b7a06156b15344bcd9ddd658afb825befc5d4a152024d07839313caaef488027bede19410bfc393abdb23f84274e9d016a357b1aef9bd47d07615432f6a1dc613884b240000014500000060060832938390547bc49e151ec9761fa5e01093d00726773a19cbe6af345b29006f144249000000382a808fef6d2396ec6cd41df2a36b4f843c0aae631ac996bd093124caf82fe3764f89c22f14ca3089ed8824167153e56a2a08a9829a5b9998000000dd10db2b74154f8a988ba3f1558bcfcccc82012f008ce4910a14261ce37797547656a3bee3000000b5295af43c6c9dac139d1a2d9974008ed63445ddd76f9b3046b68a294eae2baaaa72da6d5bf59c37682449b403fefe7ca58f42ebd329ac88f3f5eac3cf786e85aa8659c6713d9510d5b4366358c413359c6d921a43b4277d1ebe6ea4860ccecc41ad5a06eb80fe6d330e05fdfadb46313178b9f832ec29fe7961f63ef468f985bfcadfef89c950db8fe68165e8a3deeb156286e38af04f6d1e94937a956854c515f543058950f5f1a5a4b36fe2454567e978a96fa747000000920000003923f379e745dd7994529e21a7107781543ac240e6439af3e547006361edf0cdbc91d0528a0000001178009f83577d4378d43b68a0c2abded1ec00000051194395a61083e52831efef6a68261b5aca3cb86cae1c906172259ec5c01d2aec76389bcd00000029262adbb3f8b818c9b9799af8b9e99d8cee2e9f6e179e36e0354b7891f26f5797570d42a962b309463d000000ce0000003e2bc2a25a813eaa0d2f24189aa3dbb526bc5b680f1a79ee3905d50e730134de5f4fdc89d700000016ba61167c533f6f26c09e4d9390fe28b26233475a9069000000882a2e803ae31dafc0dfd4daacf30276f7e184aec66a5319917f13170725e8c763a2af2a6e000000600352d4e88df8a380a4ba9c68ba848030d5099439fb66df0ac17ca6c5f68da43f5816ea472149b5bacfabb3e9cc82dda4e12066390e5f01eb9924a1fb9e5b7c075793766b7e2889c1a9e7940f15d401f395ab4fa5e72f09a42cb37cb00a3e8c8a0000018b00000093298bba78d539a052eda2c38d8dd17fd2fae3c824991927a6bf3edd78a5db52dac0122c6d0000006bba3b5a19636cee8a61fe116f42276e74e070eb11a1a537a5e689a4398a04a4d83fb1deb938882f4ea68a0383133d2f340398aa99083ecea33396e6db8e47a71e6b25fafb3721f5a8024f4a7cdbd6dae8fbfcb83080db84d27261d7af92e4fbc6b9a47d2518816078fbe3fe000000f02b1d59d54969d8b5459691811ddab7d008239004023f123ad421b906fbad2759a7a0c9bb000000c82524f4d441fbf7c018ad904a9c6d30f26bfdd622b4f23d2b1eb1f7ab8dc2fa92ddee106b561344cfd5e7636ba2a11e56b0da1bdfff171a9ffe65c78423f31c457c5532ff84035109d62aac21e465f5f8e15269464db648c1c075339f192119b3c2f3cf4ff62542d02d90ebc571ded46faed47ef2cc720f819d2bce1bd3fbb51c96f96b73a52626b8d94ef0f39092144ac9a2279ddca4e8fd1c4a87382170129dbe69b299f15020715760d63b87c0e8acb1a27de0baa8ae756cebc265ddb8904a880fb32eecc690f400380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b0081d7e95baf6d35c3402f656b0a6d7f1805469bd1be8b0a0681d2af278728217ccc4ca1fb667ae515ef0ac6f7096e58a61ccc4b5b2a68270ee8b14e4063a0068658c52ef3e0842df098d0bbcf3e2aa96894f3fa069d772d66e557b55d7cc44dd19fb8c31791dcabca9f53d62cb8ff9a0210b9b9db3f036e8562fe750f8113cd361894c7327bddab3f4d20a8b0ae8c83a2e8e9a951d2bea777287a3217f85507e588e168e48f895f892a03390a3147f18000000b011a92c6215f833d00473fb90336a1a73868c088266f55c84eecc99738a40684a5c258512af24891249f8c6b89ad1a81b1f3611f9bd4964916b44e19088be1ad1e76e270033b3b2a03720a59d80214101094c15dfab9ee2e461d0765a5915989ca9aca18e8ecd332932f1d50d31c3ea9528bbee04720290b556c161a901c93d7754a22e71aeb68f080886c687c9a572252747d59b6424857d8fd767856bec527173b0bfc8b41dd38be7b78df5538a7552000000b011a65f3842ffec616b990f39fa6617a520ecee304a59d8af6a885786a03e4ac105447a8eeb41cc1987a476d7d5fc9c89c958a6a5a68584b7f03a04dd240e7947dc72f2d5a3b0ad0888d095e1db065c4cb25c8d7617a7e6037ab6c14fbd98c521690e5e9011aeb7e55439518b825c7f522cc8f976fa86cdebe139f891ef0abca66bb9a3318f10be0bb81039361ac2256a2ba93e045077c74d4aebf58b2a8bb0ef4b4366f5aa19bb08ac85075f5036c3770000021c000000b01b3a77ed158b4b85e6ab1fab8946059b88f504c6dbf7894b67b8b5dc9b288291c65ab85fff9e053ae5703da171e5a4e172311d0c087a2aaec14f3f4776fa63b0eb80709fc4c4cfda15ea36ff3a6f10b3dda7a07421f9338a8e5a1f33ed4faba985ec8bd210e7d901c979b3d44f8f3f0b1ddaf796385b9554b022d18a8afdc638d1110848222d8c43f384b0488e7f30612b122418fe30e00d3580ce5d8552bf93ec207814b3f5659268186461c91bbd96000000b02b1a31f9c13bfe9514e79c9f038774fa65daf095d813904de66856825ed4704287150f260eb49c042385325ef3720a7d8818ae59d0cea2cdc56d41ac38e61f274bd66cfe0e923a6a244b2ced547d99d7df778796cff97dfb12dfe8f528d73da27bbb737c7394a6e7e072b59aeccfe6311b7d69a11dda3aac926e46a6f5f059a2788463dfd6280ad9a3f4da5d6215e818243af1f51e1c2ac2705562c48e6848e3776661262abf1053266b18b2cffa1a68000000b025bbaefbf21703a36a7797455d2ba86fe049a58eeeade8c98126b47ce00e9c77841dcded5ac592ed87a8f34ae597fbc202ad95a3822173a4bb0c33d346fe45da25d840fce471154038ff30c453c230627ac09dc776c20d09bd07b693f5f43f080ce436dea05b2278a5c2cf7d9ca0e9382fad0465fddf75e6f58a9e0ae2385486cb7face0bc7f5f919a8dc5accd7d81030672b6c9bac08e63faffe2d40b4755413ad4d7fe0834867f46b277f72edeadba0000021c000000b00369a714bae914a042de119791b8df8159a22e6c1e2aedcf0f0e64730b91a6ea017c03d6f0ab19d7e2f865d17312ae958a72897936f0ae6b8ece7cfeccfdd751610719bf01f5336e79c7655d6e44db3f0d82e2f017125a1d2307e3161a24b74e865f4152f9221664c2a0661d13126672231ffcf8858c5d83e59a1a0ab4ee693175ffd7925533af6079fb04fdcb57e49e20e3299b69b71e43752d2a3285ab1114934080ed70771e3fe189a9a807250d13000000b01c3f8c04f6166352650ced76aa023e43f7fc80db0af854a5af64c69fde16595e6c6ccfb7d23337d8eb6d8d83fa52a768fae74656a74f1dd7e33bc5ff19d35533bc31d520aad74a5fca680a56664107e5115c281022c27034ff3c6426085bde04351b49a6dc8bad501fb024777e53e3b00195b3123d7c0996f42ffa35ef5f4ed3e2d340148e51d55809917713c88332770bf561425133a86d6b168568cfc9cd619f2130c620a21919d48c71d4faed437a000000b0043e8c896b9827baec0eaf62d3891c1660e7d0fa1d28aed67b579dd29954d190a124c0d6cdf80d22e435c10e72d0e68b03eaf0b27bbf83752cb21386f20eb88d3468e70c0f27584b8006089500add6c8c22302167549575cadde664de9366a2985f75d726f0ebc93c7b6f49ceb8cad13011c489257a530398c2091cab006ccfca42d3a63472a58622f4b15ff6fe6c2bd045f91ed3143b60ac5d2e1c90664270c277a08ddc9ec053b6f4905a1833c4f910000021c000000b00dae24c6dbb8d4115e357f3df89c6d33dbd672110d1106d77651d24b4b0aa6a2d309c1bbe859b8c40915f315d269280eba2a2b838b6e47245c384f861f3a1855dffb53129e39e31ce5b77c838ad084d7f98e47e7600b4ca07169f6d5110e017748da2e717b8c8a987af1a14b6ea394222f73b54e3c50c8d496c221be05e2abb5f3e9e9f0d80d397856081452f8eac5522f1b22ed8d9ead851f376968227419da0cc1beebc0f3962175b82fd2611f7009000000b0255c6251b5d59455a2c63fe2418dd6dec026f3ba7d6f9a98bb574792255a17c1e03796b54ba67fd1c5b3a5758e0a019269a3a61b5be316c7c52269732962eaa3340d17817a58ae8da38e7a847d7edb5345ca32f9fb890e48764f93d6b7da5f9a59cd6ee8b77bbb5e0e74d22764c77893140b0df5d0c529e1580bfb198950154736716592cdd4442e83bdcfecf284bd7f28edb3e792a6cddd80835345c8a142308850fcf94a1fde7c2e3d476c82658ca3000000b00cdcd79b88eda22ccdf97bedb0db0c802befb672d912b6413beaf08391d41f28a9b2a3822cc4114c824bbbde432659a9731377936c3be261c466dc6bc46f9ba536f3809a37c75bc2e04dd4990b74da29c94758849aca76a33b6301fbadf2de6ace6189c77214b481ba62a71b6a4f288f0bc5adcee6575311bc0a818c502f507c03a2ba695ef3746618e3751841e90c7901d11903dbab5ef02a6710b6e1a54e72b88cc449402f4ef081f6d3fc1c1354290000021c000000b00acd54425e1606dfe95705bedc4ffc47ba3c934bb7fb26bc22e843848e542fc07c24587c58c2d44e84868da47a17e5620e742a33a4de4d195dd05c551d82943473b7f31706945ccfbf9ab8d63c52f554ed4edd221f48d024c0d5f7ad5ec8c79fca0a027bf845e5f4bba1f762c101a1de0e979644124215dddb7f8b48a65fc5120df079b0345268359c9671d620f1e0532826455dcfa58d76cfd3a2f6919a0c082e48f35bd9abae1587c0eb40a28482c3000000b0094af06a522ba2ad0bcfe5df418346366f72c4d1c2402a0631198c76ea476d234998db4e75b70add9fb0298da3d36339f9a2f07a5a50bf59b15185f8fcb66117d28c00577cf35f5e7d878ebcd01603499d837aa50289e142359eaadffdea829a671627a48f5ca8af4fa5976c76ab90961c248d1b9aab3fe3e51f1b21cadb2dc57984fdc3ef9b192711468f70ae2acb872fe0754b279d9065043b0204b1c3a7aec40d71a65179085344917c36102c0639000000b0214c9e9c4721f6b36e811b7696f70e85b52291a7274d6c86226d171f4cbfa2b24fd1edc2aea14b690cdb3054c9796b0a3492ae798e000b5eb5cf6706a2fa3dcc1d64a630933d2354878d1ed4bd027b551599398d901dabb9da3c4b78cc36e32f740a681e18ef71f6b14015ea75acb6d3015562d42887051a1b6af550117eb739a9913743fa0e017c4ab53e15f22066f621d582b3b334885ed6b36dc0e500ec9cad34c4d3afef4ba877e58d5528fdfbd40000021c000000b026f3bc295281f2d12fbda88e7ec474b658f6dac186c03cc4fe7e08aac14e29eca8efcfc3cbd92961c22a007ca72d6ededdd1a3105caf3fedb449e39c4e3b5381f118c932b6c0be72c91ff7da56490f3536439f650a8d0c6951e94d6cd930439fe3fc568076f08d0914eaca89b79f289a0eb12379446111bc04944dd204f1a24bc137fa1d05c0da90ff391045880385b21716be8c1edbfc5d5c55e125b4d10560cdc93a006c1a76981f8f44ea28187062000000b010edc111750677293d058f04fc858849008e22e6781bb40e6edf262f6e2fedf3c7a15a91c33d882473479c928f05903ec7f72a6064c09fd7cf3029b66e15937daf90560cd18fed25e57cb2eef2b68b42a1fd026032757dd22d22abc4654ee0ab3e6cef413f3372ea74a3b42c23a2109b0dc4d8e803e7c7871436e4605b9ab1c018e61407c47672bd96d4f989b270ad630df2f474e2d7e52cb73c8232acf2869bc25dde7571b40897ae9eb7ebeab92e6e000000b0175b2cda1e5eabf4e8dafc2cd27002d06da5fa46c02834c66b39812550383a45c292c768b7fbba9202668eede0e055b7ab964f47047e069d96fb84cf4923c302e6ccf707008a708cef74a1b7b2db25d1f2165e2b78c0d4cbe22989ed5ec41b2bb878c3fd40eb3720bb171a64c839fa4a1f65cd6c6fda6df164150bdbed695133bd88a4e6970e84e153cfb34b10ad31cb131c7e4049026b2e140ab5a7b76a436c1efc6f98843386874b820691dbd1aebe0000021c000000b0005436c2f8dfbf1820cfa2fcfa48424ce773a82a01a9701af93487cb3157c4a48577189f62ab400f20a82c9540a1ca5dbd9d849e14b25fc7835466f6f5c73e32de9aff35a4a938cdb9962f96f63d7713dfc66a3aa82791eec7cc88f7f6f9781cae40b00cc56f802509b7d1c1922dc1b0287b0b2a6e0911f1811f6ae1ccc3c3f1b40cb207b2628c3f16bf2773c7df56450a750c74cad0234895f7d70f4d60cf44fa32acbfa71725b563a5ca6daa6cd741000000b020cb827401c97e77f0d1c93510df02aeb50e47e5b203628054357b2825ae05d56e14836994dc6c390ad425e73eb4717110f587c81826602086b10a0be5dfe3706b7ca9d20596a87802549c0d3a49e31bcbe282260dce8d8b6b598b9e89fa543819427e6c48ace3ac8305c3f582dbf38c18c8fee398a5673f5f7353d3ae36924b5004ac5a2a650cb77b1125f4849263aa07d1afc4418141ed80595e701ab72da97fadfeb3b2aa67210b39d0469dc70f6d000000b02051863b5d2559575135c3590bbe0eeb6fb3baf42266990d1f8598b1500e8362ae0a59f53a464348f1130758b7973de948b0dddc3e0c4f5284d63692b6ec99c67dbd04b29feec4f03be003a69152f8f419bb51855bb471009db513684775d5a6341b86a9a4e5d945b4c17830f350509626846e262fe259e255e93517961a9659511d59cb5c6d15758286212b324a544819789c5ae9c8e2518d7b2ae26db97f31e4a59815828e047cc7cbee0cf31bbde50000021c000000b012ebfa9306b78c99bee2a0cb69b4997fd18fb7fd0bc5fdcffe26d5c26b3334fcce327343f27e8cde1754c20eca86b8ffe4ad5ead132a3fca5dda3a40bc48c984d2b4744a6b2db0704b9b9c01deda09a43a9f9d231d98cd049dde5fbb5b60ee5f3a186f8e6e94aa8ade39b5639d8628f0190c9b62a7a325e7f0ac8b9101716bf3120521ffb110a3203d7eec873e38a4c01f2bb6759987fb34fb05d3dd4a6563b74f816271117cd7f84dbfb1a3bafc0cc5000000b0229389c85158bf3b5feca720c7708b2fcc5b1431d3d328ee4bd89ada7e6222e1b836c70dede217cd688f18014887f7224d923468d90b341f1ca0546f0efdf6ce716bda7642faa79bcf6572bdb56dd2449c7bf5afa33939843a8ed11eb27c8bbee97b4d259ae68272b72cbfb4552dc6171d8cf90f374e1ba72907a5ac68956b3fb30bbce63947035378aca7d0a3675ae5172936063cf3bfe2ecc4dc1d0088378e3f1796163d18eec7284c374ef571ab08000000b0131743e37bdd3c80ef7b881ec7e0ade15c324c2bb69d1c0d17cdd0d449b3f7cdafd3eb9b7030aaa4201a5eeb89546d183240bd058628d9857c7054f129eb8604d25365a2b501edf7ad58e8f0cb120446486711cc34843214145e694268c6d953d72ae0115f91aba6af3aa44ab584360728a248040512a5208d1b492018e57fb1e9a81db45afb9e0e56cda199d61edf2229eac6a92b03dea4571dd12e774cea2925e055711538f5bedbe48fc286f5272d00000f2e00000172000001152e7e194cdea78c6420f903a92bf0ede289727a4c560a2f90046641e0684972c90b8e23c5000000edac28b03abd7ca5c7b19ab6d757a08606c47e6d71d0316b15b1b17471d8dfad73744f124a0a1c17e9dc0f1d4a4699e20195f4e48fd7e83ab01dccf9b80aad5f02718c58f4e368b1cb1a63a3e5f5a853d65f159e23ee318528d9f791e37e4273f651bb7a6e803aa57603e67aca93ee063118aff19a283d8bd4d3892b5ad005be3d31a3cf7ed1d6de8f23b255f26699ddda343e9be1fbdad951ad297bb6872787b7312851c07c819360f44f17b9a54ee7d6340e1959bde5ce141a02214b1453e9949501d83284ecd0e8aa7e57631f63132ad8f4e7392aa61e4af4f5ff01cfb9ee34fae2456daa3bc545af5593b25400000055175868229d59afbab6447f6aa4c96cbf77945531ad6124a5bd524d0d7bd9ad880b95230b0000002d8db2fe5b4df329bac10df6eac0bf9c85c00c8b1d30ac32bbc3f0ffac8ff6ac1540140eda280f71e401fcc4db02000001930000011303b82da1d9255a3b380af207b070d31dc1ef8194634a56ae5316ab5559322abb65eae5c7000000ebe15a8e1bd2792e62f244bcca85aaf907b418edb4255914912068126fb7cb03c4578cd7e3c97988f1aae76a995f3132d65f9d48539479c6c1fde14031fa1f01b9ec0d04c573becaa843f861972ca7767cbb88cf37ea6192798eefc6920264263eccaa7f8ff28f45697ce091a255055c17c2289b82945c3b991ece66550d8388b659df12e9c5d2b486cd61cc226cee0568992c3d2fddf921a56f0f677d7d863965737f3609f47ac77ca27f52dd865b7cb3efd644025963d6b1d1f8bfd5974c48bc78bdf1398a07ffdb3da15fd857de7c4d10a0f8fc639c1df074dcd3da55badf73eeb6378e1ebecd765b07bc000000781989d82dcad7ae0c61f3b8206f934de08e36a7919f75c7e9cd1d338cf77931c8110b207700000050721b8f7a89de5e8c368f6d2202edc39045db8c2982f716f457c0137c038c21828af8a6a23c599dba974784ba28c2af414f5dc8acb9d8a7603d301f4fcda4eb82717f14e2a414dc1c4075df010b95ca5f0000012f000000331300b8ffc9a135f05a78750d599b64775305f09813bccc90ba56a0b4ecc6e03711086e5e0000000bcc93af235c347f1eb02996000000f40de69571e5c6fb514ecdbf14e09ceb66be3d226ce3d4e64e04943de35196382309d820d5000000cc5fb1d1382ccb5cd5f9b3a8d232685d4874a5e24563e4c658bffa16f4a9a28f7fb4510475fe6407a830a166b912c7e496abc911bde0fd53ff3a22043a806bc61545bed97a2e2ba206bd9add68e27733beb0385813040c9e60498a1dc091a0498aaf358280ec486fe7ea979e3beb501f7ccd118a9f952a789809a26f3abb2a5db6b06e56d51231225e992e5141fcd563c87e985b5f908fd4a86225bb377e3dfbb1dd2a0b7099217f84af856b3bb38360cb4635f5e3e175c66ed5202648cdd4927e50f0e03a1ef94e80759ce2470000018b000000920fec694a4e4e637e98a49003b00134233a36074837254358bca612c2df357a95b6fc0f990000006af3ef07aaf94deccbaecc47d709639459070d1b871cb45f35bf0c80457590d3f041fdd0cd6ce0744d0a0610ed0312887f2f4cb51d7839637257eabf5cf44b7524327637b2e184216c8d59b474ddf0a739ff7450df630586523880564f05500326d4455a546c53800fc2c7000000f117e11f6aac90eed3a2e4334eb90ca2b7a803589964d55150858e65312ed508931f6410a2000000c99430ca69e697d6c8635223f50dfaef37a7cbc4947e2df7607cddc38e9833a1ef392441d153bdf248630d0557d83a3e8704d10d574fe1a25f073d02e82886b6a6301da8ee40cdb1b9596d3a849603a15d1f3d18c0e911ce1607ae21ca0f635bb5862f4dae873905399138dfd9cb9b9282497dfef5948188a598e47d2e74238e3ec475e9d6c3ee9a928cb7c9d8093ae5703c7e3e65c5991a48fcf2f3f78743a8bfe2788fd5254eb79e55e1abde53b482cf2369c4dda73373928b7c01ee1df5d8793a4cb43831e0ec80410000020b000000e804ea7194bb36f51f8e174cf8190b04a655724ead53a777aeef019ce9e040389e126f1f32000000c0eb0a694e0390e3d0b5a62cc4ad8e1bc96352539246b7f045ad068c2b6671672f0ab1ee8a571049b63599a6028924cd7caa6c03f7ee283bd8c13566434e0bcb7de1f9601ae942f23c989c69f5b48b6b378bf0e658ca5ed39b8a33f34654b4721c757ce175474f9c26029e65cd11d533af9ba8a236c03474eca2ec102cb3bf65dd66193915042e03bb3efe877e6cb504de60457fbb0a15e50e3cbabb538243561cd397257ea684ac637f199e0e129a64be1e6b980d70c89d47606cb7fd3fbada640000011b0ec24b2d4fe48d64b60ecdce6996ff7f2becbf2c44d5512003cdc309b643f900e800737d000000f378ba0db20d7b2c5eacb3d13fd1958b80af3faa6ab386971603171e0d89d590536b1f078fb5e8ee8e99168cee95b1e0975d09a022e5c6025309969be99edc50960b530839a932f3d8e8dbf415011f38552d559b2fe8022ac14a80ba338aed562facefa4aac51c4b85f1a4b0f332d32a09ffa3a750a1b2331d32f734552a36b080882e037ecde8f3f2cba9afce01644e93386f56c01186f5fa3d81e92e5fd6457dd98f259a42b8b67e7aab4a6e2da3122a88edaccf10bf0cdcc46364cf5e62b5621f6a8c898c1bdfced128767a81eb40b2a4ccc849dc521b82be02e1f99d311edb821dd80537d52a0965c2cdc6b33d918d6b596b000000a60000006105997d9da063ec10492c8489b8d9b5839d97f07421277f9674084051e6f05597185292b300000039aac50a73450064c027cb125110a22463d25efb5752c29b902a9aa615f1a62a21ad95f039ad63bce7d9531dc02ea973b12e7a6e0acb613575db0000003d07e0a6d03c74313d3de3599b8cbdd7be8d7cd11fa6236c6b8d93eff6d0c04d8102dd937b000000152eb42ea203d2f87c3fdccd3f3facc70180ff6319ab000001b8000000db05b360a766aea8ee1167b76dbb6a83fc762ad82165ed8e853e1d3d6cf88be52da5950394000000b3d27abb582c80510d960afff3b7b595ad87327260c8dafe293370d4dd27fcee725e683bba1fde777f05281c966284f9c49f7e3aa2ca9cf688105b859987656daea9fb581e7678fab910c00214e29d49fa6c1a89de2771cccbe8222ee62c20e4ffcb75e25f5df1f10e91b0ec69b3aae64fb324b858d86316c4fc3961ef8d414c3dd1715848e10f653599d1594268da787890eb07f3c36d8903fb20433253083406f5b50ac6e494c0e39c6c84bc23afce76fd5c94000000d5303c9e22fe95fa3e3789a00209419ac0fa8c985b7f8a31a81ae85e049bfd330f6f6b04af000000ad86e79fffbdba4df4d847a2779bf3287d4fed4053ea52fd2a95e39303572258b029d53f5c17a523714cb2751e4dcbc10217d763a1494b011da7f9816abebc78acad292f748d24555be50a851c079b889de47a8ce929919c2ebec7f11be88fbcea3d4f316eabd5be826bb58ebe7e3ccd58ad895990280184f71d00c0cf370402aefc4ea02fd09e3cb89ce4eb2d523c55a3ad6230389b76b579242edfdae0683dea343aa9135be94e9103903006710000012d0000008016105a16340204d52a575960418b52e10f8bc54cb32635251093ba9eeb7ccf4d9600382000000058c4888ee362cacd9323c571afaa517c6192fef1af95a35b82a09aa611e4284bdf855ba2e9dde9d957d7f8fd138c2967a30580ef57ccc8ec6691eab4b60e87aadf3552001aa5c1dcc6c583df216f1fbadd9ceaa7cb9c61b19b000000a506541dd0cdc892ca8172b0de23f2c58a0804718d4559e4e6dbab5d7ae7c2dc6403a5fb080000007d8ab6b912e18159ddb511b4b701bd02c0dca39705ebe1cb72db9d75387243deca1c13cd4f566448f19976f2958f92e5f198985388319aa2bf4c69a721174d3aa47d0d36e4d6c85e4200be7ce8d8361cfbc2c8c1bfb5eac21bd48e1daff03697b5c3b5ffe6549e888bc6815b6c9922f0841aa70d8163c69372ba818858030000013c000000a7299abe2e627221422b744f34151ff209616f6fb90f89620b3dc29fd008f1e4a5e16b47fa0000007fb197c5222f0fec211e77ab056baa0e4ba8b122ab4e07bf8a5876d170289baf62104d2437cad9493ea4cc058b6e3340d51ae8865b08cc4d1848dff101c34ad6320c7f94c46c083a5047b49722c8af370b1c62bf5586afb5aae576f759a3288603f3b8d1a6ac20339766d1ad4e45fce640a897a0fe8e8ddc53cd5bbd4c23bc420000008d0bcfb8ade5ecae6c6348b0f9cba1e661fa7877118a714bddf92c12e44a1ca5b2ae5b72a8000000657ddde276c52d3c5b192ce2c1cebfc2b0c0edf108866d0903b211d4403e114e9d243829ecd75d34cabc721dc67243340f396bdd494867e249fbd4393204003b609b62c5f4dfab0fff44b1f046b0c565e7520ca14971f0c6a9183c83029d3ef2b993d070469b00000109000000460d84a6953576b079298096f04d1bce47c21d5b71339a093a85efa3527c6cc1ad528ab84b0000001e979ddeda2ebb0c740a4b564fa1a23ab5ae084dac2e91b343650fda0d8df9000000bb00189662f16f69d7a684b10a06440f99043d3b607fd16e6dca488c02e63a9e66cff0614100000093bede4e18343a6a27cb9643fbbf8a32dfebb9e019e7c147a14060c6df54eccf2c7eadfd3d145c9f92d6f5a32746b782094d3f4cc0fac738fa44423ca4ad18c9b60e1e664cdb8f05c1ef5db8ac8aab11f85585f5e6fbd385d6042c196a22a36474774fb32f67ee2ea9c42575622439b739a89c65616ad339a1f0db0203e6fd04c22bb80010f44d700fc5810059414ec86cbfeda500000168000000f906e8b61bc741ff466bfe557b4cc06d3142020e26b73a5f679f0c5787491d59a3e32e6229000000d15bcf18235c64f0a0fbf702596a9b3ac94115b6d131efad243ccfcf8433de782a0d990a9fca45ccf8a51b7a4e2f801115d43610bab13c56e18065f1d7ff0ce9c87cbaefac62ae7824618332ef545202ac9caaef2e376701b37690ae158eadf5dc7d84baef4dd606d94f66c3fe899076ed990c35464e9b9458a8024f4a8385a1ee5e17b1bebb2c27f1ab56b534db7b7fbde6b081209c05bbfed644c7f13b87b319580fb0cd1f55d2e3bf2c4a8e89aa4d74ebaaac952366a1533d85a947ae2fde6f582b2f7b7ee946bfa71cce6307c4943441000000671906935f4ca8126e15e4690d2e5344e842c348fc086af80f4e89521c5613868544f504970000003ffd2eb4b663d75f4785dd33c55d9a19ea61d875a3e9256c19b5f52a101d4fbaeaf9a5e368dc05d36de3e489e35c86cf6b7b78e35cf310646522a153ca4670f7003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014ac437ffed6c42649fea7303caaf694149c0f49b975392d5684e644278f9c6e370a3d472aab6ce7660dfe717de8d9a7bdede1c8b8f8bb0bf106f47fc49461dc5d444425b0d32a688291c58e3745435d06d0b02bd23de6f032c98701445a98ae60baea30f2c86a340fcfcaac3b122a9805ed3a5c20478e982ebef1da20b0c192cb6ae9ce1f7a74d36071486b0ffd9d4402977512ff5bbe8b3a88847f8c0759b5433bdd0b84eb638880f3c3cfe8c7b568000000b011e7e496ce590bde8b314a7e158975854e35bd08096caeac4ecea8447e99c842d0c51a2f61f4b748f13eb97a32b7a39618a666d1c2d84cfa3f41675ce1a1edc00f46f42b4b914477b6a12940dfa2330f3e0a9fe862648bba31e4893ff05773d66deb1b87968113db25c5d834e8db4eff07be843136b216253af40b5f118019eaf8cc699cde8104e95549035766a329a90471d16d2a355f436856e36d5b078a38599dcb17b996452796635ccc13799186000000b02a0a61b687e31754c6868055452b01020a3ce3b0f6264a701ba225cc95d081a69a87693fcf30d4c633a11824d887198d71348d7b15457be4badb34039ef22df42d8505dec3ba7033acfda094020fe4ce8e02bf97343229a413cadf2c414d71b94f922c0619d8dfb9d7379225abe531910f168213f3ff4749898ac04eafb8930fee3eaf8587aa15902688919416eeb5d410b00c166f812c70e268de5292efbf29fc89c952dea59bf8e913db8f11274c3e0000021c000000b0255883fe6dbbd4dc0002b2be61c7dc9dbf1288fe46828ef32ac115eebe5dd14b91efeb96996dbe127a1bc8e4a04f18a2d8736f032becda1a65f7598265c675caaac157071b21108069b7cf4689b5b3d75f4229b3a8ddb41e9d130e59a07dcb7ce70c92d5eeddd9f11704c470c6742107155118c4b90ff8c13dfb037144af8f51a2d2f7241d14a6de2d2efd36995dde4c0aa81d17417b841d9c6d646cc759a3ec271223fcce5c622fbbfe6c2b64bd02d0000000b00eaa6bdba5414ffe5b647a33783cd6d2b807921b33baf3e53a35668fb8fbc24472bc3d2235ded304554727688253337ca6a5f2aa8729780c400e56c7cada609119d65a071b5ebc9606bae0b4baef86475d8a1951668eb0722832c645b4da052b87deec253426eb8ba09f4a56ee5f47051567ed7a1fb583191675bd30e60c551a9988fb9d3075660a30f08d12f86693812b13c7d1c7fb726de69ef1fbdb4b08a6d9777920285dc01c3884ad45d4419908000000b00732e01ac48dbb6b63a941f53898402e3e9bdb94635e250f3f8799edf4e7308bc45a62635aebd2a1a4892450076fa1577f3b40d0b9c1329d4c2d96bd82c74aff2f5a22e7a0f52d57e51595254df8ad28833e3b9b1fb63093def7e05ededee941af43e46cf629082c2998e07641f165dc0111c610a3b19e10767e70b2bc1e0e3ac4e464bfbc856b8d99ecbccc8c725ab107377e3afd4a1ad0d10fa28ff2e965eb7db1a077b9ae3d01a10d665759f090cf0000021c000000b00fd3353ec40f32ee061467bd65dd7a9a4db974dc9bb11a23795546f7acb05c1ffc56b8bff3607945a74f94ade0cfc97ab88fb4c1bec2fbbfdf66dbc0ebeeb117c55fd2333b542b02ec8728eda4ceff555f26d8716fa8c9c2ed5fb5f36fe6ecddeb01bddb3a8818a937e043f6b1858c212a67a29c773a7eb1de5a9e19517c78f2aab643b0b68359d398fa75993102a5202390cce3107aa3ee6b18e67ba9b09bb7a7803b09ef8bf02af0f76ed8cadf48f5000000b0027d147f84efe397ced437bd5f95df0dff58d9f3947d71b3c45d79e3b7581856aeb27f4648389a8c1d915456641c1a0a0990073ebf920b67d79b9058616a7026c6003767edf18a4a4ee742d3e9bd8860e372d18bf48a6f2d5dcfa2cf18a0bc6a9b75e445aa52da70219386d127bc111d0ce9dc08924e42d5887fb099fc360be046c0f88b604dd0a0a8e7eacca9ae08771ac34f0092bfc92b06589c24f7dfa9053b190191682019e940e516ed308bac15000000b016d5153124a68fe9cddc8d1cfdb80d594fce6eba337543a0e22771cd781ce901c48019d4122dbbc8aaf5943cacdb76db77f4e154280898128946ac3e3194a6e8161ec41f16e16737a83cddb4967589daffde567e93bcaa104a1790e6c1596f2125f9d8bf8107dedabba1bbca11acdabf17850fc35bb6e2491bfd4022e8cf2f0025f14fb762aa6d05b81afb9e766f89f417acbca79a9394302da3ef5730159dbfaed165a8432efb6da419c3bd5427314c0000021c000000b01f821738f1caeba0f5b78dc42bde940e1f3676b280fa6e174437b5c3315e6406f5e2fe51c92eb71d0a0b3f9fe036134c58c68735450039b8c824c15c024e24f7898968fb02dacb79a584c356aad1d855cc2cbd6755533781f7cc409fc6a9b3172a77a9adfd49f0e8fd4c2f103924f18a14d6fa0625de97da6e16c74784dada62314b386247e3450e05bd2476c42d86cf02dec5dcd70d8cb0f3ab747c453b554dfdc0e8a010222c15955521046426ec6a000000b022ad2e93ba7b04a1cbc6bfa87a617f83430a0a6d1ee53f55fa4a389c7a14f2bea3266b1866345b93307b876c8a13724533de87db2cc5ac3977516ba8b08bacada8c3118231a1e859c9044effe5c3636bac0ed9562c9de981008d208188c433c4839a45466fc2a3fd10835958f2a49a4506b07b9430984b3754a843d45d2b4b21a483b44989dc5be617aea389045c108c29ea1dfc98ff18e38870be3004d8828dd6a6d669684a8051edb7c1f22a624f3c000000b0114fbc1147203f7c59d351cfed9de6a882546b17b5d02d65eb828a8ff9d76a10fadac803587b0c952921c37fafbe675a34e121954aa0fd7d9905200f3a0d47036f49b1eb7c2b5f6a38c961b6f87622cfe044078635784d1559295f469f5c2490283cf724f18aee0c7a487caac8a0c7b529dd0f9bf87c13c306b6bffe7b3db62d29b52f26c6c57d6802b1d886fe2e961413ca54dbbc85e9ea14c5ff8a29ed2019fe66feec00ca063a340ef5774d3c2e6f0000021c000000b01088db56f1cf8e6bb37e00b106af697cbbba256acb3cad5149c60b01cb2682ed56ce5c3af124017aa9e5dbf603ccd9a488932a68e0f14ab137d62521352eb430164c9f4b3c2a9b8699262c74e2b756d3d81c58a374fa8b44f80633c5bed701dd115a0f7689a706e145eb919ec063f71a2270db6b3269e6bff4de759d818c3b0ded068ac9b4a88c487c5ede457bef82d400f9e7e6d6f8becd9f12fcffb3df5132ac9fc659ce225a6db01984e53ae71ed7000000b011a9d47debf2a4be9d147f140a1d9796aabd532895395b1430978dd0f9eab812fd5f9444930a6233a98bb9bef06b5aa975a7e28640844a85a96652bfa2c98c27f723e8940c956b617d8c333f9a7660436557a8bb9cc31527e3c6ae71016d1312046bbc9b1047477e2882396edd9da2e9133f913c15450d920705c917b6378de750cc0a0a2f477048b1d50b2566519ff3059fad594633362430bd45f4189d36d544c9fe2e99d63b1f0efe80b819ca7ae0000000b00307d543786c1c4056c739d9d627932433bf7b6c83b37ad575c9466c283b976c54deb14d14e41aa092f79ff5e0adb30c9afcf4888f6ad9b61482bb993ebd26075515c488057f67df6c85d3920bb1648e8b481cc99853dde8db193e0054cc3558ea35266e56384c3fc6bfb81ce16271380d9326e3a6c47e02407d57ba7840485d3fbc781d9a7d310a1e22264144221c2b17efe29641e92afac0929bf35e65e2f089802533369debbfc73e38cc0a49ee010000021c000000b01c0cd9bc7ba0deb785e6e4a001ad27840eb9732187e90db9cb84c21a3f798e1b3a9a70a2574f4b62ca9f9b8d716270e9a9ef9938f29de567561218d068ef08f921c13670629c8b7253379267c274a5e57fa6dca0781f0afd5fd7cae32cfd1d329aa3242d66e5e2d127016d395fc86c2f0aac653f73aa8e2bc4895baf8844ac9b28630f46bf664a981478a3182ec15db2295aeed22a92b96026b9d9c3143012f7bf91df72b31e08d5bf20acba2a04cd82000000b002c9893b4813a372361c6d15b44322c531eb3d28850d58b013dc2763174139ff7bbc84f56e720d06a552786e5eb8c16d8c5d416aaf7e5acdb7a24f50ccdbcee5e66d226e866dadb84c17a5a575ad97af733a33ac05f0f8dc1925836e1323178e1a656fa41a2a7abd01c8693fd71636c41369794406dc221aae3f268bd552596a9846beb4636f9236fae5820d717792012943bbcb58f3dbd7634670adda6b6847700df45ddca518d918901a6aba07d772000000b0149a412c2da3dc581287494147cc28cb19c57efe775bd2479d205e70ab0906a36c04c665673b90c9036d6f6bb461a5b9a277364b4b3d15a144b3c508cb0603edab51d9e1a9fa74a15ace5e5d7f6a6a4fcf002f5e5d04db56566aeae03b7280854f00334e249c68aea5c301c35f5b5835055e6d0f76533fee16b534eba9500881cd8f2a8bb171e977f5839cc2b9fb1de90e875e2753520e36b7ffa4ae1c6f5ab33f7ed25381bc5fc215721027346f91f10000021c000000b001c285fa65b2aba5adf0d3b3d6caeef7eeacf7c868f513b5a1712e2593b11b1ae1a34ed6aa7baff297dcfd7e84b9b791c9d57e81cec4b19bf3f38041e384e88b474c74a5e98553ca048afba363491ccaa5f82fa7d51f1d95b264607e0a7356bd593390e5271c42cedddadefcf6b789b930359aceb8f2ea2c8454e9d39ae105fbfdd5c8fc6a38f5c160560524962cc77230376ce27ba0b6503f4177499134dc8b5358c4771e502fa99cf16f40f1135273000000b00ad33296515224807610567a54ca400e00242548f6ec209b10d65c9e0aea1d340b165855bdaf06278f8c2fdc883f8856b0e92458684921936eecd274156f85ba7dd85ea99bd6424ccf6a0f3addb7a1c831176672eff5b98dbd0ae86460ce8c97f62149bcb87e4861b595d8122883d652212ce677767cde811aba3345247d652b34f373a587d2c7b1c5c93735ed6de37804b1c2a593d147054a578e7c736162c329b8a79364199744e994b720e99b0beb000000b004daa2ab90427bd8ef3439d5a15da9b1e62885c03871a491942df4664e5166aa4cb01d63d2bb3d385877d9c1b649fae5ca2b2882fc2ec38e6db60a4492415ebc312c91ff72238d9b0e6d16b05264a3491fa5c9ba2ec0ae13ce33650c54a0600a94cdfbb8ad3eded30537afd18a6abb2e0d2c0fc289bfc4898b3c96670b536411d29ca8e1db8cae0ffa138bfebc907cbe1ffaa7ca307bf3f63b36c13dfb6348305f2ffb6c180fde113016c151ce7f95730000021c000000b024c35cd6ce060f2fa9fb577bd3a30b3ad1e3405b43c4a3d31d9bdbdd3d8f226571f7b385fbbd7f22af0474069630e55123c1edd68181c3a621db3ea402eb33ad3be324f17a001c4b0d972bf33a57bf1e653cd0e92d81b24ab486502c0ffa39e22f847f238a004778b80b4bcea89c231d10df27c4342abc9eb1e087bf16e0181c43bea62e79f0be91c3ab109bab4b265424e01edaba05a4f7a181da94de663eea4702a1a3ddb621b1110d4b02996e673a000000b01792413bce0abafb1ea96264b751deb139ce7233b079579a7b2c501be205076d442592cf496e3ab8f0e665aa890f9383e60a39f8ced4ed86897aca69de4bc2b96fb61952b113438f78735038e8d7c68e0807269e5b132f79088edfba0a167e851a56567c63598eeb93bccd97bc05b7c80dab44b286514f9c59f99573563d4c844bbe178f0f5cfdea5712327ecca96b9112236b47a6e9983ab2afbc09e161796c764fe61c57ca33ec61b1473819704c47000000b00ebe06118218b563520a01ed4f22d6a1d3d235d3eba52b6bd39efe28bd246fdc2667169919252044113b1bb9572426f19f9d6dd05371058376dc198a19b7df59d656fe7ea251c57fadeceb3483caa7a095f0241ebe6db143ec9d1c980b2eec199f85e0495bbea721092dadd04dd8576225c6cc51825382fc5d4705999a8b6c9b74ff63b2285244ac2c40ed033b68bf6a1c14de2f9414e29edc1e8d13f09cc0e11f76de1223470763d0a3f8b6229679df00000f860000018c00000073009c5eff9ea225159fccc9a722d7d556d6844cf64fe8ad7286bee50f1d14a31722f497330000004b332559b81a3477daee89ef2bf771b09e8f512ef9455f8601199bd384af90988e7aba12c3f9232edd8958c23b103a123262cf29d6999ec0273101e8c3073b5e4d42db9d0834a8d53272b08b00000111001d30325100c40aa522096f38e9ac5735f09969a30006e0af0ce435ef8e8b2e738075c3000000e9b9c68afe2cbb41e12d0aeae13fc2b526ad1319df82a37d12116051bf8d487f5abc5e260386b3170ec1f52a5d257b920378f54570176f7c019499f39951b19541c6066b136d7c29f2fec951a55a83fc7ca9d266512677fede5e5e780e34c73d922d72029cd79e731eeb012f65d7abe44bd4f9f36faffdc7cc2afa87f8f0c9ed4de851445e73f2bceb4fa4d90ee3e33b5d17692c7fe500fa965e59a62288104c402e8e1e7a38f552e7cadd71c80d7a14f468501db4d321f0dde89968d8ea7739d3661a17b28fa184c5b7fe2c1b5991138a5019d1261f479510daa6fdd50c7bf73b8f65d06ccfe17863a50000016e000000b81b2e1a1b6b67331612557ea77f54564c0bf6a499fb88fa8087a76b936ba4e8500bd56d0600000090f70cde5bb951cae21ae68343f24097139b4cde3cd336281c6337e3cd58eb8e847565160a6e4b73f304a4964b0df6ee807ef3765c443a0c2591721e1e2178fd31a33fb658d24d5d4f0ab76478a41079f5e476e0808ed82e7640dacc96d168b465e31af599a45f44b4c2c7628391cfc6607d346a686d08e9cf9542f79319f009e9251201fa9704cf0318d6bc92c40bd4a2000000ae289e7951ab5706fd8a63ddbf72baeae3018f1ce6283a434752d4616fd8719b9677afd04f000000868d236f954fa975ea2b47fc374d2fae689989bc7393c6f8137a2887cf86b984796c55afbb3ef2ac354038f3b7e229d190e87b57e085947f8e86de6d48a900eb980dd9b5513e8493afae6fe37e57f979f34673b9994c8ba54797de1a8162bba20dab19463f980124a71d3ba17d5c23ed4749a29b4dd9728f50733c4d1f49797fe68d91fe07af820000018b0000008603b192b8cdd96185017de3883781f72b814aeadeef12edc328eaf95b41e546fb660568d70000005ef4238b17d2e8ba64a67ba304a8c1dbf7d6d4bd29c22ecf3868ccfd9ebbc655d188b2506b7c45a55ad0a0fa6ba70feb8331177acf902fcd25c8cb0dab71c4d9d14d0d358251b7b33c78894a25de165871b9eb66ffea3162062f6687a42921000000fd2ad7a6965277b4f5a3b699ff8a5b29ad2944aaa1c280dbaeb1f740073c424d297d21093c000000d5c6f23bcfa77b312f1a4ed9e1959fb478963a3012abded026c155f45e019abc5e8b4c9997602d653daaf1e58bd38969049113e9f7c293117eaac3dd4b9cee87cc60372e1530e15eb1d6595af4180762694b8de1d9c3b514e082dd3d33b2e45dc1b22b37c26a732d5d644774a0a689b1daf35222484deb6120f8e554d2fc68199e8cb337cbd2edda487db8aac3e71aab1d76f4e427f4ce20efafa49fedfa759e210f68f01c6b26cb5711ab7fbc61ceba3bf8ed755acf4c492264bc9d133d92030059dc78acc6bd095690861f82ea1f27aaf2861e68f3000001d7000000e4228a1360ba95c8c5a4c217ce95b4e4641da9d4469c238714b846e4ea01c467b01d00d9b3000000bce56c28e09208cc1ff61aae88d57e8922ff8d0dcf0328eb2420df09976f06e217a5b07930d3a8c10295896318872c71b0eba3e7b4530308aa7c00840365394aeca97e778070727afc1ed05cba4ef44a0c1bbbbe6aebaa95077a3d8a11a11e9a92b82c1d49e6a41a8b17a4060c385574e496b0d32cb2880eb1059dea11ba2a0376f703391ffd254d2b6194240eac03aa58aad80a1de8c55ffc850da9b497429b563428e4d0b9067727076cfb99cb6e3432b4981ec0ca66017b2349d902000000eb17b236895c2d610c235ef793bdaab50db11957e2ef4f47984233d536859373ffc8865976000000c3f0355874dd9452301aeecc656d3acae4bfb6fcd842876da6c76a90cf246f3260e50b7b87c3e5eae185bd205b24198924bc481a54f3b4f50765c7df7cb8599b9e0c1c6b3fcc06b4ab0ea35af130779f5480e3abe4b685c31fb362e8b0f2ee095f7fd29019ff46dde97067282ac2507e448f3efe5d25529d07b217288d2c4a1a7f01c65f43f859473d3d80e23f0c24f523415b6f85760559f4db2a8770040639dd36f4606b43fbfcb399e411c8af18fbef901280342be25332ff0df3b55de6d6efc80d4b00000212000000f61afa8bc9d9abe8c86162d84b4477a9e9559382155a375477c832cdf95df0b3de3b97a61d000000ceb49166afb9eeda17229b2d6a2825c370bf3686f9d004f9a9a7807ef8024900c67a13b62aabad9a0ba749458f412741aeb4f83e925def2c136efe4271ab65e3d01077574431d7909725904274611b922c4aa0a541d74c099e8108cdaffe9a5d08c8c76307fba3e917508964f041e329909f14639260a8c7910ecbb73f217cebcfb15756563e15b7465f0a109120f126514c817ec98bd90ef7eb3858b92040c1714bb349d8d9f7325d16e8a934f2293fa24f6bc372bf0332c27329e0d274469ba5df8fad1b7ba9bea8dbc63e5c7256000001142c81af7070047d781028f0bb753021a1c3846fd101cdc1709f26ff0a98551f361d50a996000000ec84d60d6887506f221e716d8d35ac3550ca5e4758a402de0ccafebb819af0da1ea54640769231dd4e9ed386b6e43b97fab716a830cffda3306a3f934a334c02ed97cd67acd1fb6a2d219465e4797c85131524ae384ee7fef8a08704b4ed825af022eb2c7544189667491dd4aca5862970f1c10cf96f5e7ece768d238bf21b5fe88239166c2038d94a036d28343c4c5a4c41c9181376a6cebb6e223b3adeb0b1a7d23a378508e5b4c1fcbaa0133fe435b8014f4d6b1b7cde4abb398172b629588d66c431d97f3f5227e2c4c5d85e5a1fda0bd581b4cfcc67f87921401650765af42434619c8d0ea17fc3ec998200000105000000aa1d54e58464d34f3d4f94a00b141257d940565aa6da79c538bd5285035930298f44ce66ec00000082615c8372b73086ef2d86942d1f1f77e79acb0f44476d048d5351c7db18ceb148add4271b6f1f0c124841316205e9c8f27907f0b115f2f2b936f3ab4564ce5d742da0a3e2039f5de760e0badb7359249b11c5400e6e192ea14878dfe2302b8b7db71b68f0ef3c8bc0ca9f8031753a3fd9ba76dfa800e393dfba6ba2d0ce9f3b1a20cb0000005308f37fff11b04849586a80a585e20355c71a49ba87229813d60de59923871b342200cc390000002b2742797a65c1d3e8daed93b6679480bb26374cd0c63711a60826d328ce6c9f3faac39db38f90419b0c55ce000001fb000001280d86a17bd5c00ce4418856a6e2e1a882df05d12e025b4a56d6b61ad2a71cb223b35b60d10000010090d363416e98c0f3144edf61679c13cd8894b682cc27312fff510b4c6a74e02a8589ed142ef5ffa5bdc2126151745dcd1d4432380e628a16c08cadf2a245bd30e0aee776594847ca8c333441ecff799b2f38e58b745161cbbeccd654393593abd747afdd7582a39606d88ba00217386fbfd717a301ab3d84802e8c164cb80bd27b8900422b519c4cad906411059185cd186030108770c0a4bf341a335901ddbbd6460006a9533a3c5b9fc193a1cf7e4ad7cf690397d9291f74b3f12a7176aca180b6bf8b44818cc6e6379459f9a484961a1c2dade7a6336b9ebd0ac4114fdc03d8477d4cb1776abaa855976fd84480321a170000617e0cb01cfa6eb18d360c6e000000cb200138c53fb6a085091681a1ac0765bbc2405a8b4c0a7ecd4df62986f1c7a4efdedcc86e000000a354998963cfb528b1a16c7d4b9807e3915a29c3c6bf262dd346e449d5165679bcb6f856dc3a235f0cce40cdb139bdaa93291f54d6019619191aac3523ea3d17b12cb21eb8b1b6b13c49fc2b380cd6a8ee95215cfaa8e9173bd9aef68539f724547e8692c6b76f48a6d92b79db1e0df4f6bff82f06e607294d84fcfa120217a88862b4c61209b16c7611668da0d50f895fa00aa1cf7ebbcab1382a98c198f786c195d11000000128000000450ee3fedb9bfc3f7e5672d4b6a499f53a1430ba6c75b1855d49ee227a111d7db0d7addddb0000001d6c4612bc58dcd95a945edfe26e25009fa7bd5833e71b03bbdb4075411c000000db0516bb73cf9fc13d9c94c8fef11cbd884d5ebe6e26a3e3046339fc16b3db3d90a22bd2f2000000b3dafdfbeda0f7b577be7f3a281a1800b36f28d85c7cef7b48ec06650f98aae8ae0ed0c1ed50b3987808c1758b8216ac3b704416b24fb325a33be81b35d1bd238ff6d96fcb379933c7bd359fe94ed826f9de106267557372ef29d47b67d4366fff022c01ddb3e786ceeaadcb85ff0975a6d882c5076f985fa2e19a4a0a5131bf07440550642284fe2d21fec2a7791ff5be3c24e4a0dfdbcadef77d4b94aaae078207ff16245b4d3ec687ec580fddbfefb07175f40000008c000000371dee4f7313fc8095bbde67d5d724dad5c5cb19c8dd0fb167219dfa7683b8128ed0a1227c0000000ff473012bc3b79d35492be90eacd9890000004d0967aa2dda64b5d952e840bf5f2afeb0f7d54ac6e690c2ff5cd00e83544818f3dad1694100000025eea73e9759bfd4358b339fb78cd118466f96892066dbbae1651c41d9db9b62ff4c9fba358a0000015f0000006a2b472edfc596b953d09761c7f5b5834f63c86bb4d1ad1a42afa788e0be854dd36cd51db3000000421ccd7c30b9ea1b1cedb8cc5b262899ba516ca51dc4e14f22519c42ced09f3888d2930d83a85cdc498031a222526ef7f4dbd27aac1266dea10467b54614194db12141000000ed263239846d27d442440d1f01e1934f130a33c005b66f4ba74475a0b523de87c22c54e7fa000000c55a3157d7c256da4ef5975df4d6c71999d0d8880526e4b8e9e6b48abea71f4a6d97cea5dd95fe79c5ffd3ebb843f1c9be98fa4564ff1aa53ad043ed297b53f4cfffce626784f5c4abb54437e9190a95e18258245426770cf95e4bed1dc604c9fb1f3535251b778df53e251da808bbecf3594b11c1be5140d198332974fb7d9c08d59af8491dede0b4464e5050a43487db00ae4ad11649b765b5faa4259f9402959c76cb5dc6156ff7d33ae01c5d4c70e25bcd13ec6933ec1bceeb6a4c544f87186d2b729035000000d9000000910139beb488d89a2d022e01bea52a5bbaf9298e524b502df6e13701a423a49a2d9eac4721000000698d6bca1a5666a6e1205f7f3372990be03e34ad260c7bd6ea2a48ea2e96b4a0ea3b15848f92e68fce61e61783b4beab1413b3a515a43b500fb3f569f1efae02c09a30ec8a9f7970d2a10d80d0ff8a6b8c0a8efa3346fbff968178155263683f681f3982079f4761290c00000040279c9e3bd13c318c18d9fa1b93842aa22edce489d7830de81839e806ab784c48b33988d8000000187dc10059e3b2905fcb0b2fa4b3eb8bf61e52656d0673585600380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00be084c540f6c3c3afac11447019011a6ef0aaf386781b7f649ae0771850de38b447eefd5f28eb7a316e19fd1c7547545933af457e48bb2be8116fe9a23c7447ae33f30031e2dd1b96ef1fb54a9dcf788946d3136c92f1f3e0b3625416cfa07d84507732d4569f2900e26d1388831db00d61bc869e16270301904532bacbe4037171491149242aa06446ba0fae6753312565eadc70b82384b8b0a8a0d194f3fd7ead40bab5534078c3be0935ee1ff01d000000b02fe6865ff5014f51a217e6625a0e5789f3f476ba3e410f75eeb35b946f6be8693a1fb7407684b05f390f4dc0596f97ccee2689b3aef29596d59f1121e2bd4f3db53041d6f3ee8fd4307eec7fca4c000b199adaca513f863bbcaa06df900a08b50992360a78088905b01ee1d48304a2cd084d7821a3c566833e40264b8a50a2f02cae2796cdb66185d61738dc03a70feb0e2ee07d2ed3c5e03b7dd4603f694d0b31687199bb1b9f4aecc2d52612a6725a000000b0063b07587fb70cf92c5208e2194f9a39589b6cc1f41dfdea58273cd9e79097ef1561efbfef40d0ca0e4aeb47a63e14972ed70028a6eec2131a4ae4d0a9a0a648b2a9c2f6995518e79db9d7b12f7f7c0959c9ec2a0e7d7d13ae282e396c62e7871cb9477dd5d0d75b7200c0866ca5388f286fe2f4ab4e5881b9aa6f0cd1fead205b5b8f71f5d04faf76a08f3e56c311b117c916f949eeb84ce71953faeb366f46bad63ea7ed19788d15d1442fb287ef730000021c000000b01932b75128880c533b21583555f9b347fc0e8daacf94cac9897e5b8aeda858681aad5f5e83c29cb2a00d823e90a6044345442ba25b9cc33f198e60cb7bcd87d2df6ba91d1ec2d347e70dccab21f2e77ab60968471bc5f8f89ac3278bb5af451826f4a9655036f7dfdfa85703b7ae9eeb2a3700f278bd27672a5657cef6374d25e8795c7b4630127d179f5dadda7392081f0fcee60d0ad43bd18437a2cb6422cb85117441198cd0509f3de96fe0f9bad3000000b0043f874c7a39c560b3b1c58df1b14a7c542a9956b78aa48a38a2d5204a977112640891a3447a83f34ee2a16ad59f6526b500e0c16900a0a1df4a57bc330f02f9692c1cc0d6af07b35ac0748ffeda9897de4368fb7bb4ea17facb14602b9482dc118621e324de3ebe741b30350eb489f2057cad9646d0e7a01c66a766622c54b0c643da0a7a45d086298ea832a76dc1730d4a7564dc792c4314ab4e05c4c2f14e6b93ec4ec2e47404c360cfab3b831cc1000000b022d10f2075754660ef9d99fd7ed485256b6cc4d2493dbae86584c2127f620883fd332c3e8ecfbea4104ec1e3b769914054fbcfdb5db46315ee71a0079325574e9f76d776695cfbc28548bc1ef50edb13163b375d415c806bfae4f14c56e38248b74a720320adf1e1cdb8690b939cf85b20224ad4602bd49812fffc1cdcfbe0bfc5bfaec2beca0a4422b76cac7ad174262fb4acfeaf56da31e71355b6fc8b27caeb5942a400fcfa7151577bcb3c54dd480000021c000000b01d625641dee974c06f1136252f45bf97c1bf401a73daccb2a49e430ef53a6b530daf63f658934c309a7c4dafda162f344af27e592e71b26478c51b490df3e0de3bdeb313a4dab4f95e9f1d89269cc3ad85865d79e50af7dc321bb4fbb314b48db5d0302a31bd04ccc033f8e6b1e2cc540d5dc0c8d0367a5f63495fba5135977163b552e26909471fae64213f1bd015b71b5159c42ea25e9c5bb53c1ad6d5bf7c71b97d8e0507e3edc992460a0be2d54f000000b01439f81bb8a6a440738035730a3b182cd0da419c38ad88e174665a7abba0bf5380d9049703aa7c822d77756a4d7cfef98c32e2fa52439fc0557b3bc94719b55b051e2122161890adb44475eabf6de17018d491099c23d8d934ede8b6a0cd59018673b1a30a458220722660dc66b156e521d63d927b24211b35afe00b71158c74e3cdc7adf36dfd88046aaf994187f2ce17af28df766afd967ab6a7ac4c41d68d2d6aacc18b069007f6a82e3dc69244bc000000b016d66a1f000da86713f5e08834e30550996c6db42237aac67e530e47de18764f867efaedd3d795df75a7a0de9067dd37e2ec3009f5cfac7e7d9f75e7f8a09845093bc077e873c5006070550ef566c6ece1623a68d0214c84ba44153d36dd4638caa2a6a89959b06b51644fa8632fa490102ee337ddf0af6e801ddc126cac433af4cfe5ee5c60cfccc2c5c92f66df341028493dda9effead5bf1f659583f63306cf3477a852cc060d109eb2f2965613490000021c000000b0028c812cdea2a5ac5d1c5067b3ffb73b427043c9a0786202adcb0e750808c102e3860cd235dbc519d9677492ce8288d0b34f25e596cd15be49c32f984f4dc70c1e2b1706ea8bde3e258eb6855bdf29dfd8936a8b0a3d10927e8afcad8e8095ed8efc6ef8d29eef85875c79e8224b4fa4140ac42a9ae8f6160e240db13b4a750dc82694733666a250a2d881b1c81f9426140b5ab7df1f88bbc6d5301a398d819e37fdc20e941c444191bb14ef000fed0c000000b011996d8a35435c2527289dcc9e0f2ab7156fbf2118fbef9a7259581f5ac756c4f8c98b57564bea3451a9b63cd4ca60c355ba9cd36c5dddcc8478da141bea514b07bfa2d18ec5145098529a42c44a86068b76255726a5678868430ec965f974986659f0467b61e3841326b2d2241148ff24a626214e700dda4c17607adfdcb17862deb3697473411673a52579af2d74b5111661af404e0901af5aca60c89d007004ae2bfdbb4492c1738041ea3a6f8c5c000000b026304d7c543dec309e2f4f1c75d7b4e1f21efd85b2de01977f9906e9c730c8faefd734d8a596b9c6246e5063ef4ef529566e0e8bafcfee0d4267dd4cea69f149dc8073a5e5e02d509c82c3d3c884e5379fc6a92c98ad0eaf9bf60f161e6df57700626be7547596dd67015995c9ee2c442be466843a1fa55851d5e54eda40a45235d6878e3f0009a5466369445d75e43f02c6a6f6be7da9614a92f53719ded8c3cd62d0c27e1cc65c36aac593f09c5a9d0000021c000000b01c7d0b2a71ec4ad23114b4ab4e21db16bc08ccf4e90fa0d9db306a8fb520a0c214ccad54433b4dde587e58e5b6e11926afa56f10ec3acd1cc5ffe8040f08807c2838716ff78709dd16afaa679944b54d05bc6e61f9f22c71a2103915d1e9061a8b8de2fcd96788eeb54f7df4e2dbd22e037b09943273475d7f8a9f3eaf4290774f2cd073673e3b764c78b640e88bffa7158acb28db09efa04a51b83282475460a18b8bd9cd80d60b79fab71540c19522000000b02157932c75ebaa581fd24e47ed586ffbafbaecd1b1e8cad71f31ecd8e7a5f0045e0ee612ee6c25d8426dc21863a8319337258482179d722a1fe96814300ab7aa80316945bc3d5b0b29da57afb625a8f8d0edfb953400a2da93b041e897dfd9b97abf8f7b514fef89e427dc648581e25d1e69a06617cddb127728d1c929f72b5988197e3be9ca57e223513010b72b0e5f273b619761252b241db97cf9b04166b0955ac052043d593c52e29325f8f9d88a000000b0128a9bc059acc688df860898ea6efbd9a0580b214d922aa7b0ba60bd79551bfa238c4fd2cc2882eb571271c93b5a363728f50675f24d7a45acd9294bffd802de96b88a3eef2fedbfd5af9efbe6d6844b81af219099b8fc2b7dfbfc9006aa20f4c9dfb26114f9b13b2bca31801be252611cad5fbf6d19389b89e07633f451191d71ab290e2eb7a223285374c480b66cf42abff38e5fb4bee6a847d01f4ae02630a2c788e2891d56b1f557af1309adac2e0000021c000000b01937666b31fc567edd26cdbabf17c2a684111245c43d1975a4f6cab00d36de61f82b9774e153db18bb3d21b6ac5617a4657d27f571e546afc29b5abbacd7d698d3e9b0113140036f0c6011900c562e2bb97abb204213ffaeddae514adfd23e9cdefd649cad4b89d634e34fc110493df3063406ef1addb0801bc9c5bdeab1f27160ec9503c3f8b5fc008c6fef45532f9c262c7e78ac43c716d00d4ee472c27d78a26dac527019d868c27d64529459106d000000b02a1af08ea7e13729f019a4b2bdcd87f175810059783cd59374ab4ac4068437086fd0fa7ce1655f3957a31af9b58b686bb77feaf9c06a9bead6077b87636e6a7acaa494f5f1f12684b5fae3739d7121a53ffb84ced2c488cf02fd972d64c25823441417249d8a9f51e77700584cb5aaea1f327093d929c56194adc4d67fbc88e0d238c2446f6caf0035dc0f346cdd15af17e168aa7adc85326333a4eca4c88194e03c09593041bb906252afd006d7bb17000000b014827815ae61d548a8c64d9eeadb2dfc1df0c13670b97a4e32002806ffb6fb1d58020877e6b04209a809bc2d61704a0917b52ecb6b6e8616146efcce4af7e5c8a924cd156d8d12946cc21378ae213c61f4e2b1e7dbaecd34002e8db7cd228043fa34750407cb65ba545f0c0d4ebf7d402b801a3391b1345363c102b3331632f2e6569f47fcd5954a127e3b27b01ab9ac1beec6c638680cfc68cb07a8c4be91afa9063af32c2db9ef948d34372837fcde0000021c000000b0111945a9944604150175593e52275a9537b5a85632e52a0f414ff2072ec7bebcb17cea36ada65ba9e68b0c02a5a4fd555e52eb64ee35b84e40de5a269aac7b84b932b73d5961d7a0a910a18502973f6ec6f802676242ca042ffdb8373ec59b8afc7bde5627d481439b67a615054106311a98f214b02dfc223e6e50d6d68b601ebfcdfd845a81a65900d9ecc335ad9752020144f7bf592c89b6116f4a8f6dfdd856c60b3422310943bf528fcdc8bf4306000000b02b2226265e2171eaad2eb9c16a849ad5e959ffd6f9845b3dfb61888aca6083f1c2dbc8378f86a95733d5935dac5af1cde6b21cdf6cd5a96f5b1c2a5615fa1d21d5220304896bace4dff32ca6304365b17634e7bffee7d96c0de65c38b85057aed0549b9d799fb74b490a371f5d17d4d12f147068820586e30b503a92a1303a8fef1c4d70c785d6c27bc9ee657ec436c72c2671151ec34473409ac458baf9fd19889435a56738999df1ee54c816ce6d42000000b018421c19b9eb7f3129db4cde29851264035b9838328233c56774783a6b75391053768f9c69fc7e1fb625403ba31e1f1baba988d9e16d478d568551678a78c22adcee1aaefdd0da7071d1bc3424ce514bee9db687fbde4a656f50bb83ac9c01f6ea319e03f9a563a9c82f0b8002c3f5fa0c2d5c8de822fc80187105bf126a640ea3425a92095a23e8b28e1a42dcaccdc32b97fa0c34121fbed96afa38cf924f096390c995304e5dc984f3a6cc015a02750000021c000000b012eaae0109f0c01636f10fbc77cb1b2b8f8cf0f23e63ddb7c9cb263810515aace00edd32c4635269f5ca7fefcc5c9e92ac1a24d68319d7c0a5a2b10a93308f6bfae3dbc785fa0c6d0c58b84b665aeb55f420e810c452ee6dc34ab59c22b6c44db877746c51bc6bcd6c5c099e02146b7624162dd6e6ee848e376d1c67ef5ae7dcc6e854bd29b0a4cad65961b1dacec2dd095493dffe848a6a98a70bc1ca4a27b7eb12db26f11d2423caa24cc06a2e015a000000b0103c8a3ab6a8a4e41dbec063f5b5600184600940054edc9acb357e217ee323f68f9d121ddab499ff1759e39e844fdc8b3f82e8a82ab8102d8e73cbc7a4df99ba1d1236b17e4dd08733155c31c157705b164a8b7e16c9971314779ada33b2bfc929342f0c47e514209253ace91281ef672e41b80d7a07bd647fdcf7de0acee5f35cb13d23bb731b30b64bb399863531a02a002224e5a52828c61a3065b3cd3afada15871ec2ef44ecfad5808a9dae515b000000b02dc2257556a830ee3c27b6f6e0eea40b4f2ec98a56e35ac0974ec17253230c9843bb8780af4844e4e2c188562004aeb56da44ff46b5d98f5762ee2efd4a1c5f2a1d0f6e5e87a4cf57de3b6378209b215ecaa2b6437bce7f641a41a9c3dd752dcb98ff200331032c4ad8aae77db3b1fcf07516003efefa9577593e306b38427122ea081afffcb5b4baf79165f3b2e55a72a3f399c6a402f886f430b3f3e80066501465bb507bb84cbb89754f0a36dcd6100000eff000001560000006201384644d824f1ada8e2b7ac98b353031431baa240856ef922864956e371bc4a1fc2a3290000003aff7638b05fb40fe5f423ea57f9d9beb991af192025df2aaae2f42b69031e6a70c5ecf926c69cf8c3c2fe33063963cd134d4929d31d65dec1799e000000ec285a9f20b0cea877b23ea852ddd40c12aa6e9cc881cc6aa43c51eb38047a01211f679228000000c485eaa325f808da4200da8d2eb88ff74941b1bd0b1454d8bdb9a99afc84f828a690a26627f87f81b88ab11c22ff712ef4554a6549f78e6ba7355fbe04d22a0744d0709808834a1dea3c2923a6f3941921952b497f8077088bf21530a0e0855278309ff4b0506fec5d408e51986c5a19d121e7987995e099fb3441807d8790252f1fe9c9813b00c715954c95db28d3faa19c71d45715bc44e0e58c768862af5ea7e944555ca687dadee0e7042347e939f3cc35c358550f57d5de7073c473029cb424b7a8020000009b00000037019841973483936097f73d0d8885e82133fc4712ea9a70b5912a9ab7e9f631f39e1e3cbf0000000f83dec94089ef54ad35f2f49f16e9350000005c1cc186ed43f7f5a005fcf2e475f3e9992f98e5cfe7eaae7342dc4f74f7b436f809ad8e4300000034194f31d10a1ea6952f4715813c4eea5bf0c61d2b379f01e2abae04c502a1555d58ec717f5cefb73cbd0fdd0f6480631ac719775f00000149000000e701a61235e0347af95fe3b72e7bd7cfd4dd6d93738ec44971380d081e18258b36f9943e46000000bf9353384caec0428a595d8c8c9b4d0ee9d68c2d755a6d0700ec2800445db50d0b7d1b7f0017011393fd08afd81e7a041550f80b2404416132eb09112af349b26a974f3d1af46bda7e860f6fea6d511c3349121668f6a80e1dcf074c267c3f13ff90c6e5966d1101bec33a524166dd474f8cabf1dcc266875696a54deab331d485ed19bb8ea364e279a996a2ae2b18b8a76acd014ef96e7b9e0a8ff489d7da8a90ed04e1b21d4e16e1fa0e70a0bf0cef42440ae38d2b1955c390c57df3235c660000005a15950933fb51a1255b60d25c05c2b502cc4d7a045d19f1085b48e9ed82cca6b455a9621700000032dd8bdc2af417e65ec65cb0036c31fbf4f87bff5af8c44fc11d4f41c20a3cd7f0c16674037d3386c6cbf451d3f731170dea2e0000017f000000a61def4f93c02617910a1e9655295b15997c3e5199aba9904879a37d35c08790cb5bf597540000007e1e04408818d56d75ee804cb71573a155823f4e729416e4b41a003166309dbe94b37243faaa71e768dd098dca8043c41d732fcb58bd23dacc0250081d65ca4b1e58a5c3d2073ee82d6549edb2e063927117dab8cd2944d69c8c1cee4dbe2ff851df73ec17b6cc78bc51d4a2fc0bcc123f98c00b59126d08070c6ca15c5f65000000d1043f6ffbe62ef61588e52ae82c8e60291410e657b6e48b4b49c31274770d6deaab8dcbe1000000a969097ee3e4c07914c71a1d1c4e5971943fff2791aa02a8b1b9080cf0a42bf3f41fbe0b96c4ae28e55d0ade99f7569fc97c88285f295683bde221c31ef625fd0fa904d6f3a00f6703bdef7180fff93913044b77b5377203578d0bf9cc3cb5e4af8ca77aca5bd0504e3ebf28d800c3bcd0d1b7a4d8c054c0eeba9b910da49ba40590e0f5602081013eba33d3a31f1bb7adf27b3549d7e8d50de03d5d8cbfa8d3d87925469f730fd5d220000000c300000073231944cbc824111414e0fd0e04511e52b01f8441659457bc2954f73ee870a70bc9a4c0370000004b26de706e4197eb7523ed738a8da7039dbefb8f88b551d3722e736c7ac00ae34d8575fc796ce86580d6af502b6f6fe9ed48e9527b10264f26e3aaddad537b967a99e6b34cb06a7d224f22e30000004810705767ec1a422631a898059c643fd54765b76f5c71df2693c371dfcab1816de7bbfbf000000020abaf14a480d15ad6e9d9f50e1e0bd937e4e70fd2060afda42767a0fc2fab5794000001a6000000a915eefdbbcb56cfa5a42b61a0bfe9b3581fce9b11d255402231951fee1c67bbcecbd281c7000000814eb7f2ffa1de47d109c1bb0ab46e4faa4ea843e9fc43a7c03672ec1be418bc1c1657c261712b324395b78fd275477cf61c7694c0ad9aa49d654a049256f4138ea0953963353c8e5fd4cc5d0e02e803acfc5f8178057798929f349129c8447a3cf01e952acfcf77fbcfd2346feaeec4247f12a3241f63a3efd6959954f926d078f6000000f50562b59c27993237b8129178b71166dabe10feba925b2ef0bc4a2647664ede533c6afe52000000cd1474623b981dd1ffc25f6820e181f7d26a52e249234a9b3dee86bf834cbb07a62daa01e59eab50f4e7c6a49a624036f1fd59c2b25abbbbe17cb5cfbcda935f7ca6136410823e47e95145ceedabe242e27fb4a77d7887672de97e7604bf51cc7dbf5bc5c23b235673cdd702fbdb8b62d04c764888ea6780fa16705c3db4d180c9f6f6d69704b0b3abe0ea1bcc19d54afebab1278fc57b79fc5732cccafae502974c5e57ea424aea8b3f93c8ce601e6b18eeea0ba5ddcfad5ecf0d625007c2b0fcfb96d98ee0374b9dbcb865b9e00000016b0000008f24d3dc626e2df668a688407523eaf90cb88c98f541a831ccfac166630d6db197d41eac8100000067ffd1159c3bc6e485ed4836452c48ff5872529ce3db7a4ec0c31d051275575447e5779260a151ef018015c8efd94f89141738efc4769f7f3ad36e4e0b5a3b638f19953daafac44e588548419df11d67d5d10b1427e89d45180d2926726f9f2e4c703726d574ed80000000d422f6f9d38ef52a58a4dc4db08862682114c6b852339196f6ea4113617e247bb0de4afa7e000000ac1a854bcf4896820bb6d71d54483b5bee7135edb0e2a2e5068aebaab2ca4e9535c4cb15ba88cdf2346cc3c714cf5d92315839b563f9b517fe2fa4331a84429f25f8f81e18c8d37e90e5870876ff5d1c8f8d0fe77db9ad6a413c11b8df6c64b17bd18704a0128e74bac396e731864a75976abd719f1e6e2bb7ad09a1952ad9be2e1c4d3afc102caff2f17c786d92df0b888e67cab538644ff977d40f915df97c4226d9f3c0bf05487c44cfbe14000001d4000000f41ea726ce9832a44ef581c707055f3e3eb078bd9ffc87a7986de2f78e808ed0c6281f7cab000000cc589403c03b0960a8bcf4a8572972b1282727202ec819d4822d69e5de2aa76d7f596313f89c5a4cdda52a3458e0cdcceb84667c6ad9c88b5358b326af16f67386baefe460f91b5775c26f7c7c66c48e60b7c01161eaa6382a3ec256fcfceb16fdd2efac1ed3e79624bb3b3631673fe732ba31ba2cc9b15c7e2528fc87010f8741dd7d0addfc577d74b0fe0faa6ff0cf68e99bae2054bb9462222531ea2f5fe8f2f38ffad40b7bbc00dedd6b2864990a45b2d7f806c05a34496af7a8fe32d90f4bf915b1bca0d6696b73d4bfc3000000d82e81144a1fb567afa20fcdcfe8fef115801905a5c1b21ad2a137777e9a9e02d225b1c9de000000b0368f4d181cf7dbd33868cec8e741fc4cd47d9d2749e6f2e4eb0b0466cc986d904451434e05a7ed9a09cace8aca220e2a0ac385ae5b26340be84444aedf2507727095632006984d8096f24402149ba26ee8baec701033e317bf794b139794d6436673a7fae033d407605f2fca9d7099491e9dc957cb7737bf4202f62d5ce49909e2dfd4d4438cd13a42a1bb290bfc5129445c4341cf51a51d070aa39debb2822267ba549e0f15571e21745d619e54b77000000190000000b429a0e4041fd4e7eb4375b506b6d7dea60f02e80dd02785ba95220b8f3fc2702c6c0dffa30000008c27cfbde2231a4f04ce1e1451d955eaf662d302c6dc0062565751d6534fbb966ad4b2621b465e698982f1d8df4339e84263dc8e26ef6c532c54a919c209778b61d3218ec8dcd4eafcf7cd04e1c6fd0f4e13712efc0fcae86732b2b995bcbf00eb0229b61d5e410ae84fe8874a5c05e96af66b4fe5de57746138a7dffd8c3eb3c6a05a265e1dead28d89f17e7d000000d41ddfd6bdf9b673f023f3988aad562675c6cab589ec985bea62b5efc6b64c44fbfb25023f000000acffdcd67414e00d2eb7b473345f54ffd3036088fcaa0a28d105441371bdb9141c2236451c4d9ed87804f047e1d3859635acc15822e2512ccef87a1aa72329b5bf591152a77db0265333f582ab56a074f8580742ff7c70e552546d356072d7667538f15a280dfbcb4ebc24fb517c09606c9670de2a1ed83b07daca2c47adc531dc5863e1bbd274e7db2cdb915f0d9c09b1a333842c3e95192709f6d5411a50cfa0f82697e5c189071c906d3fad000001b5000000ca13919e6f5d0a24616033dd5bb7881b7f69c49528a36143d09922ac9d0776e0e65efc1861000000a25f25f9d0a75e98e9a14b798dbecbc7459a947b23c821e3b1dcf8ab88339054bc28d03585895422c8470215d4c8b12dccb53b377278480cc9433f9ddc12ae3b5e0fcdc61d21290de0b4c8faae622d8345d7080aa738489d289c29f6f4263b146794fb5b45e3a33c3c2fdf765a7b241fd79f32ee4ac5bdb2bb538dd5c4ff932590d6b5fe1545bf40313a4fcf036de2ddd18209dcf4d2446bd1acdc770ab69ba7e42edd000000e30ced5dc180e58b77c6cd5cbc215960147b33bd8aab9fb9873deaa58571423ea46126aabb000000bbe31d7cfdd244f7bdeb5e14bf8442ef0100bc502f847f855649f30700ebef4bef48be92f8fbe25b96e6a9f4ec24049ad0cf57ad4fd59723900479294b69dcc32e5784937b62141341909dd4cb0fdd59f85eb65ce14f4602c5c51485b90b7b0c797d642934761e0aa963669f8730371699192416d0900f526282d85cf232ecfba77583ac61b1ca187da9d897d86f942e8bd4f1250c9ca927f08b8afe8b40a8535b95612dbf51229b504e58c5b5712cdd9bb8c96ee6de4625b33452870000012d000000d402749b1760cb3568dece46058737991153edad29ebc76bec33feb59f4cae84e55a89d0f7000000ac1605a1a532e7f12ba58cb06322750e43bc860833d36e60e53399b6b3959834e90b49ff69c9dc1e2c461554ebec04da63ccf82bfaf6dd0f3377054918f89be463496612ee7ee88f817efe9c6fa8e37f39d12ef9dae4a37916b4143317459534c0650a610747d7d250bb9ffb557a5284aeea720141e6c7f1490b195aef7b5aa01c47f70dcf30d8f14fc11c042a1c69d796fad970920b71bfae0694079cbd0e629741316a1a7f145962e4cba053000000512ec3b89cd20d2ff6732ab8b4705acfc7a716aadedd69c3bf8c0774f6ddb7e55d297b234800000029254955c18d205e56f688fff36f4f6fa6c8e8a0970b9d1e3af7be8c7cc18b6c53c6c0df35458f6dcbdb", + "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x00289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc" + "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", - "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" + "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", + "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200289fc06781011a2807cb3a9a446a6db459b3963b0d34e57ff44db5a1d0f0bc00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", - "publicInputsHash": "0x00baaab13a492808ff573674e84ff0b711f479e3b98da9764726a26648c30bc9" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba192500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", + "publicInputsHash": "0x00efb18046515e61fe5ea99224aa9d9ef6b4330521cdcc698b4810c6a4167309" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index 9786088eddc..fac2fac552a 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x106b13752302ad4124fcf104f9675f27c31c9e83e0b930d68b99520fc0ad2d79", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b0092e3f60b9708a5c8f0b0e38703247905f386f935784e41e1b5761e462796ac8345dc77bf6d25314c893bf34347d6096676878a7195aee857a509c3d2e010579ae9c4c069cc9f6871516495dbde8e61e75846aef1e643999237a5bb73286628ba9b9c40abb7d1c5c6782437e8c37fad121e389258f1fe7f8fce17b7e851439ced42dceb233d0785502e95bf6002e949a1ae8acc67fe4b2e33cd04de86ae58c2f764a433a1fb701dcb9ba69b3c4cddc21000000b02cfc998123ffff79022c63bfa695c53f1a71e492983a6eb3d42e3122dfc7982726d589c3d7db78592644ee23a60fc6b5d6c5ba5f888aee5f22a0305be6bf8e82eaa908f78ca88d4b16244ceb70a2fa9573e07d7142ba31c0016e4e49e743c45c55eafa26e712c7cdab86320b4023b1df15132a40642ddb502ad8985db280834fdc7ff9416f1d638bd05cbd02937ed0e6069a2ec413889367952775d8038dd5e374858504a2b281f4d14f17dfe2859eed000000b0188a7503bf441aca62d9d9b1761e8a612e5e7f02bf1e3e5ea970de3beec0874c96fd837a5722b23189fdcf95953c5f3067dfe0aca381c873128cfd9dda28e20eeca8ab9c1384c3b5a62ce79f101758edf2ae08207c0538f4b969db3e35c843aea44b1cca79b6b1ae71bcd0b10007bd890195fca649a53cdd0c98d176e4afd77f60587e42807fecb33a931bbff622231101c334c358302833c5f44a23cd61d6a70af67cceec733040b4bbe5956381c01e0000021c000000b01b88783f82543308ac39ed04aa7e6cf986c4751df927c17dff2f468fd5ff594756e35c38b9ed7b8084bd6897a977664190e3c4ec87cbf3d7e0fb094c6010676adcc51ef1964cff48cdc456625e184b54700bb5898f546912f8ce6830c5ac0facf7306382fc128441aac2a1c15f268e9103bd0dc8e943abbf8cf46ade81f6125e392bfb56df43d7e32c881fda29d42f0524cd5e9f13749ef6f729aed292164fa362edc59f35a395e79554b115848b580a000000b0157117d66a266934bee580e7f13a17d806d4750d8226775cc8e9df32b3a9707a6140bccc408893b919ba4efae827e3379ffca5268395d119bc2fcebcdbb75c304b0185103170db64322e43e8f54a7d16b492740377d9c75872a0daf2cef0f8d46171fd9dbbe9bb44fbaf6314d471f9f01a162b428df98788cf6723d32c77ba7cc2da73586a990f0c82ccaba812faa0770dc8da9b6b94b479ba4705e176c45eecc897d453218fe195581e063941792d33000000b00e8665ce3d21c817b78e1aad7e81ea4b060f906881de795a71257bc049bb3dd71a89a1a48b36ba1a5d92ceeffbbf171edc3d324292364159304840f8884926cdcca792d2a662e42a165e137446c9923512c2f6b0ba3a9bec6d32d81731841ee8527ba42ad1253ed1bd496038261457e22a9aa6d3e0f44a841a154ed1b1e134060d00a87f6ab592a69c9cc44e3ea87582153878ba1fa8752496f65c7baaaef65f56d874fae8938ea339845ef0baa10dfa0000021c000000b015c90254293c9a63ed340c7c88b9cc037a914571e9e4e1b096b9b2a0675b2a070ff47d6dfa06af9497bc3cd7c8ffcdbe34c1417d4a68587b5d35c32c238ddf0e436b1eb35eeb4bf9d3600a21d4de84c979dcc612834615b6b06cfac294168e1f4fbe353f3b18490e23242bcf14da218507234b22350b2ab1355e37b9068163dd70c1dc2e65b138d3e9b3fd3b9488bc292dc162dda34899aa4d1a02074ec85e04546da1d0935cd5e03f950df51a60852a000000b0214b7feecb2b2f5e0f7fb566b39b4f2802b4e3554ddc704bb606f686c7799c3f059f4db2696321bec232e52d5c361ee54a8d64c8aadb744cada3e5913e92d723d1d4109f0b5acba2f2ef3d0540f151e3104b87eea9b8746266f953eb8d69ae9e9f09023059e778cff4a085e4c04d5ed2187272d4f147b0d3ad5c665b995cfd44e9ff3a5ce0d8a02e5ece0e41a95bb4a41b8207a932e63a7066169dec4249f1a833e6a9125634ea21d53ebcb6bad14753000000b0124726405870ecbef8341aaa378a456764b3788626b965e36da06732008ccfb7990c10abf05d891876606ce127bcdbed1b360ceccd506948838fb39a555b85c167ab46833512f173ea766779bce6f4eca85e8d65056766d75538076d23bfecf61e982b044e4228d5de0c420e6756d7e70d7be99cadc9a626ffccea7de80f97886e9c1bc0416ef4569ca95d284e87d6ca07a0b3a7c54e0673efc151f5f6c4230fab67ef4a7f7c634c5047b19c22db427d0000021c000000b0123e8e19a3bb85a36956f58ea16d5c1901f35ddf86b72520d6808506697fb71bbd6a059df6e815a058ebbf74c5f6fe74f09a82a39bbd574c3f8f61e6f7cf0b5b626c51e9b49490f34d230c53f85baa4ae13f196eff31164de346ec4361047b8318d40ec4bb52a90d792e1e535b2054660189cda63e702f48403dc3e209a340bcd91ad1e297e3052a8e0803b21c08488e0666bacdad237383b56ce969473c639e8a778ef336c253ee2700dd2ddfbe1305000000b002df4eeddead89c893c671ef1f0a4993c9b9447148fee6754199a225d4d12fa492d720f2117daf5bd0896e8d175d21d6125217dc5ac29e5f2fed0e1ada672e92b9c10056deec81ccd30e7a116392706886b029cc55240898ed11cad0f0b07aade28856ae7edd167a80584f24a2d4516c2e812e9e8251410ab8dfa79a95be98991491df76ea0123525d9bde8d75d16739245ddd8b541b9faf96beadf5a05ef6d8ec8e0fa9e35d8e0cf9cd892a91a9bb06000000b01563d20718b012b6411f1ef8c2e5ba6a304d30e7ea4a2b751849058d07977abcbc3e1a7ba424c5527fc373d2ef0210abe63b0ebbc3bd52e72a07dc0a812d51938fa22afa7564afed9762c364f77c7d3fd4455a45bc3bbcefa863929c879ceb12032f484ec384a0db3eb905612287ddf602854bbb649e49cf8b609f1466187f6b7eb1f1c5c4e3eb5977275356883a68db268e81bebc17bb0eeee937997d0fb5f00eb99d18624fd7e2d55ce3958fec1c600000021c000000b01d8d450dabac323c913e3bd4ca5f1cfb277216deb6f8d872cb0061be5ddf61accd4dd6ef59015bc500be68e7a3225a56963ad0e37fc9c9b83fb2db66fd1b32a370d85f96c6845813d0f8de201e89569aecf1da9c7888992c17dc9f73c8b70285e52bb85147a1ea952ca662db7dd3b9ae06c9f9cd59d6face5abb45a246d1bc8e6f38e14a503de9c65f4e3934d1c6ffcc2cef6495b730fe87a262b4d2b0389dc981e9c1f569b5cdc0f0dc70d2a7f9ca2d000000b009f5a9c85f36cc483b4763d510d7a42145c5631ba6766dc6c125b7bde5a75c6fb43bac70bf6a5d8a83c2c36aae17782f481ad2ad55d3697b609dd960a0fad0e4224a21bc851f9639de0a0acfc2ba237e8dd99e96185d343c28ff62d9a5f9b1db8e1db8db9ff0c21e2c7ba6a43bcdcc38094d09095e053b276361edeed8f96e81c2bdd33ba777f7c9a3b4823e6c9fe3651a355861278ce7f98acad4de5de28eb44df7c2bd9eacbfcc69d7168f135c83f0000000b01bf626e96161e588235a5c2ca57dba3f8bdbe41a9893239acab4627db4b1b29fea1a0617629aaafb0a21def0d67bea68c159b8032352758f0ecff93706194a93fad7c164d8fdf9323b427b44ff0bec68b16f9f9b070258044393b305a85bd915f489d3b9953643127f56b4a17294729d0076e47b0e908b990f1fa759c3ff6ff9194a879ce8298ac6b9e868a83c16b7ef02d2ca3c5695ccc973bdf45347b515edb76d2a8621551aab4f81f30b9fa8cb5b0000021c000000b0084addb29d84f3e51c1efc57d7f93c2c409d49cedefea10709bc12bf3e81b4ce682779febd9891e7ea5c9a42a501bacab527e2fe75b1a3836c56173652a6e5c31f502d96026537138e8c9bc7a5fbd5682a18fb8b9f88e9437876e6575ff67aed3199764929324fc00de42389ccd743e509f8673aaafe29b780d7527ce28c476e88e623ce4cf2387475e8060eb4874d5b25071afa216fa508abe35cc310403ffdc7e94651a0d85cf621f427f93b1a20e5000000b01239a1a0d27f232db4642f1960cdc8dd3a359878116fac9be00a5c034dc8f0c864103c613246999f5f2e171d5baabc29e90a21eeb5978bf0d8c6e3cafca18d9a6c53e05c8676e3e42b1eeac71232cd30e1984f1626218030c47a7335be316b90205f5f8b014709385bf47a9eeda02893114657449f38254b1c8d4916fd5dd2b95271b16f266aa5e6e7b10d931e63c84a0f6375db67e95b49f465c60a7d319eec4888e4a41f8c822bda4786a2bec901bd000000b02ea772409114606622a167dfb9c47702ebb0d833ee12dd955c80b22b5ae32134e8eef2ce068ee64f7489706d2e7900a0a7b8d0630dfe8e23597850cc23798860f44637cfd2c9398f3b91686c5d131f5b5d4eac3a4606b614049098c7a6d50f8ad88abe56f6e637efea5debde7c46c2da280332c76fe9554ffa96e8f967ee160694c1a1da8b2f8de3494166209801c0e60ce961f7dfd8a682d9391e8f41ab1cdd76cf47e56a1d756b529d1871250031f60000021c000000b029b036af3dc2b399b5e02d39884ac5d62f619511b3abd9c76e349514969a30a5a9d581ca0d060dc9d4b248e03215f2cdab83c219dbc00f3d667b9f3d50e7edce546e45cdb30940fe2979daa9da0209b6cc44455164e0129fea856b140360aa70567781c322611fa68f53f46ab19872a71f802af1d7092a2161dc7d0dfe9cb3bff1480e2fff040841750be72c11ba40812cb81f14afe6b872a07df11721dcf23bbf6c9efa22875f8a45bb57e707bd820e000000b01dd0f04b3bd14e06859382c91ea0bd9441a329f2ac412a6ce16cc08e0610ce66d682e99588bcfa76e2b4765cd8688c866c0baabab9ff72486cbb2912fe2f71f882e25a85ca98d52d77654bd85494e23f854adb92e706f9f75aced2010b763ab0d4300951dcf79f95d796a0d067e93b3c11e6fa40c84b04c527718ad1e573a6a9e8d3a792558455d128691d6ad0cc07fa19847a7b21afc64f93c06898246f6f69fa7bce7d5240d32e20d613a492e49f51000000b00000e5d3b8939a51ddda10cb8c409a5f4c7bde9669dc5112028f87c41be8d240e6b3102965406dd772bb3ccc630bc46a84d12b8926eabead321b037e07da5a729a787bcc3c6c4005c82154acf7cd8df4adac3edb1fd7c74d46ac6788903438b6651ed8a80189140840ff16ab7bc994f70129b85e23659f173ff6c19a76bded0b1d336be090d92a41628e20a8430a6bd71d3285e4dd5a73391b85a5d728da952c8a39e7c8df9e336588a4321da14d0a4a0000021c000000b022f99482c232b00a85346db49c69a839d812ab53e728b46aff2fd28761af3902c5d6e07832097f1b97aa04e3e427c3340c3753def5f5174de892b5aaffdff978a36b3173a6c14f3c850a57dac47d087e795dd6ba10b944e934330091d6802e2a8d223ea6d76c03e28222947a5be12d8d2c20951c830d8d1cb496ac28c50d929fb8a2d6157911caad0dea1d5408215aec18ce95ff3035b23b5bd6e6c94a4fe40d0eac076ff0a477a02ddcdcb3d1211941000000b000d4663cded1a43667e69ee050a12cea1fd228fe908eb8e16a6f64a275504f787ab40ddc4b0a1aa7b11e397cd04d1777da0b0b6d1c741bc67c10457262dd62507aa73ccbcc22afadccb5a2ef908d85cebfcb6e8cf7508e2ced4f6e3fa54577e1c46caec0b83297f2f3d5662b7efd25e50b6ca736b6f79a0dc412f50a3ccdd1fe64a7ec1ee434aaf7fb82d21dce03861728cc92b1c88fc71b1fb894daf5ab8989dd1525d5b2f2e50d75be18cb9125492e000000b026dde6a9a175b2798c089853f138c38e542f07d4e3f600c08c93119ad40c96a85bc535b4f18b421f715e7fe2e67585946a9b25ef15db480b024cf55f600eb99832ecd42fff0ec0659971bc525bfcf0e1e73a2f32b77d9bdbe77b9bc0a9df841b77b04782b312f7716e0ede7a12e149692085e7b47a31880da43f81d4ca3a6aafdcbbfb9b6cef868ea02c904b247cfd2d246706b6a5954f0c1327bf002f4bf00f7837c8f753f14d1fe2cd834b29a53fa800000fa400000168000000b00ff5a4920b9aca2a95778cdf377a8c3731b496b5400a5b21468168752b2af6cfd967ec22b7fe292f4723919b7217ce57beaa3edf1cea44868649b913ff0241ecb6ee404a5c56f5e6fdfc7c6b2769181a3e420918b8d70dddf956c5ea9cf381d2099b92e7934e47ba11527531a28b1d0623346e92b3cdf8daf24a5155a5cab133c1eb82e365abf8af47b93b35b4476c62051e0b32e46499d64dbec6234ccbf95b74f00e77b99253404804873adea36bd8000000b01e96491e93fad07868b3c3341feef837a9fcdddf633fc4df4315c27a7e30f64dced6a09417d5a3e38f131a0303b453a5bc68f6fdc65a2061636f440a743656bc3b4cb2aaf347435173ad6438a97faf134f673f2d062851fd42c7ad0db4df95bbbd25d8fae628ff339c55cdda408943e32f6c256c1bf02fdaf66aef1462cfad5d15b7f879d617b8bf5b81920cf19e4d8c1889408500d7ba37c864b8dfb2f8a9783aac4b9af8963ae236e1805c4119003600000168000000b003cd1e637ff4b7d4a03c485864c3fa4cd77ddb20ac30b8374244b262c84d4489cbf42d4ccf532a67bbca0ca8de2b86265330db57033d7a302e204245b650e870cab6102dad608124bec6c99a50afedbb1071bd4b78008c7430e8d0d4b573e902b4fc939cccc737c1c6429673a8acc1dd0f728c29ca214ea9dce7adf59e9dd041a7e210ae507437c670dbeeb242a9a5e907b91b7eb1f52c4f08f114f2fc3da793ccb813dfb4ca8719a09690d8eaa7e84f000000b0006e93b0692b580a78f53407bbec29c72fa56eeeae26dac7fc643edc80060234ad64b4b03344e67f2ebb7ebff602fb7e0b8727d14505ab77e0b23b29b1eac7c7535788b9edb02a62cbb7876ce0649cfb861c3015fae7f24b787650fc20c68c5e8fa89fea132ffd95c1c725c86c2f1f23214104a6b3c1959994d7af1b082dd708d49298b651eea029a94caa653f318a0e1815cd5ef0dd2f86c2b9a6dd0110af8d0618bc0fd836a870727bdd94afbd92c100000168000000b02a90915422e648f10e6c4d3eba5cfafbb584c9c6e02b703e88f54fb6ce86882167a892101424b46d61a2505463bc50a77e07baa27252365b81ffbe76f4ecc042b951067b8352a5d73aa2978b252ff1fa50467f9bd867928d63277bf49d76b0281a80693f136da096cf39137ba8d1ae6f0f566ba461908b76eca33cf3b12ffec1728552a0c50ad73eecf735ece22914dd2ad0adb5e1b1a0c2d378b7baa9c3adfb6a7d9a5919b9d3bb21479c8877232f8f000000b024f3015aad861bed22754e843948e14ace0b2816545c4b96c7b276f475f8085fdf8840777012fbffa32d8cebc30d98ec417a70148be7c45bc6b3711178a76628715ec38e2d2caff6e3e5a30a8ea5a7cd375707a7631b030a6c0ac0f9a3f972546c8dd97145a76f352af07a24456d9ded2788483766e0e46023a06bc741a58331d35c4e2c27f2c2527b3501973006a49310d2b308d3b6b0cc00a10ebb34e2a2435594d0f642eb200e2f56c1a7fb732f4400000168000000b023366979727be42a6d41bcb0d2fda3dacebc551fee8ef87115caebf5ee7a9cbc2c666287d9b2faab766ff8ad9734757fd1a71d4476c928c10da7e5b044ff94fd9d819b237f84924d262bf168a1e8629f860eff1559f2770bb32f226e6ebebe6ee2adff7b6412c481d591b2a74450de1822b961086c73903ac31d113a7b056ff082fcf0becf17946a9c1681c87296b6a90d7d5d844c3770951b4dcaa4a57c4cd7299109302f79befd43f8fceb8b4033f1000000b0212896c3eba65f9206e320a43bab88703016d41279fce7fa789df648e56c30d72e1cbdb682de3ff2fbb5ddf1d17870f182e3086cf1e23d7ba73bd9d7a336b719c13804f2e1116a9729b19d2ee248e86ba0ca9837edff0b5f0661beb9aab8607756baefb7357f9719a023ced84ce8d9e101e0a69bf6bf0461baa747351e2a928071eff63c80bef20a51028dcc34b46ed10dfdd3098155ead02a0b8ca52229360ab7aaf7354a4a5cc70650c53d01baea7c00000168000000b0283e26bb553cd71bb0a508c23381ffc2bef86463837b03b0117142f9a96d7d316db50888cca7490e8c5cbd8e598c85f90fecaab1b3f1ef1a7d603d8e6e86b823eb105506e611bc5150bd0d38ba679b558b56e4663cadd7473c6305e04a7a7cac2290a9e9075c55a49080f7fcc602177227920a1db0932373f071b425c866d02828e30c05a030f7431d9d43a8624c7576297e12b71dd155529ec460bb7b5d8e9d560adda40323248c9b9271f5a9c5d292000000b0050e5bbaff623ece5185042bb63214cc0f53b73a75a5769c4f51274ac9dc4792081851b91bc6a45be3af07f339e32088ab523e188210ece64f0d5bd535ac78347d330552214fd1b9489acce37fbadc7def0272676f2837f086ce537d1395fef39a6b15ca710b8492d0b37818cc00e1fb1b0876458b71e9f413549ce19119f7361da9b64e9724c7a47df81d11201f87eb14a9d2d82df49df06e1fe1eb35f711a9e3e9e8a77fd52e69dda43f23fa39203e00000168000000b019dcd745800d7628d647f2338144df82f00bb0a7e9defbf157e634cbe3cea9848f06b1a2783e782c5d6d0e4f7638a0afefa1d6f7047b7385825714b606c50caf541aae5453163e1fbe3c2d13fae4f54dec6c89e01db90e1b4556d186ce1de75655da6e3aeec1b1f7804295555541ed9926a22f49ea3512c2fbf37c83cc8da17ff427ba6313e902efd02872a0db5a876f128647bd1411648e0bbb4f8e23a2c0ed82411941572fd21a28682b729f1e9b40000000b01c31f457ce5f94a74cb0711d96c51a3b13cc814c975731a8c7b909b3007616c097229089a3043df16d6743b61304b21ddb8c1978a5f78e9c7810b043713cab2cc46f321ad02f8213e83437e9f465590449d3d2ee704d3f9b7a19b898751c93f83efb3fb08771b76f876cf73e1eaa0deb1872072f3182020d5cf5d5abd45640567af8b569ad0100ebe0c1bf6b28ab4de2277adfd3e061ad17c2cfb645239b03940aa5b34aa452ba1a2dd087120c2cdab600000168000000b025bee25beabf5c6e1d6042be35f8793034826e6f892c704dd8766554ebc668c9b6b9fb3fedcb4205be20b8aad41877db88aea14680b9f2a0cedfc24e826da190577830376aa522a78e62516ad7fff179dc56632dcf32e4114143d93a4c8f5b5759417eb71d82af22138fcae9738a2bab07010c626850a323d5b96a68589c5c1dfbe0d04a23cb3480c46ab22629b88eb203259ee3de2a5c4d0a920fd63025dc7645cd7aeb39bf203c1d1db33c7af43543000000b0159ba2bf7908f5f7914a549b46cc9a8c105c904c1453a71d5b2b7c83ae21255ba8439cdc3791174bb5a6c52efc690bec06e55fe03ca77c94af85e7755518d21e38b16ca81138c0932e7b005c8470fd83d13a04ec5035e91e1e1ab26e6a65ccd1ef69f954018bdc8d87b96d65a4c9672f301c23aea342e687cbdf257cdbec3a64629ce0f14a7388ee35bd23c3f18de26029ed2d2054beaa82c45baf7d7777653864f5abcaace4a83a46fcad15f874251000000168000000b024b35b9f3911de63afb0b76e19331fb9f10b6a689e27991d68261620c0e0b9ce7622c6516115a8e598012fba1cfda1d01e2564c96d37058c143295751eb98a7d3d5a71efbb1d74dc838aa6c71f6a7a8115b08ad14b82912b776ccd54ea18f81112fbdeb4c7baa0f799cee3a8b219fcb21438d26e29073f6f292f01955137f261b8f71cbf7beb7aa081699a196ebcf09a2295e96ff00c5da9444e3cae0167c9ca38faf7f42b1fc28e684ee7e9861710b5000000b01c2c6118980f23988f6927e05147ea488c2def177883a4ee19482cafeffe1d7ea2ccb9e6f7cd7d6707d20ef2e838c9af1f80e3fadcc54d5549bea72226316a9534dec00e3a4477985392ec917562b7c13c4351f77516c705164fee42f02b4cc8286595c84484feacdf68d244eee9960b065ff54de6e331cf1504285b4b5ec274a1de437dd87543fd792188604007dbc4046c8e290771a671222f52b4cff4fb5577cf04f505e4c5a8a4b12a3486872f3e00000168000000b01b33cdb2f7005b46c6d5ed15237b28d4c824f5e8f23a9e8eac4634414a12c6b2ff12538717759da21db39bbfd89d4b832d131e33427af0a40b29fba10d82ffad7af26bcf24ab97a2e6b5dcfa339099362ce004789b108a84d446533a7dd52523bee4cd15d3bda29a87f304419ab2df4b013bba3d7915e274e3a5bd022fec27f1cdac87faf28a9fbb08878d9caf6708070313ed304f7ee2ad4b3b15062e51373f68e1d7388fb9a0c608c8df5d4273f980000000b0211334edc2663309882edd9fc69f002af678e566e36852ef232f4adf438e923f5d4ec7fa1107c827a2d4e03d7c00d9b2204f39f3658424d5ac4b33bedaaef8d84d62ffd0530208bf2b5e73ab0390a658f44e794f53dc46734e00114599cbf518f71847dd3ede328cfdde5eb181599c2000e6ba04e5e42a4baf86fca65e046985f7690c221f1a1d19ab78e5f652e335da1921bba4c3b9704eacdbc2f53a21f1e83afca08273f5e8870e09081595a3599c00000168000000b01bdca5f7308b656d74675c0ee8a16e7c3b8a10372f276fabf8a26044bb211e1c6af37afb9057100b3ca0c4c4a88f40de082f37fd49e0cbf3a46c0075212018cea9c67c096dd95f998ff8bacb928de8265a584768751000af330f9209dcce9757a00f887ea71283e5d66aa8f47c980d6b07e2c2806fceeca6f89621ece3c7775f6c21caeff91c31197e7d552f4bd84c8328613756bc9632187e943bfd8158c3f5e080efff1509ef1f19dd6a1b5dd7df49000000b02ee7b2abb9162dfd01a9fb29d25591512ed765f9a2cfa62660c6156b030dad35ba704d0529b670a32c18b7ff084fd4a68462ac8b85f1ede1dc895411d71f87542a5069e4ca96e6a68a42861e4c00b05213c0f4f5533da25b0b0d1b297972e6c4eb586eacbff503655da99c087a85a15d2111e24a23ed461776e8c3a72884e5dd1a3b947b77e53ef3a90575b93822a0c9012da1d40d3eca7c34bfd027ebcfe9c899be32e82e2b5db6520107585dfa677600000168000000b01c4dec64a5b82e5a50331f519edf923faa2f99daacd1d98e24b49b49c4686c100c41112eeae64411e5263af627c7822b04ea0fd95ce91c686dd563da44b7ee068c95fbda9ded65dbbf8cceb87fede49d751a4c77a58089bded8221851ad1b39f2437b5c9e1f31cacda0dea1c26318ad723d543dd20f851e4531679aad1f37b1724c1f11229a88d962b189890f21c8fa22ebfac7aeda48fd0b3f2e89a65e484aa78355152f981c4a7efb392f68185070f000000b02bd20c315f19c86900f9f9a8a5f5319cea40009f997f9cc4350aea1a60c823c9c9691246f3e737a0f2f7c9cda2aafb40fbd690b584234558c6668e0a19a138b2cd3a93d4e4db78a96912dc25b7e1fa389836eab4cc314eac0dcc3e7ff737cd8b17aa3744eb9a1cd64bbd9093e4658b691582e1b84f32cb10e05e97d40bbb3333a4c2a0582226cf9188f2501fd0db3df10b948e2530c744a8da77f015fc0108a631256a799aed3897aea3e51703a291c700380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01c5798cc4212d09ca98a16e8007df0c0a29a5bc2d759b4b3e99f71f12c317b723506d70c8731dd23ea7148c0b6ff6a2ea9c51ba96245f8d9a33791fcaf86c1587edd09c9da6c824ccb1a41e33a0cf75bca4f05189b16e77c4985aeacb9d25bc36999367216c8e7179317617537b83a0d1af32271c9c3bbd210772b83ba39b9624bf56d8d390a299a3baeaa212f3cc2b103403684a3758a4b691555fea447c2bfb3c313cbc4de857bc8ceba2be7f4f0c6000000b02c3f840d069f5ff11a8693c8b716b63ee2a038255eb3d9dac891b0bcfdadcc2423dd95ef65dda61888e817206834dd1c237c35fba6a973c1a260b8b66a5a22a2de36a518aee7375e570219dfc85be1ff3b82e23f90d2b6c939f2c448738e9345f9d92d5cd224f19e2b983f7c8b45235519eb5c5e646baaaaca81364bf75b454df0146af98083660f73373fa2bfdaf3c30903f9715d0104b1317b5c6f934d1eaee03fad42da220ae9afda3e9583c32e46000000b00ea69d082942c640c5b7a5f640a725170468f1e4bb6e92c2e395a2ac4406831e731d73423b730f463b7210de885e9b874265d1f0345fd84dd04d095657292357d6b18eff2e8462f91f3775d78184f877cdeb1c3bf2ab2834236a8c9ef0455b15d000a322b9e43caaf172a62558438d0c0fcdd10ebb61ce3d54000dc5bd76875c886ecaab4f28d79d283fc6d6e1e4534117cf524a20985eaad369975cd613173224d3ef6f848bac19bb2c13ac3e8753d70000021c000000b026c6c265886d13767d1ff774fffb138a5895bf1842772faf3248194e467550a2aa65c20a4c575f55af2c41b46717698502e0430509345d8c954dfd8f8ffbf52adfd4419cf16e17777b32f68ce440a44f91a8d67b1cde2f7b59ddf1245a20bfd594cea7406e467b9a4ebe3112e3c99ee8122ac0eb4a8f98042c4fa4ddb23652109d57d37fb6b94140de20badca2ba6f1c26d540a3bd3da93e077a2dbf220db53ce2a96f0bccd80497ed9452926e170e25000000b008915d840fee443b0a298c7956c7ad0dc34f3c56ae668d9c4cb1e91eb53306cdf2354bfa97bdacad99cff5d92227fd43e21208d9e2a1713b28adf0b046f6b4feba211ee7ee9c24f421b9520dd374db881e6d91e51de92fb72c00283e62194b1eb321832948afa0e910a3b583b85976a319a52718967cf9d1d8c1c1ed111d5a51c93c933b48612d12857d8cf96d53cd042666cf8b44f361dc942dc0c865a6c60ad86471c89272e0f429a22b4e8e813e3c000000b004a4e0725e1475129221678483b23346f500203c4c8a5a82950581027de1c41b4c8e59136aa2975953e08b895eda0c651b111f3e5d3bb875412f6506073ec4c226837e175dda2c69085080067cb95f642181bcaaf2ce38241a9bb138cf219d15c64659cd4b3efdd818e53364f6d136201a6f507c1f381f77fe1ea662839c34dd3d4fe9f8c1154a485681372c4fdb9d5a2a77cf589e906e31cfd47ec11de1ad3af24389e86ee50f11d6e8cfe6cfc12e990000021c000000b0262246597f19c3d214e3f4f2b95a1bb83bf8fbf677a140b1ceae6ecd5d7f4627225c64b38d1e1660e262e666e7ca89aee185f037ec31373c2b8457811cd158bcff350cfa4d3ce9c48e01e59ea6549806fcf27973770bb30538cf3c0df355211399ca0ae8a967bc2911b8d4b4f5829b7f2d739a469c9796596f229dd9253328f07bcdd8e97766b4ae57c0abf7950a34bf07723019c8314f2eea3e8bbc784e832bcb281df81b619b9a98b9442854c64891000000b02fe85e2ad4bc89b3c516f065fcce46e5ee4ae0818123a343e8cdb18f5a4dff918546cbc01b1567b50d0ae5991587b4e40a15e0b26124d713982228e6614959fcd548ddc8e4d28431098ffb27011f3303767e6d17931e83638fa058effa0a8d97fbb348d512e28de2e65278a7647dff602e977a33e8e04f655d1bc6bed1ff2dbcfafba90bc3573d1d5af9abccdc97484e0c52a6542739f0e49a2d44a2a4f31f7c52f11b8b316fd0c7e25322051b16ba94000000b02a7f3680fa9b52e3667f6364e5c315c9465260ad5bb3a2cc7f4e003259b0bfc2e3140f5129517650d0a4fa9669a968d5b861f6681ed3175032cde50e72eae67acdc5297824e4b3fd39518fb67ad93eb06d6ad83c37aad84055ad930714965065c2dd6bb8b45050b5bf8550c74104a2382e405d8190a5bd10dfa23fc1f797206047d6fed11df2e435a7296113ace35e8a229f75a4949d8794ddb6054774f4dad508e99c544a33e65370cc748311c672800000021c000000b01c9b9717922b10426765d32c93ec6782137249f839b6b8e844feec7bb6112a5e1e7ae7ee48711b307a084ec9e9db559d190f6b6b97f836f0eef0240b62adf5ba5a58cfa9af87c7a8288d534289028a73b8856a8875ad3e995ace1ab5189cf58f6e29755d3c2e57517927386d3344f45e21c7490244e1ed937b3b42d828358ed4677af0d45a2575972bb6711f8ae3b9c1019818d29df4a6cd5b6b7ff61bf5ba138aa918b648e6bb2fbbaf273bbe92c72c000000b015e5497bbf4a53c4fdaa18d7132d9b32bb86886f469e0d14391e4572b71a4116f8411693443a35467653e28eef7fad5e78c14b1d0021a42f83f3f1857a9877b3761e1cb3b03c3a47c04eba216181b2999064239c594059cd8bf0cee384e30af49e36ac47e1188fcdea95861f6cb9bf2a2ed6d2a502d60164c5ed85c95d28f0506810c1322071b53e36aae16099c1003f2a7733c1eea426fa6d28a3046c62003e586e08700509f7cc97a11dfe80fd29a6000000b023d5efd52a8727c3645130ae3265037234e3b5d72fedab10db8d606f9ca6117d163d5ff08427d5908f62d97f9438bbfbecb7d093890d019e1a08c03f49722c74660856ccd9bb8a6e6bd8b40c5dc8f8f245300ba33e8e3527e6ea8542b08c54ec2acecbbeee37b63610241673a7ab73cc03f85990e1c7e46d779859420757217cbcad42d048e7852f00607421310cb15d25454aa76af433b2ef297c71d145af0e906c1bd0cc86aea6fcb6f8b49fc0039b0000021c000000b012258cfaec8b7aaf98b459bd9851239ef7237e78fcf0bc45265c637efd700758216de9081ebe2c09adb748eed414ecf04616d8d1aa1ffff9427597a28e194d04977f26cd3bbebeaf293ee28a8f928ed9edc002cbe192d30ee634d95c6339599daffb653c874c37825d18231145e8da761f4dacc851318eda3a0e193d76a617c7e217014aa17be4273406929e1d07b4d4071f8ac1ed586f1ab43c3f6ea04aea749e8fd9c4ad2e01f3af6080d556065f54000000b01b7779e32fba0dd9cb6dc803d15227d6b964f67cf7b5653452ff94bc934cb2e387e4ed7ed63f2eff6f6c02b660e750be74ae325786636c4b79e7f1c949a7f23a6375198a467e833c8ae18bbf52df1d5fa0e1edee81f459d096234a710bf8bf61fe061049e85a88ca6f8900fe50a4528d005772c884ec8888e4dc550c5cc9f1aa03658914058c7fd6aa0561bb34bc1fa52b34316007f2dcb685f3d1852d4e95323d607b6736183dfd43736d6ea9c35516000000b009b34e505bc07abc9c2a55c6275a90703805f6a655247b43a8aabe541a95442447d0b8b9f6b9456a57f26c108604bc992aa0df5607e20a09ee479fdb8a68f471d5da7dc166126100b869f90ec1b12d0f66f03d94c13d6171506ed108de462c7b4b720566b4e3b28cbbf4c92804549aac1b01af9b971ec93cda912f84f8dd3a8821deab62bf9e81a60ed7c9f72e8033081d7254c0c13cfb867cb1a9b3964a6f5a24360d69c6734dedb402608ac52dcbea0000021c000000b01a9bd0269520a0b8e8951b7569b8b331ae9070cc5a7633923af42e06981b46bdc375059f89262d3ed9e483dc5219a355a378de229248cafd7fd4eef586d3b6a9c42eb54f52ee0c1fe4d66db580614ddb3123a8970be5683abfe3b24b21e60f153f1ce52ca0ce6e06177e97acef02a80027c761fb10525ca72e66f2b9053a85af9582b8a569829b416cbc31bac4daa66403f1f37ff8f056aeed36ef30de6b3fa66b9dd487b32fbcc5e5b1fd7965ac41b0000000b011f1288626d830148bd996027702e4c6c437765fff78aa7d31f5d5b74436a381a510b6662b565532c94098d335f4bb025513d0690ef39042e9b84303123d64fa0673504fb41b9d2cc4e5c3a226de1d555b58cd1b79a127f89cbf28da2c8ca29e1b0825113f0674adcbd6bac32a6cae6028d98de34ca57a6e3641a0a85107873445699d22b8ae1198607ee9cd29d649761f7c6f4ad923a7f3577b379f4c7f17be214f0272db86608a04b965563a816f68000000b00f944b9687ddad00e17a4d910933dd7db99f3e778c3efe430bd1562f0f65cef564f422966723ec837729f8255d24f564456bd6554dedd280994b57665a4f5b9e78899eb7aeaeccaea125f8ae93f51e8f76cf83f00a28405f558639b42b1fbdd0b5473324f09f248fd676019c36f90ade145aa869c3a5bdb10b2ab3165eb31aec1698343e54dcf6cead83a467e4a2c24907039c24ddf9fe4b8aa3f2bbe9fa97f70c714c52c6047cda36e2dd79d6408e2f0000021c000000b017694d802c8f23734776580fb278d12f9b2636dbbaf5ad4029741bce11542d6477862f427e9104860e7415ec2c85d316bbdf1a64bdbda50059965c4430baf9d1a9cc5e9efb0ed7be0c96190e6946bda8ffe1a955867cfba74f4ebd60ef325c955c3d2987cf069ef7e50819c4850cbfd70da4e070153b60febc4be18137762d2388ce3bedca38eef011658ae1acf56aa506a60d339b4aa80bad2b4680c22227fed52a3d238eab8f0b63131113de98a783000000b02db56e0508ebd6179de9922d1213f8966942d664b920dc97314780a901a4505cba0f20f395f6c8f7eca68f1c6687d988af11f5e3ac84ea31f87e4c56b6987fa8bb1f5fe1b0abe7435b3fb5b9ebb837f9e87a252697c9763b416e3049068a21a042ab7e1888e3c2e7f14eafee981f22fb148a39e3c9f157574a8aa2fd38bbf883a96de7353618ffef6eeba6997d2638801b5c4295c65dcbc59f8b577c258d087038653f133717c6b6c2a217c339db31cf000000b0045239f106368eec0eefdb5e3cb3cffb4db7e9e052ff6d65665576e93d4e3f43084f40bf5c19866b8e579a36631bfd78d63dcce6e6740f601d33c856aefc11b44418d2134a5fc6afbee7af31c0328ca1097a57bbaac1e79aafd8babc642288622df71ce2b328eacd8f5d0f35ef7b44c8286a1612682809b8d8242120095a33ad58183cbb5816bb2ec9c7d582dcbb4bf8048324e204477643dd9a23364c92e4dca79fb4cfc6b3f4cb4084fbe4793848f00000021c000000b02ffe925436530d876fd2d2c4bbb66bfdc5b19b298aeebefad0f1aee39eccff99c5c79a8c277a40e8b0defaa580c6b257117e7a7c2f65ec417d5a6890c0d5ef8b90067083f51dd43f3781507a4106d006a0868d18e20e74370008094590b40f55281d528a1711bc6def0a488d8813119420f80f3d9a53204471d4f88a1c5e98a182f02f15705166ce36a433d39b94a65e22c95b0f8d2de8efa6c5f4ae9f3522120ae719b226a807de05c17975c3090201000000b01131ddcc40c6d6be8aed16063078ac74cff034468a6094370f65e29e4e906bf1cc8643c41077131b7f53c424fd36f8982a37f84aa6672bf3d6d9d0dd2cff4801daa5a3d8e620386c99e9ed35dbb8b1c27078a5a40b3d11c585ba34cee97ecafbccd451a725d3298da0d75a9ae10f96722503ba7a37bfb995c9114df83d65ccf74f6069db3e0e1df54ed380a230043f9d15a7c27142c5bcc8fc734e5edfdba27f0b4752665753eb0454adbbbd1642c87f000000b024bf585338e0588652086de8ed2462c049386e47c6a39cee13d7e3d6a04c192cc632b6d9aff8177bb9c83f6682cf23cc68e26ab4ba7ce531bd281e8cd73cead7dfa254ba4d9687fcc7f7f0309a7df2a785c345dbd0c16e04aa4b5e07c5b276b3696983d83dda7c8c2dd18a1aab292ff121430f6472f09f0f95c05041c807f6fa50b092b4d2771c6fb1dc05fd0db88c442b2ec1edb7cd951a89b97a2d9e781b2bff665dcf5bb5d8b55d74ab7cfd147e7d00000fa400000168000000b01fe489809068e5fa44162aed94e7d95b2b6c428126d457bdc9534e9d5a63cd497ca00b58b978b07c1e4e3e2ec242fd48e984c48115912945b3805d15e49c64d169b45e56ab43dd02ac04794d238eb3f0a6950953666d179b99c684fdf92fb320ce982f286ebd86538c4601ad709e8ef301bd88f00b7725a106442e4f05c0d5a587cf96d0caeb88fb89ed0c09566d4cce10548bb3f890a7d21f658daf197b45010bb3cf4ad1b77664f5e3f67a6d6a65f8000000b014e0a86ac0104bca1815b3bc6c11d35b9cd653cd3fbd9b9be8e24020cf4ac51fe9212ddea6c5c3c07298c76d124490a45c0c7541df864a6dc9b78bc9e26ea793d08b211a8b09fa23483644d246b355efeb4a0f8c0f4bed2c9a16ff89592c979cda9a0e754fe93cfdbe1fd33a8e223c001849ffadc29bb3777e3c176c84a441d4bccbf7550ad9124c85c7d00dacfb0c231812d0b69631a78612bdb004d147ca3c3f798763fdf1409c79964a4a9cf9329100000168000000b02f0a028562f2cb0ebbb8f423b93d23d58ffe074d6c35da48acbbbb157dbe025d33ec41286704555209b7f5a570355bfd9f086d9552bf135be1a3d6db86a8d3285e9ef6f1b0dfd96e7525fb73d52af2dfa1dd67bc9c0c5ee1e007f71f8e79d99b9d06830eb2b65384b76ec470e0d7ff560d2fc9a99683b38dbbc8bbb7421b611006b96017b7b1cfa70a3039ef23ae06e3149d72992f7b2b1547a6e713e61ee30b04cfa2f8eebe57fcda9fefc69920c917000000b006434dec6071d1a21cf91c85fbd0727b2ba911b49f305ef63c832ea420983e99370e42230ecd95f378b7799fb2bd834b36b8a9bee630b1bedd306759e06932f26f96facff9508cd37d5184afe0eaa17af838b38fc3e794984f897c1858c3630f517443f282f16bacd384541c3794abe2207bcebad38ce8f7e9a24909d86ba067b8a9a720b859cb1a8b3b510e6377ca011f8ff03a376d491dba674594c91114df84e6dec8443c56b6bbbb27fd4e3cc33100000168000000b02d89751d166c60f5ecb581780e7d446c6b2c2808305af22aaab9636b4cfdbc89a58d54d2a3763a15eee3d016147bb41b78a68f8d8cbceca61bb2263d47849aeda0db48caf9c747b7d7d5a6fdf13156cd2786f3028b4c55ae8a59fdc95dda28ce30b59319f2dcfa9a76a46f59d6e2bceb26b419aa1b692579849e465ba1c25b183972e3f6bee8e1c7dcff426b390442320d12eba2b173a44c071a853c74feaa6637235563412ec9e348c2bab903d2c168000000b018cf6e1e3d05a1d76fb8e37d88fd1b1a1cce482434ca4de7889fe405796a12aafcf04c8d1272b510bf4ff184b6c28548bb2153e369b1cfa4856de7f356f548da2508b3582e4ff82f094a29e0763627906f1b59b437e2a631ddd9f5201cdcba64d945c3c81325c425e84c4884008816c71e1bf25ddba19850ae4d3ca1e7f721debd8535e7936d2666ddc4bd2c96e58f55048bab8e0b67cab830f4d0e234a5ee96501309f7dc72ba4be3d775e848c0782000000168000000b02cd86d33ec1a8ad6c957cfff0608aeca05b63604412369516780abaed799f61b81db462d1ca4f7cedc20ce376174b03ed9298c15844e71d4791e16250532306b06a1cf93cc2466bef60e240da9f3947787fe69950c7f93df9bba5720f48f1a1b4413339788ed678343ee29780371e3b4280c37b8c9095a0cf199903ee0fb0b3a8dac87c8820f05aa633f1fbcfc950c712983f3c0473d9951cb3f2d4f3160615050882d4f9efbf07cde2b1d57bf034640000000b01e82038a8c0b7ab35d8a89ba56800c83a4ab75caaaaefb1ab437a603595271773937079319ffbb3bf7c87528bbd60bba15eff381883a3ed01b889d00a8abdc3c52eb45c0a93bf4cf9a67db817dff7be2f03861e40e5582199e80a6cc6dc4be4f3308fadfe755bc73375273f04b69c55a132511719277b9528224927cb4b232fd25b4215494731f16c309db43b67694ac2d12fe32cc32779d2f083ff042f9e38934798dfbeb52326655c6edf9003e45b100000168000000b02151602d8209f7f632b4f00769908afab27f52d959b9d1bbfeffb13b3a56b138b98bb47304358248e7ca9ffffd76bd804686f848f68720fd50f888b6c7cb6bf550201492ea261e8f2d0a9dce66dea37ecf17cb514ce3baf115389870f9a7a06cb7f355d0e4a6d76fa1db39f1cf1ba36802ab2086a8fa89cd8ee810c3ac6e05589d279ff7a37a55876987b7239313ad3a024badda1030d412e1615ecab3a086bdd33a86419fbfb4caf272e369f2e66402000000b0150b6b639e77fccedb38c951f4835b04ff65e144141059670f5b2ae498a145d59c337849f7505839654ef0562fa5434fc73038f03c4d102ef53e39ac1f8b804b3db1103f15cf5af868c467b481f9d02cbfa08968a654229e5754e88e29a23ff0aa6a93ca618f2007cce2db13f28d80150c70b55ae25522007709f43b156c418c482bc8927cbb57c7756ca7ed709aa96b00664d3895c3b62daef299de138ffae8a57a4e4d80bec7bc5f4360b5f91e4f6a00000168000000b0065dcb6e0c712d3161fdf97e18cef9da6a953a06701b083432749ef65fedb08423629081ecbe0b79edfc1ac5904aaebdd06ded9f717a05bbd8c0c69b4a9aaffc8a95bc37fc06e8b7c7261a9a1f25c1597fb214c2de3f6723eab3a1bcdeb147597b469c7bffd36947604ab10452677c29038c101894dccabb3df75d6fca23d8df30a25ee0790a29cab6f8d81e0e8de86d05db7c8210be3b99a4d319d74c74dc3ce4984f6469aeebc79b0c0c2f4e68e0bd000000b00e23df6af6ef67093cf5ae965b4137ebf906ea8e9d31339c4127e0bb8c96d5321a814b0d06b22b8a919d6ecd80dbb9cc45049f5d482fec9b4e866bc18d4d9d418599c8640e8c3ace8d0cecfdc52658148c7cc1ba56eeb7defc907ee33123bbf18f80089fb9b12330161d83e5fde4949c1077bd34a5bee7ea974c2f6f99c3d1fab67d7339cfd31d68b7b76bac10e7b740161f5c26cb3dd2e14eaa9c04971c076f3bd8eafdfb4147dab69389dcf6f2afe900000168000000b00be9451d179c5856f19a0ad89753ea6ee199639b3ce604a70439fc31fd0ae36d4aa31746a811164838de5c34ee3dd91a01002f3f921a713b4a6864dd45b9eb9c50c97ad8b0e7505972ea993c3c21f04e2b457629f5676a371850752e168ba76ce9f7376ea1337c2ebac3ce6c055d65b42edca3deacaadd3f6503f5991f33f35ef2e66414c2d18fd34591bbe1e667216c0ec6e4c7768a82959c164e27e9ecb9f688eef584443d05ebae9d34c249255c94000000b0154e243179608d61a5160a1b57ccfec3e34bcc0514d07ce0753d4439d3a4d2901df5913fe59add8c2eca646f3c1697925f4b026215fd4d0462c05f12e1e18fc6e0fe6bf327546bae35cf1073c0167f40fe116da7d08765ba45beeb2d3c939a5854cc10c3fa8ebc07ea418fa9c30b9b48047c2c44d36cd2e2ae5b3aaf54e1b823e7931b2cbe877a7b0c63c23b7188e0c92d82b8add37c8d95525ff7ef631fcc9155b03ef79e907fd81233f158c83c452300000168000000b018ce7677e59045ddbd5a972cb590dde7e1ab3d1d6345dd27cccae0b447a35a007e43be0fc22061d5d72837c0492be8eefcc86451b7d3c0c8cda865c25164753271961de2c60965bacc7c54808ba7d272b536eb7384bbecad14a11a3a9043c7e6f8048f8df6f48312d56445d699f66b2f2728be555a5a22cd1067ce68450cf14ca4ae07c846615f6f09d8760248f8a0de07683a8d658f627d6966a88057c2bf8aba9440c460aed6641c2f7a40260f4bd0000000b0057910cb664fdff2cce7e0923b1c9b8927e1fdf7bed0dddfda56f97f5413e9efefcd50f567dfeba5e6c948f794cfbf790a8d2ccb3f21f1bbe77c6b28eb1b3669f683e50c3d056fe0409c4387ef566451e736b3b00fb938ca833d28e909e35ecae5728ab769a008a74706532eba33c3a803ece65308b371a94ff56711211dd00079ff0ed02ddadbe75d83746cbbb0dc2c147511f9c094578f26c323afd62c31d1e67c6d52ed8d0eb6670be3aca160e41500000168000000b02625de6d835bcd565542cfb17cfba11192d8732929bf8422e7721ad1e5a3f6c4721d2281eff940d5f7dab48aa7606e8b01997dd7db8b37ccb0c22bc777fcd47f548b137c06c50c102c76508bc505148a9a9153adeec5458c329ab868bf8d09563a268e2f7087896495c6824a2607c92f1d25b7f3e78688f9f7ac6a8cfe829ebccb80d07644667a2e9ff18797d1b8380f19f2010dd63800d657d2d895e2fe20cb00c678b92d0db4293e0d48c88d29cabb000000b01562dae90b16bb23dfe63b3f9ebc2c9ff9fa98cd827eea5f8f5537bbcf222ac4c8c5b40250cf84442a06d979515b95185ffb08323f4e10845460bc7d93ee00fbb1a9dc8c6cb4bd894062fa4bc509f8b5f8e218290fa00bc05912189e9d5942e3860a61d3b3738e384345a0a993b14fc01cb3f867c741ef0f47ef194a2e2733bad4d4265a46e7880e599b3f346fcd02771f72555b7827cddd3cddb1c78b9e8ff4cfcae582dd1fc90039ae3f8e4fa446d100000168000000b00300ec68e3a62d70dc2756a0df8d5e23cdc719c1e75c6cc0b3c2d099a1bd91f716c5e58b94ac14099daa01b51278456fccc2d362b575d46c110be8ee9a6e161fd427d3ed249a472d30fe3609141dae9f8b60d82da86f7062e92dd57cbba720aa2d5770dc0573966fc022823acd332cde2037c1a8e52c4c9db55e776e0619a4d6b6a11232a083f8e51789e6d6d2f06500279f0f4897695afa890a64db47697831eac93a5302be54c609eba8bca466aee7000000b013192f843409cfebb2ea52ce04b0f0c1fea42274741436ce1a4c3797ec6ff67a7d858d850db8b17a121d2c641519a7114a7850b52c390513bbf4825d9fa8ca62614578dd1516910ac8cbde7e2fb7cc27470f2356f7c37f12ebfdf2f1f6bd477a067dad6cbb6cf530c5b89ac943176e3a18c30b560f28009e11052fcf70a22857ece8d955a68bfff3be75dbfff92f88960992c6210d71d3444a38f6ed3d5e6fb8e79fd5ee8eff4d90b7e876c619030a0500000168000000b02e986c829fb6c5346b30611277779fd51e82ae883bcb7dfdaee3e03016c74c9024fea6c13b2b10f4e6c48cf016e9c63c2599c3c172a4ab3d8a41252eea8f82ed527e6c7484f9df6d8ad7ef2978b4418eb58a926fc258d6a42ec08a14af52938b6f4f91b5c3ff8ecc90db581504085edf12dc9531a7001171d9020b01a33749eb1e7f5def4fe060fd350625923204902a2645630a09951adfb65f9ec3e969ba30e805969c01245fbb430b2e4ddfbd7b16000000b02cca7b2ea336d45021b34e2c3338482f782de2cda89a81202417f75891f593b6e0be27a2700e3cbc2d4eea5398750a4cd3848fcaaf258fb0400848b539ae899fd77f0d41dea4da8db2fcfc8579f0bda774447962e0e360ecfa21ac1cc233e5a2546914c4548c510dbee826f45e23b8b4250e9e61264b32c8b1e2a89d111c5c2b41ebda237718848d406ab6d8a7ccd4e70142012356c57248b3dc118d15a6b41a811c046b77a3e411a98e67d8846cde2a003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a06ac7e9e4b3afed7dff28c63d986e559ddb10e3949a5c60aa1cd506c4071dc32a5d0623ff3f823e6be33216da7a09a5eaa5ae67fc008476aef341ec5033107015e9f5f7a7f45bdf5526ec920f3afeeb17773b1bb4af348f673e64f9a4b843ebe10358b4ac2788b3a04d505bded03d00174e99323578d62182dcd9a678369d7bfc7533bb476f1b1bbc5755179705e611f04880ef65534b087f92f5c5f506f7e2817e77aa76fa2219698fca27c3d363000000b02942ce04d937a99a78f55ade06e9a010015fabd96150ce4814c811e2a015a39956743e74ed8a04cec30cdadb12dd71cae16742970eb782eb80626c3622968769640f1441d56a5a92de2441159633548e3b3876e5d558d54e999d445102b0e05708c89e6ade6159b142e821e1e504911e2dfdf2cca6d32b2ed1611ff13519ea8fc16891da2411ae062862c85b1d3897002a4433f23585cb520c8ab8684e1db72e9daec8b3027909e0b20386f906533ca0000000b01284ca49999aef0adc96dfa54fa865a8a8e097c41f15a504ed3c6a03dac18791b421cb50951acddae187feffb6e2c936b779b73d447bd3c32d453d54cac65e0425b1c97ca853c3e76136ff101a91259598b33533306f4eb9beea0d9fdfa2a1cc0a65563e4e6035c7498ce822612b446b05904d97479511ec4b91a071fa7f06a66aae4834e2532f62a826426cc4c7600a0b89c1ffe65d158b7038e0a47df9a401cf46226c4f10dffaf3ce85df52da0af30000021c000000b02b950aa8efc6523ff06e7014aa574e3ed55466eb34fd5449b3419a9052826f2092a91f3740361a1034a0b55a1cf65d986d74dc4c8c1a1392b72a93d4320f76697baca4b13444c53446ed76d5efa8eebc17540432c3340a46d9341ee7a70bdd4798f52b6a25b6c7f29850f1563699872818a21ab3c399e4f0b35e109f68b1cc6ec4fce546d493b0518e199f72565e25090d0e56fa0b38a3072852b2089b8c067d08d7b9f8ce1928dfeb0d9632cbf6f504000000b02bca76f6aac22b19950b2bd744f1b37e087c372bb4ca1f78af05e305e365c660312d3c55b087356bc27aef4830f507a8f733c639c0197a5cb74a3584d98066f840baf8a5e4c8973a4eea20d5680e068d6fd04bb81800d6f4d504bef32ad23d52fcfbc3a03fa9755cd7b111d208fa39a30a96cedc5554b77fc016207d4b0b29fa6cb6433b26cf98f378fe95e7866db6760598b02760d6e3f01a218e0c65859ac6e7074268ce3b8e8b170eb1e3658e206e000000b00d061689c4b88478380676790a941727d3c35b169d0434cee4439244ffb8ba60d7d92392bacde9c9e62f115f8faf7f567f0443258e726d51351037890045e81d12b979d8a23157ed3c058bcbb6c6503fce1d9cadf9e38a140279c7798859001aafbcd20d273966d889e5d31077fe51c610fee3f5743c08bbe5b71f4143eae6e7af07298db606575433fbfd49de75d2b8070700861d49f6ce9c887642707fcbb13d1d5758691a20dbc0d1dc258d0e9bb10000021c000000b00f84d94ce68b98d51fb164bee5a35f9b8e1fcb464b5de29cc6078000f5fb52b7f97bbb6b2c41c5ec938e0b9d6e00b8e073654f31ac21690dbab9e3d34c19b8deedc85ea53743fd5eb43e6eb53918168309b05667572f34c2ce35db9040f4ae214c3db2516f7972cf85ffb2e3d5e753d00a1a755f9638abbeabe946e1a30c1e71412dc801847fcd3f56fa77ef0717c936214d7d97a71cfb3d826f44d2c76827a0da02eea0d9a7c6c9ee472030b02a10cc000000b01652b870b9b695ff1f27a5958a2696c60c2f7e9f501ea8098bc625dee1902a31506886c080de95dc458fa1878eb4c1127f2772b2868fdebdbc52b63fbf325a4940839c7f9723c4d7a2894ff4d31cee065607380e3909f943fcc97e9358dc4b07f957574efe487c509b85358f9996c0f1207f55c6da8f65388f6a99f8ccddd71050dd27083289be68a548bdf8fa844c90286bc2a76a92d640ab0c2c15ad32b9a77e05b658a4cfb987f1cc93053ef8b61b000000b02615884e2cb3c20b508699ac8ea2988e4e09d14d13f86dc6f9337956fef9377c8ba5dc8436a816836fd63700de9bf93ff78b3b88abf3270298b2f1bc84682b7bd977e9cce49354036e1beddff4a96e570476ee367d7da94a959154aa058211494bc754422b56899bd4f9da52ef7f3ef92fb7e78bcd2e897a26a6058ecfaa4c12303261d3ad9d3f881d653fb84b41e6442c33e30509ea7cc630462fb5abe4c2feeaecb9cbe343df3a92389ee76ae5ae1e0000021c000000b020ad3e5659d0c8ad09b1d869b6981a1e5d063187609885cd0c8811ef9264a99fc330fc953d36e80b68e18cafb84dca17fae2e88cb0293a642102d59a3f798487dab0ea8047f20d83c00ece759f6b29c65071918125df7e3055f41262355ace3cba141a6c2f207eb7af845f656b343848209684db3270b3708d58ff31c970593cd8a06a735bd391f81293500866cf629b2ec8973c853e3a9f03692e1cbe95a8f18484a48086d3195462c901cd455fbfa2000000b01925e62ebd139570e6aa414978b91af5fab958a59540ae4476303cfe52caed65f5897e55243ae9328bebe43ee0fbe7df9c27d20f0dd27ce08dab228972093a95529a9e83e3ae09e9094187146cb8aab8d5ed9363c4568bc790036967369f9acbcf49ce31cfbd73d95e55eb43d9dba4231b4ef6bd9c41808ccc433fc9320f2cabd9b3bccae4810d67f13389411f016d2c13d740f8853d4a1971ccc139c647c281749e4b24d89bc924effb52cbdf81326e000000b002956326fc2c9455c338b50d204ff2f87055fc54587da7299161000cf8d96749f4592223d55006407829cdc101184066ea3c98e0d04fabcc2d863842c0f652ce4e5cc0beceb9ebde8cf6b1866762155db228b26234aa39903600fadd7e84f81dcdee4bfd9848d2aa13a7f53656b2af0d012d83c6bf3623f3598e640606daa5746e0d55183ffd861dea9ec8d46cfc090516c07043732c6d3bd445a0572b8019ec4b0077797b778883bfa46a26387222680000021c000000b02960fe5da20dda4524a6ef4e8e54dcf61d8713b55f96c086820f836192fbac92975735a457b352b69d2200006f458420f87853c7247ebbfe6282ee6760c78bf08bd1817f1aa55d588f62ec4f60e147eeddf69f00c768a572889c8d4add769f7279aa6df4807d33e267f1bd8414ea6180076686e0d4882b2daadb8b2dc7672c8df071a9a21749e1914af6f97a8c4f634e1ab80c1fa39af426f9f759926c62ee77a6f30fdbea4d8951db6ffc6f6180ce23000000b02105712c70c41f12b2c7d9ac62093fc6b046ff801718236c597a90a38a6ec3b366fdbc1213cfaded9988dd085c1daab2d54268db427833e6fc39bcaf1475f4aa21ccf6a7e317a94d911784de94e1f25e7d4caeb2d85155e0ce5d9801ffa58f402ad06b35b04ae22c78053687a917b3c8247f813392489afa5998715d1f840bc7fdec0a6426cb9aa97fed5645bd7b178c0be21b3428142b834ec2c05474fc19f555f612f0b61853d6f14228747c6db869000000b0028a3241e2b7cfae8352024af82e1254f8fd340f69c9f35d86caae4171b34b977ab98dfd1f228d37619f4284089ce8f7cf726f6c3295a349c823f83b96f1a4e57e97ad26a81fa741d5146aa261aeba342b862c779090e01fca4e79071bb471b3934d3c4945b8ba78fc1bd4bff3489e441dd368b6e8fdb3d8cd5c721f4aa7ad8f20d2f25125c27ef77bbbb95cdc7e1fa4236ca40c356428916a063b3dc4633cb875552ef7e1d9cf969617362cef5b244b0000021c000000b01de63ae37962dfcedc9a57519f810d15b58f2fa42bea98d7db804de33e421876fc1392ea5b65a4d8139c88816005341deec03e8a8101ce2fdb6a18ddfc6c34dc018cc010b53c6fa932dfa0993c225a8f26a9ef9700bfb031d415260265a6956cdced89d4314f9f936088ac09bdb7f5c01ffde7062641127ee51aeea730eb08765773478c08a87c3c41e6819b1b840a691781bc52c816a94d6a8ecf2f8c560e72d48361863b139942a7e62e7d06cd41af000000b0051ba864317eeafc3df12970dcdb96da420fdf11c41853a93a4a886ff877a531ac4ad00d18995af3db70703e255c7e925082eabbdf9bb5430b98a032d401668c8e64e274c711b44a8630b463424dcbf0fdfe561c5dab56f519b25fa96f4981fce28b03db8cf39e8da5ca9f41ddef37e6250bf83a0d71e161df93b423b7d5b0ba775535da6591a16984804bbe7d10d91522bbcf6cfe1613bb55ec1613d634bc827e81bd738d3254af6d45a9e18ae88211000000b007fb4b05a83df10963d36586c60f89f2d590e0be1fb08cbe3626e1d97b2d019cf8c25d737dd734ce3d7387a41a394abfd26076fa0a06c3e151476da1cd3e9ab0262d06bcd9b550fdd1c130738e4738e95329bdfe9be9e3a1dd1346563b23f748e56fd835456e8e5675ab2d4f72ff4021117988f3df49c2ceac283e621ad15ff2c8cd64534542dae50fc50048e076a7e82063f2b5ee5d1bac6db43a21ec5118883f2d59775c884ba3833e60c69081dd3e0000021c000000b0185b36946e675483eb5ac3f036869409deb9a7db2b78ceca11c276cdd13c300fcee0d50928327d39d46c9a64c23e70386854476b8487aeb9956312be707be77f2d357354dbe25e767f97120eabff0ad62d2875d19cbdaf765f47dfb226256808dacf41bdd98009291e0329f186941264195e0683504a964e1bbdd96b07562ead054707e8d480ff24b89a2056d5ff5dc80edcb90bbcc1c30950d1781a9af3e7bb84ded36530cc2dafa4924db9d66b7c1d000000b01dde33da73d44b7d3e287e5349ca18ad412814785705cabd852055d252c6039220709d129f9430e98ac1935e256c3580baf07b0393661a14e6fc796b5c0109aa2431da6f06d8b1d67ee7466881952a4cc90d2d06198b307bd5ed1a7f8c6ee19e14d788e9f8be092110458f1bfeb7ddf827cb86d5bb2c35586d1a525b6275dd98922975d18547631269682ece3da0f49901204d164cfda0a326db84a7831f42b87c7593514a56c4797fd6f94c6cae624b000000b01fb23e91977643456fe022a223d65e3dc59655ac5a1841bf9ab85e948285e04baf974e77f92c5c7b5a3297b069a3cc4afe9f4cf69da190b212cacb1ba6343855002cf2cfb204479350e30e2c6db594bbae1e15001a11002946e288404d868aac92feaa07b36b655b4da9fa0ca9b008610d670b013d4e1639abbcf7dd68aa1dac09d333e6e3da178476063f206194f7140f73b730c16852b7557df67a6372476d664482f42d91b39ed3daca1906cb75900000021c000000b02b872aef5c95970ef29d010729d97c98b7abd65ae3b9526c42a36a328006685a9ec07b5469e49c998b75c673c3d97f3ede30498392899314a9d6f29730e9c3d1ea2afc67d3e8ea5179af01b911f3464f463922267f74dcefa8f2fc714adc3cc6f5e18d01d15e057dd95e45d9882a0c3921e525f12cc7acc9edb46996b3f9b3a442d3450a917a796993f692c7cb84af3225930e89ea294e25d82f11912472597ac3cbba3531862e2e9a89fec85e1cc3af000000b009cdef298d2377cdcb25e5ee4570ff71c765c89b41d8a39b8eb555cf255d222dc6e299acaa8bddbf3cce097328f937333615f3e4d47ded3547402d3c6ddc7b361a67630d12621bdd162fe9948ed459302e75600723fd2240f3462e9b4e2ac8ac08d99472050e09b1a9048352857c8a541e80b63c498a58a389f77de5d3005cba5ed5890ffbbc6d4b1b74df925fb30dff1995e04d877cb0586d35136477c1d3377a8051203a27baaae85f68ddbca49249000000b01f7ecaa75528b6db7148f98942ae399f68c59812a7c8c0f4e1f82dfcc30052f447f45ba857a3f096c231b296315464841903679ddf6c904e24d0ec03feec7a4f8939512cebb1b9f011d264823ed7cb699ad6541fb8dfc8dca6df4ff711f96541f6de01635b18c394581b2cfba0e6d8cf0b4e514cbdf7f7a728d45d496c8569023f33e2a4596af474d9de06a44a6956cb2413c66f728c6973e8a3ce1cb9afea3ca7faf529908a658d69eaea39246f6b1600000fa400000168000000b0130fb3937220e352edc25749de95a3399a851333f11640683fe2c1e9a39cb6f5fc3bbb785fcfe3c71cbc4630b3c56e0f8988cc508092e50222e035e07fb2bcb6383c0a48b4ddc898bf227c311ebbb5b1be4ce33acd401c6d59e1edc896b65e41a96403353dd86ae7199fe6f9d4b70b6c28a62609994ed86c56177250629fefa74e1d96d3045a167f38437fbb70e3d57d0f33e044773168415244615329444666e99ce17a8c6d1e86a48134a29c80b9e2000000b0183b36e4e10af563bed211e93c7371ea4430186a645ff33bbc75bb1f420b1a68cf15fd501481a2dfc00bcaae5f5014f0975ba5dd475684002c5b27f004d4f6c00136a94bf959d831dc589302016df3e302e757b63f0066e65977263c02fd84c6e6795f5059193d14ddfcf900d3bc0907305837dc78740865086e1ccb87aa73dc1dd6d2c96580c449bf1e86f91ccabd6e13c68649fa4a60ce407cf9d710d0d501a2c278c38d262f5db18d673a14afb86900000168000000b022f65e1f9c7e50e73fb376b2e2d49810bf4809b6b71feeee09b7c04171cc8917aa692daa187fe855cfc88ee742a3f7389d4879d5aaa979d28d2cb4359394b747e5286c6ad2b536060f4624ad539a5564127a2892a281dba76dda83a29e6f306e194b318e643511cdbee05fa678be2b1e287750d7bdef077b3fb9f37918af12de3f3ab93605d48fb448477bd37b948c261915ca5adfe5570e2def93a1e71fad780bafd23a5d4455af973b5446db4d072c000000b02911fd65439f58cf838c9022cb618b191bce05c8faf51aa28209fc255e88225ff86e9bd5a741757c5ba866dc97471e7cc87c5a3e4f2421435cda29644a57522517efbfdf4e259d1a7c3bd4bf0e5e3071a6bd603dcadf8953c581f9e81e976a79154afc96d0226faf1ed3cbdb712061a10eaaf153e7d436e4dc7598d672623f3032ce780149bd75e2639951adac333c742dbfe93a0c812f3044a3e1697c89a256a898b54afc841fab330c739e34bfca2b00000168000000b00150115a8918acac0aa13f980142a64e8a61b79000d883099bcb0af4010c546817073bd3ff1061a848c0b5ecbb28cec18c76bea9c6586e1a8356c4a3f25a35b2497cf3765f6d48ba3e151e6d8312da157819bfb3984a1fad341a641a3d1e718fb1a4140f4ca75b86683bf6c7d439214c238d0fe8be99f3f84407cac3aa7e0474823b870f6417eb1dc2b28fbbfaae3fa30e568d9c82907db804c15e25786b5ef43b29a6d9a7fe7c95eec9f5bed7ca8e96000000b024b6b556e4fd738723a5f7514be1a384687746b3a3a7fede65f897e4d4f303b17ff81dc404e09679441d93283c488eab3d8502116580597d5f5cbb38ac64a533c6d38c5df69b5087c228d11afe2db0151a6a5eb59c835e7b233865e03ee870b7e0da6332ddc81036aebf21c57e3e78a619779184c6069623a0c3b3ef840db81daa706920613df3e20da0d65bd117aae418f1f95b7f1021cb813888066c2c207bf02b065de565fbac35d5186b2177838500000168000000b018c854ba658c39f0cf8cb5a2edefcf736c8a96ea2aa0295f51d37628683f09e9f56724cd9e195995a998d3a57d64eaef80cb62bdad6a16c22f1b8815cc3db3468bdf29d94d7db2fdc38e2f88b5147607c82e3e96dfb459d4705f71a8d1b12db050544692d3e58a63533d4b89de511c5023d9c5d503d756ef27071f855965fa8b863dab247f8e7c2bb8aefd2973622d5606979adda0b7b83d9b49333bfc7ff6db736eddcb4ce39d3dd58c70bf99d57393000000b018a686435a982a315f93a2e822f8204941d3c091b1bf8781f512a5fdbbdfaacbb716282ff797817bf9f10afb30dbf88f418d44e1dc2dcc7b5e663c14d3221d765829b762eb29621e57d6800c9cd508d41befc8d84b13e92b7dd168f18bff9b858c8fb8c652080507a5e83fd367f226171baf0c014b99d1da9801acf4765d3a2555a12685c826037a076dbd774dbade602bea20a5a00ec368bcae97698c76bc3e114b50f5918ab6c8b86a730df832781f00000168000000b02590496a15717cd8de0a5ed10231f746f68c74a6f9a745b014756ab949f16fba55bfe957c5e830653f6357a3673d68020741b750d2fa875856c4282211ed32ce0965c97fb4a95061545f3c9762b47337c7623d0f9744a7c335e157a75e192685f476b6e12098daed3baaecd8654ae34e249181353308a9524a0766b7368430d8565c6ed7b4e18f56d84b3e749561288e0a198233f2b7b78c56ae786fc08e4fbad5ec09f35359e38ad8a1eead7b39c5be000000b01d5dde84bfdeb55b696f4d9ae536e100b4739377236f8688c6c51f55f9b1da7331404bcb67750c1c5a99a562d3fd66535581040e26d34aacc67d098194a541c8ddee86a0f70c4cd6b318997df0ec0b444442d00e2695a606c5d639682600a6631de96bc85ec43f4cf19c4e0576e8e42627a6b467e14eb8d60396faa079f5d2e24ac41a177a643713e2512775544746f511c70d6c388663d4e16624d3b6dcf04ed2078ece7515facd2574cdfd54f6359900000168000000b0127acc3c9b36ab02ca0c665df630e85a1de9a89dcc72c58b1d12271f1296d50bc28626ff637f27eb78cfd1a220f0fb0090237f1fcec8b3d399267f57da41459b408c88bca9b461be367205fdaf1a0cdfdce3d22f82ea1753770ac8bb3661b2e3af8f4e3c8096028bd5e2fd46383b9e8c2f83a1884c607482bc4fbf2ba352e6740a565482f51118faaaf42b6aa526b2e014f876a1e64fe265df47e1770edf62e852c6ab9834b4f17d32b0c9c55386c058000000b0102954a08372af29240c328eb43874e90412c416940d14b517949b95dadb839363cba7fefe2a1cb37a8312309ebe87adac01e6b6b126f808eea87bdf99bed1c2a760cb5aeafea16229cbad01de567f3c3ab1e4a0c851597281c6d1a805a3b0f0f90f6eb25a801dac4ec794f8974dc80c1e92ec2e99109fa046320870c66df8720fdc016a2a16584d757463a7c393d26c01b82b212cdba1ff8e8f427466285b3b952bfe64e1fd55b08f8e233043ae009d00000168000000b0287afccf51a9b2bb084e8e5b44b80518601309de21ef8fe147ae008e94e4040b7cace32eec84eb94058bf3ade2b92ace20fb54f74cf01f41f268570598d35cf4917c484001c791865684934091998c5922910cef69f9e554c897fa886d885e22e466f1a34d5879bc6707aef43d6b1f321fdd7713d647972f46166180813788ba91de03b6f26a0dc95ac65925b42984f42e28ad6962ff237dac4d4ab15110eaee56c46ab074f905dc10a997efba81980e000000b01fe8aa23b41ee26f5eec50dfb640e865e761b24c8cbdb4e430f05c57dd2911d3de44be12cafac8d43a035cda665cf195d835622b7ffb94d16ae0ba8bbacf2f02199eefff3c655129e418f41b4d96b7d934c0d4ac15aa8d690c567b331a1259e92d1a3bb42981c668bb51805bbf7057711946e9587a9e6539b4b8a07678d3767461d973206da53e788423d8c5a8921b09299565f7b285fa8fbf0a954962d29be694fcc3f877289ef711fa729508ff43df00000168000000b01aef8a7f88f3cf233925702153539cdb290f5eac14a1a7c387e90346f8308405901de07fd2e0e23cc15588be0d7f441d32762f4c016adb16571913e98823ec4e522afb287b053df4019362d53ba3a6893cedca2b8af63b4c551dae88c8fbc4996f67811895818bdfa14d4b00c68adf2612e9cf35e3450ee7e1939e13fb30490fe23a7b33eb468501e539864449668a3613cdf732c6b4492ad9c2c142aa3f8e6e26e6f52a06eff523099b8ebce5285c57000000b00adc6b20ef8d16da8ccfa2bab463ec889b18ce707f696187acd9f326f092c0c279a76cdc6d7600f508e5a0decb7344f7cf0b1349793299a1e7b02362678d71c5a6ae029898c7f74b683085a81ed2ec14e6bdbd1fd8d3130fbe2fe6027586bee27c3bfebdea1958cfcbe9adab72ba50282512a12114a12231ac77a8c55ab2b5dac99b216962de34165e70abe3e7594ea324e3bd992faf48314faf8d47f47ff437cdf648978ac01a908a44d2b46115746000000168000000b009d1434271d037f2e43421b573bb2f72088d56bb9de4017cf08953c8ba2867d055885239563386f32aaa24149b21ad0e98fc0780843c2e7219e914d57a6dd6abac29cfd5f3206dffe487e30deca7f121af4798a435f8f8a94620f5a52c0ea2a8d1c888049d6271893968181a7003d5880297a06755381a2083a918317f974a8021d4e13d07c27fc1ec83396551b7887f1d7d60bfb959ddc1a60bb36382434f617eb77413168b97b3bb33620881882042000000b025b42fab658d51461a2dbaf3b8d7780cb1edce386df7dfa71e5e6e67d4a5126d2aee04602ad68a0f84487cb714ab5e1b1abd1f5485902e3bafdb8cfc585573319bdf592f4604d10989b9701dfd50f0c5fccc5400b1825874116550e2c891c08e56cb257193900301a1e12c2fb8b48c8d2ade7a194895a6bcb5674c720f7eda15dae19112e6d0370c2e81f96b766de8ec190a0a93bd7b54c7e64bb3356afba1b24de0a2632bcbf844e09952a12a58eb7c00000168000000b00242ec5691399bf6b70fd45704cd50b2804f62a8e878235956acf2829fe8c553fb32fb136481c7a742365501b59257d123c4c9687ca2f488d32eae79a698fde1649ca55a3c61b499b634bdd57d6c2cd88224c4870831eb7b6c55e8cf173f877b5cdf47bfcb0c98506f1fd94d2ff9e6b1229d89d34f3ec44513000409c91bdc266b17956c44c649f0c2f232ba5ba090b817d1433371cfd5ec6efc000d03f408d5e8a218af54c4ede1669ee6884991ec7b000000b00d0cd2ae018b9b413c50bcd4fee13572ce2a3449306b32835225490798548aa24f940f250cbeb50f79b78da162e74f8062e0ffb472e84a1745ed6336fe76915ac06c660fb99931051579ff79315ee6f6c7a2b39880d401ef0e46336a9d06caf57251a332ce60db3d01301ee789308c711445045b2fed5385c425f9dce37f1e18c6348413f72223b39e9e6bdf43d8d4ff20aae1178a60339c6b7abadeb771189d43d877e09a6250d5964fd27cfc2cbe5800000168000000b00c71e0fd89d22c2b3a4ef4bf291e6ca9c9c80e9ac9213707368476b43fe22aa83ae30d28abeda74465abbf16ac513a1e7b37b9c7bb706d6b8adc2c9c2e661f241cc5cd663735c98c61e894c02dec3a1cc83dc7031fed444eb3293ee042d400a42762f6e8e4469a29072b4776ba27bb060c57ecf101f9e8f91eb87976ed6e2b3c379dd7c7cb8a1248a8cb5012d26fad132062d8de80e1ce553dc49b22e29f1bc25b08b597a57767c38dae845c9af79ad3000000b00644cca8885b485b7097afd07606fed66fafe058200a4881e797c79f08b1e6c669d786950ee960633f3c56f3d899235b4ff1a2190b8799d06a10b81b8a0081b6882f06fe0bf7d660eb30c2313e5bd5045ff99dd41dce7ac84c32b17eabe32f4ecd518e146228a1e01876c4a2929059a22bc904f70cc9cd913dc1f8126f4041ce6ec431a4b04a272daa9bc373248fd1f50231fe2975b78256dae3620f35861846be36925ebd6afb396bf6346dfa9318b800380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b00c0bc3f222c40dc1ad00cfd437adce1cd148398825b3e54ae73f2c4b19b36d3d5e2f73513a94421fd05420d355a3d8ddf7b20641e9022aac4f566ea9ab54b3d3e081f56428d97a1bc07799b2edc1da4b0d15a60a3dd2a5db29f2318ce5581720f978503adfbb26589e8a9eac90bc060b1e697d361a7f75294a8491ab02d78f1b72733304b99dcdeca8ff5e18119cc38023051e01a22457de496dc4725152320b7f200d748a66f17c8010b0a9a452bcd1000000b01458820520783df47a64021107f5423a95d84a6c893aab4c40e26bb10bceab95692610845a6d94ac5669a788eb4d119c62ed8213ff302b2f38a22ab261b14f1b5a36af95757d2f0fcc89b3eefcb6b6bb63c6c3378b5990b5acacb5bae904cc44e6979ae2c7fa8d9e69c5b631b3057dc405f613611a76750b25c589d6e916f6e62e0dc8492ae3a76f4132750790a9862430267f9f4874b2b096e66f3747f6b8c5291123996310ea2d1d02636bb7a2a51c000000b00214e45d7fd60873b7df6cea7e12aa2a1443f68fd0b46805b239ea17376a1a444847d8084da64b9d697bd10110fec7a8efb42b792923974375554822eff2713879558121877512e169c7aae7279c6d1026e3ba7e99af70f6df60fd2058a27f652257fa5abcb8226cac4a80d6e39156a30ff595612505926b61a693eb4af0962aeaed359f792ac16f1eaa5d11a03ff1871532520a21d170f17c36b57b209dfd91cfa844c1802b3908022ea67e4c971b0e0000021c000000b01836b1c61966b98d7075becfbad7e54e72928702fa7c17bfee981d0d5cb85b5a35f37ace7513afce58c762c8a333794df142bdc6808c6fe404c2f4138150ff8856c99b6b08372f729de920b4d5b0ad9815edb0e5d950dfa0a45a69bb86aa050756ba978a9e3b6be50fbb950bc91938091a8d834973d7b2229c539afb23a8106c51a5299cb409f8ac6dc311f215b4e45e056f52a17dbc926b80ef045747e7a73334c7e63802a2dc6aafd123a327b75459000000b004449e7cec0c46d01c3285395b649d847b15bc94120d7e4d4130648e75d6ad8a90253d55371e3eeab6f9fea8025258fefd91adce594958ebaf8654748d54cc7cad83e6350efdfdf425a1810ab841ab082cfd25cdfeac6acf40a9b7826101cea25a99b1ad83eb636c58dca1eb6c43f6c31c553ef2596200aa3d4c73de9534466c5418c880976184477c16dec01b8f66df17129c5fe5ff7d36b6b4eb0f679b3d173fb20dddf2df453860b0e9bfc0b7ca2d000000b01911781da8908b53401254993c571f37c948299c4f932ac9f1ceac1317eedb9373255ea07c3a8a8419b41b49b96e86207d7a7a28a73b0841ae5153dfcd610d96d770ede7e7b4125295974faf2d63dad404c2b200f44cb0694219c6381aaf61a645fb29133c01b1c020950d799a62eb5d28e010b62cbb0a8a07ec6ab907db82a07454accf9f1cbf732af7b192f2b82a8515bda4e48f8022c3aac2332df4b629fff23fe610298d212c6786b7ef30fecd150000021c000000b00d0edb946a08340060c80dc0762ff69fd73ec1b34e70503e30cd09206d5d0a4f2490ac439d6ed38e01a1d4f4d14708f95de9402713ae074670688e0b5a0456fcb060e07c0d72ccbdd43688c7147f68a499c7f9f5eaa8bcf0e4e73ca6f9092e21a664c3a890d5e7d312bf3a8ef78e0d7927696459ac24e66f4f1d50c5392dfe2b20cb86afa0d1ecee4274389ced46dfae08a5e1b7b73abe0b4e9ccaeda4cc1c408c16a616565eb00643e10dab1f28f8d6000000b0093abe54312631964349da761959ebdca395905e4afd213b26455f93c069bdf41987e5fb63607640fb0c59c32ef2345cf7bdd3233607b0618a27a3f685d5b4fcf049c8e8714c383e8b9d9113f7847bcde420523b395dfa2fa79679da3d05f7a793d36900b089ec50a4c62b7ff808fdc8282d94c88d18059b5a156b57575b6868ac0215fae32b8d0be742b91abd1db1b11f6b0be5398030d3d0589fc30cf8e3e67345686c985b11f7c38b13374b90f21d000000b01ecfde58157ed60b003286dc53c9274688f6913bc06f3d910791d8d87f2c548a3549c7cb24acebc39122ff8abc6c3330b439fc8916104962ca152a512a2a3396edc8e88c1f7c65e84fa12b7136861382cff39153fd4852e3f4d30b1b46e6bf0a08328c688fe661ae813127a7a4a652451ae5bb631c11a1224f5d9fe6426a84edd709a5161e62ab1362161217c6f3c69a26b913e5a9cf76bae848eebac9bfe4366dc32f061074a8c3666bc1d8c44d58230000021c000000b00f252a7c2615650ac35e91b1dc56ef766fd4557767b7a5cb8ecb253f381e586907247add6703614ef8edff6c85ab0a1c7744b55b7c113f1cfc7194db85b68957c6fd1323818065f7b9378edb3e7c78d9ab876be4a0254403b83f8bd7acdeb40531f91b51de24ac12b9c8b2a2d5bb346225633776c8fd9a20806acff06cfd512ec5fd6090a9cb64274b63b75042f5d5920ac9506d33437acb05b47de0a4f491ae41b585f342e71669378fe6565a22229f000000b0253997e04c1a46ac57f9528ae84ac78df3f33b4e8dc70e615c3321c6ad790f973fda8b53aadd50ba3e2ec2be28378365e56976bdaabd422531f5960a4408b0c685dc3c2cbe352425d330268154ce8eb332c35ce66e59a3fcd60a695b4112f6dfe89dc3866fd6a241e603c15d0198ed6008827232b290721efd421f5a07746e42e70805b4082a519b8c79b55019d7d9de071311c65681bd64e1251cbac45581ca1d1b354e0be724899178166d37965c08000000b02e51560d8156c566b88a582188d8285b41b01aafd40d83c0c6afb2836a9163937fc443ae2705256c0e26403c4d6960e3798e5559d29844454dfd24e254d75673be4482eaebe561fd18f5c2379039fcc9a26fa923c3dd479a14ee8074c9131f4064b988acc3af605fb3f31d7d4fd74cc60e94859d7cdd1a7bc329ae3355582f89978ec84300ddde7b1d3b6e79d5e8b96f1e8cf623ee288bf35f0567c24b1c51fd96944dd41a2bb0736e8dcf8233bdd4920000021c000000b023b3d240d9601d9cfb17cfc8eb73f0c501144131a308cba59269664272d90d5398407357d78fc36d14a577899648c00df66122f78058265e0907b54412f9574dd8f193211519474f18459d1c3e86419544e8f129633e6540d572437dd643cc6f284c9bd74bc477f55380980577688c681894536266ba69186c53b5bc5d9cfd31cf67e9ae64c8b558959aa145178093820359e607fb5cccc4d4daea3291f71269d882c9c6723fce6f1e074194f4f86939000000b01bee82a219f49b380ca7906debedcb728908f00653e780350281d5e78f9690959081fe0b19fb22d86f6dd33a1b962e2ea9f72c8fe96a476c4f672c3f00ad1e0e51241e6f703359e543d4203c4ecf14104ba2807a39ef844db41732fa6be2fff80beb556d976c9ea48f06a5a45e18fd4a1414495e5884cc98034c2b37cd152e419d01ac4d8b070445ea7697fea56f98d4038d726544cc9a04275eb09417d9e22ff06bb8cdbe7c0329422e6326672e85bb000000b02412b9a86b85bb430dec36963a9ab9e6be2540a08e24ef4a860a151e29c378dde3696b897998b124924a44718c4aca3541642c1e7fc37dc676bae3a3f2f98dfa62f2a3e810c09433b5b924b30423794d4485532687a848fcb294248959014cb807c4502b9a197e4a0a82e2a7f5bbd8c41f0a2363b26ff2ca2282ea24d1ae64593a828a7d50160ef4f44413fa42cd70ef055c3c9a428c49fbe4142c93e218e1163a1da69a1d7a63b0625e3ff2fc3535f80000021c000000b01493475deec139adc8e2607b77862e624a8922f12cd5e3e9b08691542395dbd6df9e45f39515ff77ef7c28bafb77a3a8de5fb75b843b43ded6491f3466fa39611835883f08cde80e8f6cb29ef067b3b5910b1d51e736b4b3f76df79dbdf1b9309912b1009eb4bbc30ccf5d032c579c381096732b1ea35d9066a3065a8b2fd8c18d021c6e77b2720c10c1318ad8880c8721f6e2bfd998e1b64b7a5c104ab0fdb9def061db9e25a67ba43ee319f336b07a000000b01e6a1600eb464e5050398bf265011a7539959fd3ca5ac7b1ae979b51161ca3468351ac39d203f08bbe19f1de6664fc6ab0a4f99990c8fdb67864c08c5c000cf54987ac95a05073771c567d5f58e74a13c157463e8c5dfe3aaafe463955f98a56150fde2b07a76c52b436be6d7ee0dee92719bba0b4b2556205d3a37f7337d8305e8a9c0932ca8ca556be4f42b4d1c96006efc926e04b91477dd18c2eb1a9fe820795e92e17157efeb5a5e6c3c977f9ae000000b00645947c5e974d93d1376b690e4c75ce2cb78c787e4d045e7a3fb2279dc60975d8de82d4cc85d2420305548a0db8929378531eea0cf9a810e2629cd25e0a5d076f5c3ca574bcf3bed7ab8249e4c540473d8d8673e5839ae13aecb73404ef1ce6f3153f5785c59d656d001c9fc45c5dbb2946abba51c7528668599a26a742fd581402d613abf13c3e88fe1533347e97ff091ffd406448d4a3ed36cb69848bea869330caa39da71f8395eb501c355275230000021c000000b00602f1e84c544e1d6d90ac4c550279fba174ab86172a1519457c66ff8e7006abd8a99c3512329c7df0a9fd2271c323e1fd104990ed460e1e3fdaaad1529b8f6b126964c59a9053f59948c5efe3866a99017adb09ab8ef6fe17cfe312b562ccd51bbd61083ac3dc24acb1dec307a2b9221d5e32641c43077cfa216104c18962cd7d600fd2f51afaef5102f50be4e79eda05cc9302cf8b9ad3c5abb7faa2a695e9fd9c16143e6261df9b9bd6828c382d5d000000b007fdec27102303d458238bf1c8cef1ae8a753dc126c7973590f815124922fcfcbe73bbd73c2d0faaa8a7880ffac51c7c3eb1bc02a103af784af66af5efee3e53772eca7932aab1b2207cc408817fff95fefbb44c653c51dd023770139a0047050a3dbeac1ce827016afe4c1033ebb0f2064bd27c24018aaff3149e73c0d828e9fb65fb89a4d27ede4267dce91323359f20a9877f70ce8e736e3b766d6cdf9a3d2a67d5cddba922176bd92467bb9acabe000000b01248dc8eefca532a6ef0eace18bead1c81709ed2d311472d5b7dddc75e7bcd215eb9f8f737381fc20379b60d272d2823625479368128f250ba7576fc3baaf370048a761b6c8208d9feb3b205e240409839a2a1d8c78d6df5e43130b9a2a7e6993f7c80a6edc12ecb65e57933428c47400f4ccc6107ced0bc1b81da14763d99aed1197a4c4b6e10c4c75475649caa721d17b2aaea598b563335f97e93dc9d02fe87bc52e31397b67f004c14814289a9630000021c000000b011e9f4c99aa0b24a36cd20cb62f77b3a6224a094558ed5cbffa06fda29ad2255d775e93f722edea5dacb8e54d8d469f4a13f612a67b83c4902fffd4433beff860f57975c224624b4be7c648059e4692abd332082b82f81505ed3f044e255061d94bc3be410678992fb2cc4fd42c6707f2e0745d903564c3673e4e32f70342665cc7ea81cbaf827b03feda2db6487e27a0b3192d7fc1b89d315872641b37b85475dae1bee77f855c0d20f523c7976dd7f000000b01d2c32ecd4e3fb394c18ec032fc0f4ba4f9e88d10784c44eb7c6830974f675e804b1861ad8ce83384f2bff146ff60942e97835fb2dbbb73276640f749c7fdc0528456e083680f61513f9bddf6b160ea4332b1fa2a9f0cb761f028d501c6114bc7d7a30073012d68ce5d5bcd978b3a2942ba6eff81bb351378260943131aee18509891bf40499ac333f3abc7c22a5bdf62a4b1f4af17e16c16675dfaa6ac813345274ff2c3efdd07305828e9c9343acd1000000b00811da2ab45852eb653cc1e84e010603920ba949f77ec73098f180b645c26163b572bc303fc3aac141d573c8bc96f3490c01026791bea5b71b7d3058d6145338059bfd523c68dd2d2071d74ee6bdc403f4937b6e7604daedee8309d1d192c9e1e6bc436cf3769e8ef559adc61c75587f0043003498115367eef0a0ace08d815577c4a43720fd6442a17823b42904e59e1c5ee069f9cd06e7e76774097db7344d43fb343ece713dd3dbaaa555483f6ef500000fa400000168000000b01526a22fdec06280b130ebcec727fca2c0827c1a4e05fdc2a528547498ef0ec7ce6f10b1d26742ad52c5ea6a4f324ae86eeb90ebb9abd91438919a6bf5145264fe51464cfdd6ebdf37e7c98245fa0c0e9817888d57ee9c2814fffdbaaeee320b622d1beae077c21b0ec8fd34c7faa4f63060c0d2d3f5678a2acf8282885c964d9de3a84a377179b92b85d38c22c8d52b25fbe763d49fa2577952f918ab1c5fd7e5337813b81d8334e3908bb6a82ed658000000b019a99c8ba61e0359cec10565a4adacae790e33053c994452ef7440de24506f594f03d75053cda2fdae67fa66d376adf6159057aca7a621527445064cfc11f425b4a9402931d6db1ed97a446dfd48561a2dbea561615356351fa0f3452db0c91a79ab76de3cf7c4287f2388692fcebc6d1cf18ae11c00330a5646eaf1e29a379089d4003be72490c9c357be713bd9b8c305289e9b47965556428d95f4e25254edecbd1e082423da6b8f44a941ac328f9400000168000000b0209b918230b44b34ece509e40f78300cf42047dca6e57fe9a5cdee01b363cab8d6251cc6090e11697b5be3ae3ea67eb851dc3cc6c3b06923fcb7d9c10edc507dd1a39a13a1483d55e3e80a01241b7ddba038ae3cabe82e22d595f78a0e80bcd136f85cc924f3d4966d47e86c27fd6d0f24ae98e6ba687ea2a7d236521c4bcaabba1ee8c0cf57e2b22549f95dac5020460ace8da750b1a9184fd60053979be2cb0141f97f287468deb8f9a2f0873ef7c1000000b0167ace6a52f0f0cb871c658d4ad241ba60571d47ade0d2e9241afb0279f4f9cee00fe997ced4707bdd4af6b102c4604fb110d85ba613c71811f9894a59441979e815d6a4913223a4803d11d9675bbcd2fd8853a99de3f1f2c042980b66a8adc1f90f729353e0f366508efa933830d3c81e699087b0c4cf95559efe8a7770ba74a6f3568c1f01f1f8b1419d2d639d64c910980106199103375d2ef360481eff9a80eacf254adc0f6729b06802aed39f5b00000168000000b0212cd31e321bdaa4e01bee158eefc0505d379d25123381e9fb398c861e5194766dbf1b87e8f164d0761a3ea463f532b0d293d20a30b2e82af50d2e8a7c9f9bf4af956cb58ce2d9cc856023359808baa40fffc2bda21e6d308ced6bce47bf9af3b1b16cc69f45835c67b6104b791b2a2e2108b52b5aba12b775931b7a722f91acf1051acb936267c3fa719854b9c49a5a0560a810cf8e24a275714802087ad239988993a66cb8a7a7bf0b97dca174d1b6000000b0210115026d5b3a91de83ce1e1d42bf9a9caaa919f30cc5702179a7acf22300d16ef1268f7087d6f962902c1fe1ba6c87c73f760124e35e557aa2f8d58169c6b13c82c196fe3334999d7ff01cc972b0d0db7ea6198c772f0b57bfc2351659c566fc7367ad2b3ab4eced48d279d4c4efe4204dbb60576d8441f95cac90ed1ec163dfafee31ce651a09d30f679de9aa799f1b17520b2e5cce27f86631da59fdc8f618f7d63ab194152b899db75ca51837fd00000168000000b0074f1757381276b8c16b9950288b25f4536e2902ccda215827b4b521a7ba8e64addc011d55c6f7a886cfeb54780aefb17e6378ecdcfc139225551424024ddc4be0c690dac240a808322c6ec066bfa269c160b1d99b11a87a2b14686caa534f954d9a6df4a39f9960679eecdbad3df02d1de30b203c7c213229db9b02397afb2550eccf0c966f4d177bccb378a0bd184820458a95a0330fa0ee77d098653de7045cf9ef0bb2c33a028fb8c0755f22cad5000000b0203fa62ec8ee174f776b709adb8f4a2162e6df9b057809089312dc0025231c46338cbe0201a95ca0cb281f555dc4b989e7520e79758c516bf52a66b1596c9791af87e69abc9d5884d78c32042504dff81aa29b6787b1b7a99e6a4a49eace6c366bd142b8a77832315c24433bd5c8709d24c4b4fd6b069464d22973e060bf08ed4580295e40d359735beb6a8e0619548a00a8c1d1a0e915b69d1a508c4cd65d8a102245526dd7e74517af5bf4ac14022100000168000000b02a8a81778b82f80b365e0f43587cb0879249ecc96146bd2f3612bd0095eb0b0b1435cd6cbfb83c305d3730f8530b2d929089897c6f41a969927483556350070d8903c8dde078ca517c8b433a922d1dbbe4040fc33beff450f92e105be72c9f0e043ecfa51b93e4e479932a3ec1801e1b2abdbbcaa2f0909cf36fc1b443aea717eb344942c8c7ccaf2e1873895867e1600cf447fa42d183091872df7dfd049f045c3f3b15dd20a2c0cd8a75b0f3e98a9d000000b02c51114bd1aa59072f1103ab69eee435aa069b82c04f223d9d6c110350d2b2b25eed04829e05dbe6b50301d0bf03107abddb6cef6f7bb291652a5eb11068b9132276266df3636a7458a69ce658eabd0357489714558645aecc423c9ecda96e1670d65b4e8ff8bba540b4bd041f02f24110d7a8573b78ffdb7d9746cc7923dc1948d803fd69afcc20d14d330ee83ddcba1a9daf6296f27c0a6a8b016338e6b13743c299e07c20334643c84fdad8e4892400000168000000b0270828488e05951c841f7e2f309b2f49d0139c3f58f7b06b6bd975eba60839c9aa02390816279de9fe20aab7b6096593bd29847009124413686b442581f921f0405aa8842f0436e129ab41e5a1df1a28b27c73214de34151d99b7289986abe2cae1c3336dcd2df94527e695eecee12b32bf1438cc06074bf9ed44eb2f2e36b5d399aeb809dfeaeed9e8935672bd64a810a928310ec8ac2fe1e7bb4837a8ef253416cc11f5eb3bc402eca750e2d6d8e34000000b017afb9f1a5a1f0ad51404712bc487bdb24a876e136154d9907f7d26062c0080773f39365bbff46e738d3c3435d88c582c859858450e1d37e526566315a494dc964cf292508fdc3ea2fac8dd27fd44ea3f8e5220d11a7ce91c4104821ec98b05ce100c2620602230fc43ddfb4fdaa71c417b39f620f22a2da910656936c60b26ad1fb3f8dd116bf03fe95a8e9013cf95911a404239966a78ba5a87bd02509a1f516256c9c22ac8c78b90f7be38a27d1f200000168000000b0015961bbfbd1652d6fdd1c986a5551d9cf7fb18250c88959e0f1fa0de102bdc4c2a3d23ccf346cf57aee7d2a37328b5e0817ecfedfaae2addf1fc4b402d68a31d8a3161bee04216214fc72a512922427eea12840795329e51d9c68ca505deee344e871a9bb73fa3cf963a519696c699c07aa7a0df4a86a85b9d3ef16adbf9b11e8d006fe899f871640db80bb841442ca059a2b41eb1c8b5886a2e3ce15bf1359f6aef5da5f3740026e5d26c15d6ac9f1000000b009c7e86a9231a1d1033714889eca225e6f48dad8d732e8ffa62029f19fe947163481f1e292aaf34cce4f0234ca8053ae3452fefca308f265956ed802b5866d91423d015d1f6a82d968d7e639bb1ff1647013fc1411d3a3f6c7fde5c75664840181ab5fa6b71fcdfdc971594195821c682f795047b1959fd5a1f2e921a14c79d3c083c36f8cdea4570e422a68d4b7a11e0cc15d1625e3cb863b01df458d0e7dcb1deacfbf76b70728e111bf69fd603a0000000168000000b00fff38887059c0636054d5f0bbb93a38116eb042d1c712f6937725902087037fb1104b361093c8c65d63f3802c0c45f4db2b19dd22ff966e3e9534dc7579c560f17436e9f471558b4fbbcdbe0cda855ce149899fac5abfc2d67e256df5c94e6480e8bb1d45ef32999d54236586a0e7460819b56d50d13a565f255e9081f0e9dd87bf2b3b93f2ac7b690b2b28beabf24a1f1e596b9932e982297fb6836c4c7c2f77dba24653fca101a53253e60a7f14ac000000b02b113734d29d2cc39fecb31a10d7abece9e74e72838f96e3240c641b8dafe6db212d35eaf8fae9d6b2481cde2e5680da25308904d8991fb079890451d70e0876a85fdc4ad691d458c2fa31cc0340066b27f082f100eaaf992b6e030d1d79433202aab57b163e62f503fe79dfb62fba9f174e0d631221a275a199e9999956c2afc5c2241a547e6bc8944cf207bcced0ac1b972c41dd04f1fa660097d32ebdf5de987ffa45f4c5cbf5d8dda72fe4aaa6c800000168000000b02dc17d5d4831cf95d0cbedb120b5c173b136dfcb362942eedadbc39f82e64e03b9f43831efb3bfb159cfc7907383bb840a9471577096aa9bacef9fbd26805e343f450303e595ddcc67ba7058569cb69a78406f1af00bf9fc2570b7f5989feff08a4aa28ff0181e8aa68ab0bdcce1b7c20503816df37485a98b570756228ab6aeab8c256369327365781c198dc1d70eea106b9feaad27546865175b6b41bdef94dd1d411b2d5214bee18f4632c595388e000000b022ff21a16dfffec9cb2187fb6629389debf5e1364ebaf604b3728443a515bc9cc2d47ee154ebc7578f3b7d8d55058be41b9f382f2100c8eab2862f94a3152377623c92ad48f23aa37cb8666d698e32277779f8b9a21472c6e305fef5baac7e7c3e121e00cedc90562dc6d3bf394f9389184f0d6164cab0caa6bc49cdf6f62ce35b50525a0ab17988c124c368e95fba39124719128489c4ffd3e53000ffeddde49012388e402f4420a98d06948f38035e00000168000000b023e34a5355da5851224e98a4c83502dce088010d3c2c4f636a360d3f7e0a7d8a2ad5655cdf535ede7ce9b3653be55993d6d0e3390e2d12b9eb3dd505b61f3fcaa8ed3f7647c33eee9d810d52bba2d639a2d8e6d369bd4552138ce5fd4a2e3a98f2e3aafe09dcb009b789e86d5d9d69cb11fa4a4897fdc033db9d71405bc807b65461047b1101e83d14a9406235a1146b23bb5143c01c3aa5638d061649841ea75e722c9841d9e4a0509ea727e37b44c7000000b020ea86a24673d0deb5d1191b1479eab68b27a1f1912fba5d6f5cc485e7cba3b6d473c5154eb7a6969ea86489af67f144a5bf8e2e6e18dddd59e3814f9f203fc318be9323e5489decf91dfe4ebd6b8fe7523ba2ac88b25a8d467fe5593fa83ae4cb8892ff26741bc2910b751b1a8d0a3b28db1dee2f95b0c9f1a11502646a2d2fbffff4b2b397e304d7a3d1898ae77b2926d1f14a162b16191b59414bfe2933216acd4c6349f363ff073542ee4fb9f33100000168000000b00085541565f0fc0cb599b207dd21ff65bcce290c03418881402692a1a906a44f020b433c301ee73dbfe6616dc714299980f11660b28b2d1ed84bb874e9c01ddcc6e295bcd26cbaa1d50816d6a4c185af4f9c7512e2e7fdf0c77bbcfa6de2a414855f2a8c9c98c91cf7ae34af5b57f5150ab56a5707a103f01fc0a15ebdde654fd66550aaf503550a8c3c0881b21aa6e40c284e2c388ca2fbf086fdf922cff26c830090f16a9e6f7a235a9015bb303449000000b03051aa80914f3e7dbb9ab4841fb1447fc87555f170551a3ada85927bb0fc0e42933157df24c33311f88386f32cd525b6eee6702ebf673765063efcdc1d44282e734dea27b45451049ca6a84503cf6f097dbd90b9b15de6ad171857b650d226faff494f0ea3ac9a85edc3ed046e5d1b8f01f8389263f1599976155f2657d1ac96e5a6d0c93aeb321f2473cdc89f8be017144296f686baec8484ba330f1ae0b80206f21068fd37976a6a96a56a3b49f939", - "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e", + "archive": "0x069b6a34faca1d26293c7b2180bb3ab11288ff97ea64341639d846e2e16fe21b", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b01cccdfa409e3e14d1a02be06528e7e9a1ba8c822e7b4702d6f83bfff18eca561e25bbf87b7949778eb323576264464cff4897322d6ea9954e20963cf5c2ca4532a221d05feb30ebeae425190a4a30bb85706d49e102146104b237861b801b98ec8237294c89ea946354bc2a0800107d82c61d6958fd67b75f885db8a9d7e4171cde0ecc8b2cfa7818b28282bfcf5eaad2121baf3606c6522616ea96d73105d9f57ea7744ba44fe10659b2f6c07ff459d000000b00b6d781981b272e312a56e4470ab4f546e355c8d5adbc0d9c20e449a71e02fbcc1caadd4794f476b4907601e64c6a5ba935d02cfaf4ffdbd3f577d592ad3cb6133d1d5f8fb7b5c13da6cef9206fbf6e8f062e2660e06782b2559d569a7ef645690663080fe6e637c6a1b6ad4b5dd34161914b8bb8e9d47673cb4b0df16c510d238afb5fb90c6cd851096bd84deb227582292a2e0742a94c9a262c2f903e020e7a52418a23912a6a1254a0659b860e3c2000000b00dadf5ef1869c869c14d46bcc3bcb6650ae555a77e74797c9c89a6f9d54f8a8c292c408e8b844e49cf6cd8a7f77c542cf4aa2985ccf6509619db87c7d2999d0d5a4ac9899e78ffd7b203dbc82c3d7de123220ad8bc6d492de3d37c880ff9de082c884f9c789437eeac9a0863588e78d40643141a95366542c203c94ff6c5303e49f5a784f5dc5e546791ecc5a69276d81657ad82a5c4d592586328904111afc95c9edf9290ed02cb2e03b398c6e87f650000021c000000b014b0571f7527574e32dc1a104c2da8b1d0cdf7ab040b52690efc4aff99235840ba8ad70743428f4a8031537f0c3dbaaad3fa7683c268a107c4ac818b138c1d3935b5ce5c0b8ab947d114a4a430dd0af62b0817f2b7e4c8d180a68f0765bbb1ee6d991609b1d2ff3e3a475878ea44804925a07be18c7485977db7ec5d2aa9a12bbda8c7aa803e0b59eefee7f34b4330f41f6d12daf1fcbd49c0c100f91090e65ccff5d9d83425d19133bb4d37b71a2db4000000b005f4a5e38030e4e0d457ccdf030b91984d62260af471fa1acb938d4994e78f15107c5ffeb82be04ac0505f0005e38f4f823db2275c2fc048df75a7fc27d7a429d52c4c58f28944f58bfee88b744caf4a7a7b1d204c2b8f2a1b7f9a13b5f9415870a3bc95f5b83914e465f6b26a1166970db39039e33b8579d15ca81b3b4bb274671348c374aa01b81bb0422cbbba09b017758604899d1cce743b8d907bdbd0f652efce605d1c8c4fa7ad9fbf4c90941f000000b01ba2ff8c40759d6f152f9263f3768c930c1efc6af0c3915df1814ccdf47c14880bff5a2b5296c61708eb8d3dafbf9d52203abbe57289c434790d23cfb11014823d20385ecbfc3cc5cd767df7877399420dab13828efa3a0a7cd46214b001cce340087239d68b8a6370202cc0070b8bec1e2ce89bd452081f0857c77e47394ea9081235ea65a75d8dddff1a77410833472b059f47021a71f1af462a63af445f290aa5644051f565613cf47ef766232aed0000021c000000b007a5abe5d5c17b682619b68ec470b2ca1c09532f6407ae7e407505ae760c8f4abe8d2023b68f4bdfb2df44cf7cd6a27b9b677e61f8966fa6239e035d0c8d910cc3a2ec5dff26d8e23f065e447753ad2706ec21e7544786f8c2b3f0763c69b955f1b59c50d14647103e156a28d5c93d402b962165ac1fc769866dca38d31529e18cc793cf289a17abaf1a914079302e911a003396bf0179fd26004da3e6861aa9d5862f9ea50d8386d055c65c013dc159000000b0272d22c9320210d7ee823c7ffd20235fd9c33e99f103903f65d08c9e960618c6adf96f9cb0f73e1d01d133c2b0b5117e3e0b450bbb9d54bdc8b4b7ffa7df4ca8224a2d5a9a428bb56edba175a678afa78d9e108dac2ec27df14a92cdf808a80a642f8c4c39e84471ccf428ad2f19bff422ee4d5fe484a732d11b3e969ac97c1f7b0a5123457d80db58403877b8b8bc680cc8ce1806869a0fca21a2afbebc81ba22ebf4b52456df67b01bd6d7bd7ba900000000b00fe0b1b55f950413528b351ad5af93f13c667f01b10c62bfaa83555e00e6f0851e668c967dfbdee3dad61fad6dae1231b53251a5acf6889fdd2f90a95c5dd0c0473e6b34f35dea0d3e0e3ca22c3ed25137b97cc8b2df5230e8893f5379756adb3e4d44576911524ddc0b84fbe1118b080eea14f88cc6881654b1d88d02711b491f436c7069e21332c7008df05454811b16a2e323bfc8facb305e47ed3420e1c2e0d157ddb2762fd8946d8ff3833decae0000021c000000b02bb35afe2bbbe7d4b83e3d056972a8d3d652edaad506941f87f76211f19ffeee03ae3bd84d5590fe69385ceeffbef9638eeddedddc88ea6e2f2fbddae258b13724ec33c4df23db53758beb0b48bcdf72d8594ab2ce907aeb36ad29ebd9d7c299e95a470e8f9ed8f2bb29271571f701421c28a41125202e211ab2f95eee4ae034d9c977da10f5d95f44d396d86aeba00e2259a7f0cfb3f16add3187c1d0d4d5fb6c09f56ab2c14a0e110c515b64e26323000000b025a6bafd1ba17ae5d1e6d091fcbe083e40239f465c27ff61aae10b708a08d4e8161111d59e2cfba652e099e00c1670c25c7fa6949d156816724b8ce1889225ec820598b36040f41e799c54648aaaaa27d5ec64e7c63b1b46ce595e67246faaa69a01da8ec71c145aafab26e7d5c9627e194d3e85b2e65f80624c81f874cceef400d1a0e16fd49dd8a3bf1ff04cf408cc2c2855bf2fa7b8f260e7e7809c77278481bc64a172d9b720c718f41fa8227020000000b0166e0658c80af6cfffb0638f75897ac5162d510c1168ca0da1cf4fc34e0b6db08e7998cdd268eb55636854947c37e4cb50333456fa5cdc212e79859d9dc161c18704b51e02872f57b44d3c18b595a8e5f3aaacd6b64e8f8382af61435414797afe4d09a17ca2782d83ca41fcd01a8ea22e599e2b78c80b4ef4009ae580d4222d121d7748d2cdef2506c0971fec142375289309533ad9b5660798ce5b501b0e86aacd7c6fc150e5b957753d52520ffadd0000021c000000b01c65b3b8d35f7bbb20df800d30e76bd0133f10900fa3a5fccf860449f231f047014068c1c8aa1c1eb24c813239bace6a9a0dc31e49046189faaf1f71ba87d74a0dd421d32c045e85f18abd3a0a6bc33c70acd2b95718172e9dbda833c3a0a32f892f902a52c17b08cbbd786edd582748210e00c94645571863ee6f8bff96b9dd8751ada89928b581736f95da5eba8f3103c7d2fcd20628cc9b154225f07b49f4e57b98925ff433ceb4c6f232902941dd000000b02c7b6569a613950dbbfbb5348d8bcbea68ec09834613fb7070352a9b82dfdcbe99f1766eff480cf0307f54e4f0f869748719835f316dae3d23aa15a089d07a109c6afd8292e2917add56cb3ce01fe6082964d38b82800ef38616999233216f91968d068b1bfdcc266b13f4fc8607e3d02bb653bfa0d20adcdf21de48e71cf634115524592a670e8dff95078077b488800d0f8e9b7bcc3a9d2339462817a5eb0b094155d8f9cff233dd719a36b7159947000000b01c4031657961b27709eca65b4a09b7daa002825cc779cf5c14e5de45e657a55aa07fe3e033222256c28170584b1e4f9676b3f45f4e45435d6b27db3dde81f99723d57e63fba10d6955928f4b880dd0ed948f922143302fd23f0dcf4bbd59cb889e34c5b0be0b8723d11d3bbefc2d28b02fb7d1ac0f6691de9dbc893c6b6b87db58c63df7439f4c089042ce23f50f9c7706e1334ba997de6a76e924f3e968239d1010f8186b6cccfbad9457047cbdfa9c0000021c000000b016a1af708c1576469e24c7ece11249803b791a08ded47deba60c81e201eb0ee5e96ab380a93dcf92c1509c112e2fd114df29b41eb6724cb2e5ad409e7191047301742c64d6ca1a603146569e9c2a6d244e027abdba57e35284141a93b760a07ba11dd384c58f8849cb3dba9981bf95012cb2e806206d060cabbe8507716ca805f6182f56c027aeaebf4cd6df9881f82b2727482ddf6e6449374787434e31654d01899bc79f29c9be27081fbf96dcdcaf000000b00378e2be7ed2d6e36f199630071ff360d880f5810647d05c9530b4b9b2bfa6382d82f9cf6d094b533aca287f0e5de21d43fc45d7c60b25a5010b90ebbe7aba46003b7265059449bd55b2819b031753a6c2c75e012f5d3ac9fb4f5b31a5f05fde78c1d38f57aba1fb920852f3fefad26a13d161ecff81e55508e845f5c10782d66dac94dabf72760eb99c69a3f94ec8f5199682bda062b3632a192bdcd9f46d87df7fb18cc1625eb51007976bd752dcb1000000b01d75b72ac48a40e2219493c807857cfa0a3c3ce8ce1720cad88ee781cc3db7ba8c59baffa46d963f9fa4da0c2fb7e3c6cd73607c557be4efb125cafa9340948b8b664741adb8f5fee38d1a309505a524dd525e959ba1839a9d8728b00853a25dc02b900506ae603b25e9aa3de9a15b6311d56f9e0849d4573e1b3fabbf4f7801dfaf50007c6679bf061e60a11634033e2a126a529c16a2b38c2d5fab70d9cacb4618353d5a9857564193bc81b25f90bb0000021c000000b02102a1e2a0991bba7d3e3ee30658257b4b1dca5b0f00447b05411f77d57403a9d0d410a61703fcafd1caa57da058ac59f4fe8e4fdcfd03fe5c1289a2889c7f539a4abb3efebd0654fdb2fdffc363dceb528bc1f0f13cf7b8d609376f78b0ce2982e2ce53f32d984438638f70859c187b2c024960edb9ea00faf43d95eb224ab964271d8d30fefc92c5df36cb2c5bafc3056edacaf783acd0c3f66344a9e6a72fcff421a68f6e6b0c6e5e6c022fd0df96000000b00cad9cbdaec7af0e7cd968d1420847f45401be9ad9296c30826e9e309266dff8f8974221f0723d93485ea05f853ae84504a3416c61a72acfa7bf541d68f647110859e7b55d6191aaf90eb19f7a510a005ed18482997483e22f420248b22f1fba77e439d13020091bd9942964bb5665b5199b7b06a24d8115cfca5e042a216ab0fa84d733590f9d60820822405902579414f90967eabd0eb9864b010da5b424a1d92aacd19ab7757c572a380c4693f615000000b0151a0fa9f0a9d6a74db6afc20a180635ba6a4ad5232d055797ec55432b69b5fd32b9d97da4657424c7fa05dd0eb847406b1313f47232a19fd600930c736b9c73ff2903198e48408639709e76e74e96347bf254ac95325fef3278c9c6dbb866ffaaeee058893f56cba9e7746f4d9846432f44d79665258385fc13da84fd8e6504833cc26ded42e5fccc3e3021e7359cff0e5b3645213b41588f5343acc140edd01ee9985c029a9093a88b434b1aabe5b50000021c000000b00481da8fbeb92f3f955d1de236681fdd1b436dd955b18df77e0a0ace915e3d5d2438e38cb8f170ae5818a394e2e15dd87957a060199a377b16c9f2075699922afb3583221ef4f2f95fa67c88654451efc1e9c9bda6decef0fe94bcd838e3f1b674be82bc9c800cd72f0a95a65770fd8f2b917df09a9e843b6bc2b7361e52bed42ee00ec0dea4e342a59fbc252ced75b829758c47d0be99bea5ada45847f32aadaa563c278887c7ce37b44eb586ca2c54000000b02ac772336dc581e6729d096ef8cd26c8a107b44ffc7a5ff3b5803ad8ea0341f4471541f8ee48170c4486c41146bbc6c1536b51a14aba71750b524e451b83405cb5bb7a6c64379e3094807352e36a8384167fc399ea939537eee7cb25bb0bf90f58e70c2c0c9b7083a4a3b31c61bd39a10d427205c49d534685498325dd1bde0db60ff0acd080d624d26fc98a835804170ea1e5667c92ff6735eb4aabfc32f05d5dddae5f7139a51f0d8c546c8350be9a000000b01c41c407509c96a1ff0d703deb373e51274ae4356575ae35f96d73db174c1c1cd0cc431ed51dfb072600f810467cfb76e34feda5d2de2c3bd8584f64644fa29d6686f6ab85999e1f783f20cc4df97d7f9bd6a8637160d5fb4e296ed441ffa0d158a2d23814c124a7604c61e5c210051b278f287ecdf93c3e870a0e0a60e0c2f8f4b3de785d239997eddcbca46211026c0f04e180cc13435f710e7b3534c16c780f8fdc8d0f1512f60e6b2896a5d07adb00000de3000000d50000009b2e4f97d93db50f74fc69189a5e26b799510243dbe244dcbb44967aa88656da1c48120616000000738b812b2a894b7a041f4e64eb90eb036b6b313837fab63019dffd18d228eaeb2339362bc050d2fdc9d74a5aa679301f6352f34df8e6eb14626d1adf0f6189df161a93703f0b94eedd57c79dc26ee45095557e120b1164040c649df6e9faafd9ea478f6970a67ffb551ca2a61f4b3dd0cdee3a4f00000032118f11670223ee4c0f789d0bc948f9429499679acc98402255f3b7ebda50b7096f07cd020000000a4c387693c78b8330df2b00000194000001282f80912c099d4e3d750334ccdd6715173d17840aa200fcc15ee91c6fed4ccdaa3ae268730000010051a214c092e29d9de3b199c52d81733b911044214ac8dd34dd58d43f64fc0f9171a7fa241af5e3b4c1b3d387586e65df994a647f134b8c66217263823e8d1c006a8a562b88bdbf1a291aa4124907bcaae6d60ddd472e1240adc6813126dea5dfcff57f881127ab5c6775335a6bb84d2deb8712632bd735a7e207c98a4e5b4e75e5c474f5c80743fbfed4889ee8e956156e8bab7f88a635c28355a0665b641e8eda59d42f6bbe125f8f7eda9099f3e503b57b8fd725770312df952ec5aebfff65c6c7db74fbc62af070ee02fbff719d330b08fa941abea737f693a9a5bc31c588167816995c9fc78fa6e2d2e9b62ec0dc74810ada723a1a1a888b93d8befaacfc0000006413f0e872373f0a05a333932be7481450ed99cc8bb946dad2095ef0bc3d36a1beec7fb8590000003cf09a5fff9775bba30cb6ae4d57a9bdab795e6d71ce13552d7a5c3ec83b1127f1ee9ba21543e335453ad888b42605bca2748045d40780adc9f0b71f4c000001650000006d01a0dfb030d5d45eead1e9aca6c28ab592623d752b9aba59560b247b676620d21dcb7f6700000045dd60f8bb788b861b651c0e29859ccc5e52852a7a7f3b437eb86d2a97703b57860da3dd28a042e941f7078ee53570fa5868b1fb28d410229a1a724383e0b8e5aeafca1564fe000000f0222b9969378dbfd4e287d09e00fa2306287855f50665795f5967bd5635fcb66d242301bd000000c80e904f491366eb592189b815cf906f09187d13b7cedceba2d1b3a4e901b232e1ba54320206e9a1b74150c5619f6115cc2045c929db39dfaee8857fe946b29a9867f84944e0679a46a67b8fba76281e241c8375a020c05c4c00885d11f941616d610b2780d24358657adfde07b43fb267991239f15b0dc3d7008b29724c982cd21942a826f3452462a4143e586b99d1e66bba7aa92769d6add1f8fb898be59360103b24f4ec45e623cd1a3750bae1db2c33528277ddfe374a5ef31d37ca67a2e88aa88542b4cbe4da000001c7000000a80a98bd98eff03d49246c898e20a8c08f24a3d228d2786a22e0d494d0c22e32820c939caf0000008039f93f100b58dd0b801d2b7be8a64f3759d7798d8bba6f5679ef91d42057b8d459449c799eaa9b5b8c191cd4e8a207eb7ba51266650f90c2f8dfed258d1e8bebe1b4104138b42cb391fc14510195ed659b0bcbd11160a2efbe35f0870f51c9c1e5698c31c4e69e135a3b309c63d49ed09873f1bf0dac63eb7ca3af14d3cfc59f000001172249ba38eb3735939c2e61cc026438386ad8983b207c9804caca99af3fa5bdbed0577e2d000000ef300c240dc5cffa6ddf8605080ceb719fc22f526b455ee006061582a032080d53df8bb27daf1b8fc5c5a25b2e9755a4af319e62eb62c58828744cbe8295fd1fa35141991069070fe15f412a256a060b9106b0915e7a51a744ed836ea103c1eb94c67a44857b3ab13ba433b5ead0e4b8e5aebf07bb52bab76d0a0524293c4ce1055bec5c5c264ce8a3c3449611a8df668bbd386073cd79c92c5243be5751374c2b41ecdb4bdee00726b8316df2b508fa6d20ec0e1e256b073ec0a179ae35197ce51189f7c8c2e2067eec20f1389d35582f02dbd70607c6f4f1c33df710ff4f984da41e8a6b095b60efa66146d6781da900000180000000b41fb23fe3cb799b468d43176b118694a984232731981b6076bc1c2a4cb61f41faff82a05e0000008c41644fe8d4771a6d1cdb22b2f57d330ca0e86e002f9274875f668f8232ff74edd74b2d8b95d47f8ca39a3a5da8e1c7f110a4d72592e51d7663619ae84a5511a22a85f8205a4dd6f8d9b8b6158fb6b312204e3fce0a6061770f294083988b5df9633ec034c9e734a9fe6ace25a5f9df09f2aa099222ffca3033a9e972eab906250f5ca43ded2cb85a868f75f5000000c40b628d5dcfd23e3dad47f64a87a243c7fc1f7731ce3d6057078a488f5554df298ad232770000009c3599a096ad019f2903d6634573293b7fb88ba4034506dddd538fdcefd30fad3514e7f21c1bd8c9ce411b37be709505d7546fabc0db27aca6a0cb4b3fda21ee3498919f0946e8205f20f2ad8ddf1602ca41da42db96e661cdfdfc458a4368571e07fa0d7be2936c0a977731c58e8b1ccd1ce459d15ff4340532633b7ee24eb7a8e35cf808c1e2a42eb30c427cba0cbbe2142955acf06115994319c80300000123000000311606efa9cfd20ed91cca9e235f580523d5f688f8c5bd7a77100753f30a527c25cf37abf3000000098fa3449e18495ff602000000ea0abff8101380cb7f2088ca38a028672ac02ecba172d4ea76a2a54938cf20e7cb181af093000000c2d8150b34763f7fdb00164344294543ae357ba387f0f3281e3c26ef1d2cae588b0ca69e619bff5e406abe9df4377ea421c62a13259fc49a098964bc128d6f29390c69dc1eb524df2b07cfc115cab26b494bee13a6c348b8bdca248420ef8e2bbb5b172d71f67c1b1dfa60dae4faf4536b437c036fafff99fcc260f718bfe407ddd2397a50d2bf41da4ad916f4aba4eeb8f4fa548fee97247a74be476ba95973a7ea7059a2bc1a7af577359eebac6fb04a0603bfbd04f17fc70b1e8eef821b2d355658000001a70000007b0958e3b34f839790d42385d30cc4e76350e55cfcc2b869cadd88f74a6720f5514af243ae00000053a0d934fe40922b10bc58006ab871ec42789b6b6ae4a3cbc80e3778b2c4870e69710058c8362a4182c1f01bc2b1bafa5716aa8a9ab0dd1dd3447393cebae338d486145cb3531ae4b2f54568f840c41c130e54800000012422e40a9405841ba87eb94ab888332a1c1fa95bea47d672b5171c255ef4ebf9d763afa19e000000fcb1ff0efda2f1bba8f64569b3c07303adc88a6592935bac39bdeb3be9b9eb3978ce13b15be0f2fbe157cb8ecb618c3b231f4f1961521d476c6384371222a8de40fc580d6cbc35d4043cdb842b7b8f74bc7864b849ed5e75d0d81217db8937837c3add7cf7720471ad30303ea7cf26c44f2cab9907bf3e0434917b5905bd17720f1a81a8b96a063221234d18aa0d9d9d700f0dfb5d229171a34cdf5a8bd4cc0b0e8537d5188be1b53e8839a4f09e249dff35f9f68514ef9fc3a25606d08f5f06162a356cea54847454734c82a102b5a96b261415cc06ae8f9cd40782f5db460c0632fee0294a9b68aa0b231bdb9bf641c11ffbb277001d6f0a1789aa6e0000009f0000005f23d5ab95807762ebce1fde33b83bded8251ee6f3ef81fe0176107d520add2ad50f045a8f000000374a65349448438a651831277798edccb13b33cbdebd0956a2c44376626ed825b87e78ea8098758296d6a5616de77cf25160162157c361a200000038207c2a9878a818da875db212624be3bc457853969e58ef8ccc5eed8fdfd856c2988d7dd300000010eef4ded52fa70de2c8d475312dcb48c900000103000000ad2663696aa826277ff4591cb8eebfc3f4294d3bfe682cc0e3f67eb3711e7ca7738e7bc793000000850a889f968e38232b5e26d158aae10328231d03a3cac72ca51a9d2f68d46b6243e6e29a4588e5a644db4be38988b245f14f1d0ea4ceb91272f5d7c6acb2a4b39ed6d18b704a55addb2f00f1c4c6bee12f4fae4282847add62b1ae229f613098a8ca155e74322d1629e28f39b58485aacc331f7b9a8e6355f95f8c74c9c0686fabdc00cbb8280000004e0732d1e5a52368eb98a0cf4b7e6ea0a405272d3326301509b94a706c9d4cd341329a1f0500000026dee3ef2608c07830c5be2fcc972bdf5407d70201f7926ffa9322d16153c645c39f4166e5e99000000123000000360bb42afdbc6eb6e73f1d19ed5ef0d509efbfcd13edfbe1d99a0c430a439a99095ec8a2ba0000000ed9e77826e9971e62ab45bee72a01000000e50f6eb42c6eb91935993e3ee929ef6e3e6a6e412b0e99fe237f689e53981293e65848ff50000000bd6212a6de88e2a6c109833e9c377915acbda2338876f8c3bbf74a845797587d8ad5d7975c9311b590deb07be644047f0ee92866b195ff58fcde99255417d9b3257806eddc4752a60761c1054c34b5732f3f3e7c51a545cea98d06e6952173a60238714a138154e3b1264b12a9a34ed31ecfd6757d9c3eac373d4af975e7474baaa76de3bdf0aac9b119e29527ce5fa499719b6cd7590cc6047efdf4293390fb73af2ae91068fdbbf42c75665cff5735983c86f1144ea38d23dbcb4f42bc00000113000000a800c7d142f82bbfa67f1a6491909ff7232e6a64b3d40d117482a37dc29629055f59752e3300000080ba4ba559520b295908c8fb35c27a871b5f5a6b197b55f3dc60c896019297c1e9d8f641e6654b4d3026f0b2b232d7dd4253c3d2168bf372744d195b8e62029a5db788b9d811fac55ddf2e244853d90e21b979ab46b9aa89c408f796d67792453353e5e2dde554220a2d728f24b55ce796883529ff119796e59d3b4bb6fa13dacf00000063260e879899ff5b18f539c8c37d10e815c7fe8cba209e846c8763af3b93717c2d3d247c280000003bc7345ad89e0cf0e6c48cc65f16ffe90965a1fc55216b03d0855dcc33683388cde4367f0cdb2d0187411dc121c65e47aa6861608c8bdd2b3e02e2c100380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b002d138300338fff5b1653e32c746ea38073699f4ef36b2a21d544285079e89de39db6178a794f5845798821ad7f8f14dd60dd8cb9614160e9405a64d4dfeec5cea589d74d3c9c9317399fa1fae51ec10361e5f543fd00f08e2ae3f9402dae18ef8284aa8c5701af8d4de603b1d99f11b218730859b17a392b5e1d7e369234026b760af3967cea8ccd9a91c86f2126605003ce399337dbb636cc26f2bf7c03bd041476ab3b8967c77a72062da0a6e60a3000000b024f0b88c631a7e3df2ce8cf5f0c2e7a0d8b17c9e3e9f9af854e2c2b631ff8a43b33fbec6d3736d3ca80fd714cbd7f7b6ec31fc7656a18a4075f0c14b906b4989234ebcd779ceda1f565713a9638fb2d58c5025384fe7afcf25a0a582ef98f34b4f83c3929a6cccd67a2a039d6aaff8e71dbda080c43590f7bc2b714ce2bda41190201ab88b57a008dba39bcb6bf822a20ed738cb8cd9daa9bd682e13ea2509871736e790a8e151c9f6ae7f95d8be60f5000000b000386259a10d7a31659529e4be89565f21880c6d3ba12d7244c10417fb5e96e9a362d14ec37e81299d7e3ba40dc6f7af50c76243c8a6fdd2982b943ba5d7028ce7ec344af7594d31b48844cd83837144565750a3ea49d72cf56a30ba5e2d99bd6989b80a571b5edf243535c1181cd90c1d4aa93a5cddf369e6ae2f64fec586cf2105b2a268a93fe97c2c7e9e771c32c42f87391eca587989303592a89fc680edf7977b77bd0dd714ca588b6c0a544bfe0000021c000000b01234b682808dd749488ca128a9e76a02a8400856f51ddd96acbe4d8e0b3c794fa2cea7b6f1db493eded35742434709d9a520218e5373491ed76b45d3a717260256bb5b50c9ef75a24a3cde435609f2390cdb42c1d5abe896e5325e911fe7a5eb738841aeade8ec5f890c62c1f195b1db0a724b659935175e15ba2628dc73479b6381f8a5e00d4b08e5dcf92097564dfb24a6d53ba73c39194ed975268a26e4c1b7b7fbd7facb7a0c57ea5f6a7170fc93000000b0146ea07b5dcfeeb9d06d7fd14d26de1af602bef14033c1fffe24ab22326acfe59a03b99f82d2794779594162b1874fc7dd839c6be40c7b20e076f15184f49adcb343fb0aed4c49e05299ed9de33f60853d4abf346429c4414cb6e4a0351a5f049daf8f60645e304a1e29260b5b96e72326f06940f5577aa2a2cb89ec88228cc4621953a2ca8ba4b0ef096a9e814bdc8a01c01762ee8cc425d3f8dfbe799fc3da781bd578025356ddb74ec5d6fa77ea97000000b00996217a379524f28a6765d437185e898801a0cf8113fbd093c920b783c7e4f231ec155ad7254a8646868749f5cd89e5ea80b676668f870110f04b26fd0d6447df541c566e441d347d681bd6fe86b987012083fab5455a8d3085135488285906bd85322d34c50b1401e97d20fbc40cb1262c95bb37e84055e5b7211cf5b384ec5ca9bd67f36b96cba45c3110a89b01ac0612197fefb167923856b3f335e8bfc5dd05efbd7536d80a1649882e1f17db5c0000021c000000b005102fdb9f5901e8533c03d9584de61486060ab0fc485fb4574159c8f190474e72ee4cbac06f9970901957326ef1d7470e19dd696c402a3a0b57f80839fbb28509b44fece2f8a40aedb0d06998d6fdce266f2b9c12bc842a6bb8aa7aba0514f90f1e9389bed6e157b7517afc8a0ed7461a93179d5b9ca381e91cc7f1455d2d52d26524b0c2789e83010e92ba7711b6c606705bf746ddd988d1c5ae2541993de61c07d46c91e9e427220509e8396b35e5000000b027e413fb264edb09d066a05e3cbc3543c6197a9fbc8ca0c322dd81a5dd16b1800ea842326d6ee9df71111f880bbdf96dc6e90c7a3b889f21926f3879a28063129fe264b0d442664883c3f85ffc26da1a1623996d985b5350c7dae81f09faab39eb347547305a3fa724f41880b8c1fded04ef041be8d2913543dcf303c2cf1753cfa12f470b91a09baf2658262c2440b8285b26c4f97280a9b5477706fdef3fe0237dd83b3e5bdd926cee40ee9dea1705000000b01d9dfb90f09a1b71185761de45cc865cb54c2b6aac6ae76183edd2c35031738d05be9f773bddc6b7339f2739a16c707ab48e23f028c6f324d7e93d9291f671aad09f27680a9bec589d0605f5e10c4bb8b43a7e435d215a49cc1098e1dae496e9526cb585dafbe19ba7c066da5be254ec2c1b780b2fe6b7c30a3bf0eaacb20402d37ef413f32c5aee48d71429b64da1502cc15bf075781178084724f59bb8dea6cc6d6c01626a0a8f383fdfaec67f6a3f0000021c000000b02aa0f1e2fd4f68edf4b95fa0d068d06fdca5f70fa42520b7085ad3ba58876cc5e0944849fb175d764f6fff08005ebdd9dfb2ee60a88c9e89de20d5472bd4e8cf000d1719ca5ad0e4645eb19f5e2e4bc3b2b62c417c5d2f2f1dcc28dc3b1f351305888b57e69d8cb4c4a83214136a7a180f91b5938a9b0e13ceb8e4ee2349ec8b907a9b83091140e835ebbd10bb7a0a171e4b73bfa6a3eb5b5efeb096bc4c0383f2dc3130fb9498e99c79f77f7359b64c000000b003cc88f0da61273dbd7242f21dbfdb54690b8b7c659dd3d8079e804bc2f43e25d2cc928917bc8f94d27206c002678424ac1b84181e81b02776ea2f859d087ae049aeddae848311781df981a4a3433b11983788dc2f1aa585386741939e8e8042c8e1dcda7e5cf459a87ab4831e5148ef2af66f23029b2d69779eb0ad35ff914ed1cfe3a861e198d1eee547eac6e99daa2046573c681a1fa29b3a3f41ccbc102c5861b507bbd2caa203d4929849128df2000000b01c68d36e5cf3f902614fb0b121ecb10082e8f1dc3f1276f8ee0c9893a41ae203e54c9e346c62943e371e975d6df1502c811c812a96b395738526a391f2e313b8c8d56ef6b66ad663ccad684ece91c2f35339a8bab06dfecb430cbfdfd298382d5a1c61c9d7f06a6ec753783a304f72ae0bb462bbb93764d5f203e7d93e8f33803651164dfe3692f69faf03976e2c9ac103ae845f41a49079465c79c48bbb86fa4a34e8a3541933c22f6edeb2814d31770000021c000000b00e6fced82f8ee7992c83ad30f647aca340a48b9d451a5582f2097eda8adc8449d548a635a81ed3161c39a947bdd1a8cfe87309457be5378e4eea667f7ccad139820b4dd04f9b4aad9c504f7616c3da49c41d2cd93153a416f8d991cd9242566f4fcc190d363a812ce0a9a0dc033f22fc1650c90786bb579795957ef69a1d7887b5c04a0fcd5a2e9f2c7003f94656d5dc13ad9891206f48a941fba5aad1c37aed6686f4b711dc86708cc351a836a54a77000000b000f888ee79ce01d4fda2e83d1b3af3262cd146e5cd7daffd8e0e1eb172d5333ed54d3905659efe44f113ebce9813e3fd390aaa1714eda14d6ee9f84fe2090d71e8bfe4d7ba04169013613dd473aa895a51db6be8bfea959e367b21192c307f18557f02030d33a398a7ddd983aa98ebd62ac0e9ac9ddf5d8b738f958ecaadee1ae28fa8928b809d98b972e1c2e8235aa10e9574153a328e59b8e9a89d4161d47da551d83447573d2b9a2ce1164744c651000000b00f093c45aa424186d3c06f5b9588c1d916e4650bfd71e67a557630c0d64e6202300d8966b6a7a121c69876c09a32746277fc7345b627352446de8d6bad366e45829aa749fbfcae203fdf3772658a04679123d3886d2e61a87fac646a8053c59b2ec75d115e7dd32093ee47e467a1fdf5066fe007a5c9b03484c53958c0fa87ed4a174ef1ce0990cd368a6c6b9a72b771073bc5092c8be169452e9fe454e7ee7b3be310dd6f83926299ead0fac4dbb1400000021c000000b02b10e168ef98c93fea1c8a5bdd82100c08bc7de4ecaabadf0f3da6e8cc6a8f643573544fdd3ad9cece0707e1a364453ef6ef0fa5da539b47927bd4652c03b03fa750cf9ab7d10fdfbfabbe5fe9745288dee4620290b0248401ab7b383f6e218e650e5431d7a66ca601ff57ce7e5cc35f0da5eeba849497ea3a2ff814629b65661498c05b3233f2290368bf3f6d988b9a0cf4707a83d21f57c2187b2c7aaeefd775430c2ccf680e55f963401877ac4922000000b01fd699509ef4c41d19765e5d0215df1de62745265a1d9e1ff49ee4c1ae8afc43da19530020e159aa277212b66f6e79541c853d74586df22b80f8d1d08fed8bdc2cedd081786926686a620dcf249f09cc81bf3965a0def2e7833c475ba23a1edce325c15a6e1ae85689e93c50510a18f31927c5528ce6e0d4f1f56c6274869caef378c0c75615841200a0e6f54a7deccc0211c02b197178e7bb50d19f19c41c9b0c473d46be326505923003978ad334a0000000b01b0ab0a7187b2fa3c616ce04cfcd9034aeebcb71a9c664baf679166240952bf3068ce1e523d48ebb34219b2d3e6c1bf49992fb027809570f883ed562ddab5a7524b118db714510f7c94a1ba361b1b35bae5e9c75195d883185da3339fd133390b4a2ce917d0bfec800be68396f904b4c25f8f21f39ac043bbcd9913626879d46f9ec4a2ae0a6d9c1beef149005a7a1782c2dbe04b713e1160cc59606f7a2fb44b84b57851b59b4e973f2501c1e65d0900000021c000000b00fb61a07c968a73ab9dd7bca90e7b1504d4edd28aaca0658c4268718ca3c26a2ffb9c70a49c7b6844d47dce80246cfa480851a4c07dfcfe42062cbc46493dab5fa06aa85afaf8e5d4b90ce2b9b4dcb05dd80b2c207befb067fa9c31241897d1bc52aba64034200e5a0b5b5b09e07670b2a4660dbcc40d954ccbe16703f868dc5bbf80905e4804b015db9048aa9c4890012c5a39e2439b5ed3f518517193ba3f97f5698e4fb4fb988eb19ae122f9b2493000000b02351f4a26cf29d1c8dd03c70d98279f1cb0da27bdf17069307ca797ea057313afdabe2af76ad7c3c22fcc3ff932e63be29ca771836517c2e9a27e9a4841df11165f0535294f35bc5e8ae1b90236c4ad5c676306e31ab751043d3d6cb4c646c9739a7c142e8197a840dc77e42f9eea2230eea1bc00343bf9d4475f8bb68a6e9c1ae99a935d97e6c9db24a6692d909be1a11981a0d252f5c6f4d4a1e663a12811a5b3ab613ba6b3a7cffcfb1a2f6aed03d000000b01af70b0cd480b355656fb77756020148b6f7d55b8b19b842253467ecefa98ccd8699c69916688002a7990f3c4e473563c6ac9cc8bb61cdc6fdef7b8a93d56b31d4da866aa8b377ac3ce483620c1d458784a1d9622f4bdcc4c690596f0cc866d66c63ebc4c52bca9c553628cfa0f9d2df2d01bc243405773fe443c716376a9ce2959fb4603c55c2739a751f5d3efe5ec6215092edcd13b4009f7c5af7a1d3e03f1a68f0454bc396f28b38d6d84cf29de40000021c000000b02b163d735ec236543998d9474caa706fe1b0042b46e4cc5353399d40d4d30f07fb66297a71b9cf1b3baa1b90bb8721e03c2db26f608754cee24769c864ee02246285ea896639546396d4a745ddbf1de7a7e376f9e3e7298eff823c51b5184ff11584219ead441328088c2a0ec618b4232871565ee6b842979b45aeea7b1509e68e685c7d20a79b9abed89d1cbe26dfaa1ea038c2fa2905f5046fe7a209d50dd4173b5a7b5db9cb8ad437bf38541d89c8000000b01d0c0ffcd5b00be3ecb12fb048d4f883ceb8c50616583503a2e337a63100f11f73682eacd16716ffa106bb86d5e213b2918f7a419798c9b24f0f9f781ae6772d36d53711446985f77a27dab840515ec0b6212169b68b00b72d849d821b1d7ac11e606f28800a443954298ce750408c2024bb9c3bd1273a3ff0a77f636b551a0969476fead710d56bed356f59e3d4df4909f05dbbb28a995ce35276dc9f5afc5cc2d8e37998fe87eb3e91f7190721c22b000000b02afa426bd8e9101af41eed38bae0a85229be42ee8df899e7f3cbc07fd92d5bf94dde99f6dea56e5dc8a1826f120e16e44badcee18194ff0a7d4c74e51c1e075d5d8a94bff1820d00f6a645a2f0251f24bbbe764379451cabd25df7ad9a220c1de42718fa47b7af5ea4ff34027055cd070f263f74b5e9bd5e1fa07bd3d6cb00b24292b350e8f7692ab8bc70b7d9eeebf805b3d5892e1a11cb3b75295a447346ee97cbc4d8ea18d01a0bf4bc7d4b88a90600000e91000001d3000000b013a42923f5b03d3ede2b2fd2510bcba6ac256d21a7334d63a5ae9d9ec85367f28f8ecf0b00000088befec593f5a3c9e715bb9651cab46fd76a7b4c510a2a1e7041e7f3207b48a6efc38e753688b29348b9741bc34dc3a2c3b843cb4c9aaa9791151990f097bb4bfcfe8b25081259f94040fd1f334f8a4dcb772cf6ffd183d1b73fa3654c485774164b40e633ce88a53ebeeb24520bff790ff22295ac8f7b04911139c0c300f2d9082a553397129c04050000011b25e64a494ff9f9b3c735160565feb34c2b1e0516a05cfb07d290fa5afebd12388ed19d42000000f3dad49af3d60c5df20186090c582de8b40bcbd8836638accd1f0bdd42075dfe00931d6da54b2024f8a95f534c27bd8387daa2331bce2309b9070a0867fedce763957bb20a0e312bbc2991ee7645041e30b9e9b20778b5bf4c1afff4882d214f146b8e56f41acb18125ede8e1245ee32ca2724fd48714e5d487f1fa68da328f7504872e3dcd504ae15abb027d6da31d266a75e4c3fc22567b0f39edeb04bf9fcd02803e190b694f35bb3769e97e76e964eea85fff90da99d511c755a1d61cedc2f6e2bf170b4a652f87619daad6f6fe4cecfbc36d4fac222a3fa0fcaa7ab63951cf67afb9db8f659bb6f16a60a118c6d72d211300000009c0000003a1f6195a09471343198b23d748383316da63e00d27e4effcc00e9a83fd1f2ca461b880d9e00000012a447a201a852f05be7211028cd24f3483df70000005a230d26c308ea38272218752855b0f15b165c1cc43c9564060c099466a21345ee9268d7e000000032467f0a48843735afc54e569cd2aea9172905fd0b2aedb9e6ee3445799a0bec5452db346211afbb742de696e7e79ac2f5aeba000001c6000000c816fbdc3297a99ae6b1db1a03ee51af8d8cb20d675f190485e7b310174a149521ba851dfd000000a09c7e6183ba63e024e6d14f83efb6b26dcee834b83d21f21074d6c9d495417d3788cf9bea259f3f0c3067cc7708bc68abe58435b32d2e72ba67b107bc389c65105b604282cdeeb720a632fd30e2c6cf78d2b1664d84288aab4580054b7d2e3ad11ff082b67701e8d458b66da10006f5c9b7b7e258b36ee2fefafcb5b1caea706b2b24e7266b779a2ee8d475874d742220c4089bea742a0601fb9d9ea541a5136e000000f622e7942f7513801020f84585c9d76b890f01b72f9d51821731d01b024eb39714ca54d2b9000000cef2a4a7fd5f5e062cc5407c27a3937ba2f534681ff399b8f6246de9d6163e3f9481ddddb09035ac4e9f3ba5a820ba3b9e3afdb130b7a49da329c1101e5536e6bfe9d89cac52f6e96737d38262ea5b61a263d582b3852914e64ca731a3656a98941843ddc0487ec723ada9c87b9582e34eab9851349b95f011784ddc61f1ddae0252f8642f7eb44c8a82f0caef56a7d54bfa3221cc9518d67550a844da240cf2686f3bd159b83c0d5a8ff46501b86f103dca7a81d71c75970e6dfd12fb800ca1f2868eb13d63718d4d53491fdef15d000001830000012417fb3c79a590567e0f0d634f1927282ab7fa052bdb699e4f1e2470a5cbba70621d681d44000000fcf3f6088d01382f03e100756b18f23902cf3df58f43009558bb42fcedd429d0d3706680f9a08278385efd5c9a9781ee22423deeee5c6a3fc83cacd3f7961205855e3a0b6bd1307519f20ce7996af086acf1046fec667bdee3a2102cf90bed3d1cd066f3df1b75b26ca6c5b96a346eab80099860535826aee5b0a2363473658fd478dd17ebf143063102480089e6dffe059990d822d6c12ac858b58dcd1e1bb0d8c47f93c1313bf99129263246cb6794aec95afdec7f95e10b1009c52cf71ad12be436c584df1d0823f6c9f4942b0ea69e6bc120eacf9a256cf6bc72ccbc58a5b00976ca2d544b3789c2ee97f50990d5ebdf600b13045017b112cb969b000000571d7258a70c3b346e4d801b03d5cbedf75a02cc73c183c765363f9173440bfd1b3d6debcc0000002f9d59915a834468f453abcec3fa7434c6f558619920542e65a56ecf584c433b967b7a2041207af80f63e6ef977aea77000000f900000082245d10104259594383fab7c3af8bc14b0a7237712579d6a1c0ae634aefe63185889041930000005abc1a0ae2555535fc871343ccb992c97227de4647adef85aa61ec1d4dad0c8bc794bf9ff66c7eddd829ad1bd14859bacc90e4a70f16dff95fe0ab4b4d333834633e040405d0d17836a80034bde42717944cccd32244b10fa44f1b0000006f1cddb454ccdeb8b43e9e34020a20bdb4b45b68a9ce0b2550f66332ff2c581e837da6b1b500000047cc8488d3c323dd0086b9fa0dadb7218989dd430c68ea47c145bc0a79f2bdbac8fd6ffb9494b3ddf1a11bfc73940c93cc3e60ad702758097308228e3799375d5ef9f650d31a74f1000001160000005a2f29cdcfac0380774e7e187a8f94977c3e325f42a03acf7f3967395a2afd8ff6233ad431000000323c8836a04313f74cb629b3d54c73f5da57ab4922facd0692d734c21b5e6a481c2fa192c45f92cf594eecbc2771f9cd4be510000000b420f21243ca51873a32d0e0226aeb03fc4ce2d170ae81ff95ea4c66f617e897fcd3017ca70000008ce87cef36a8c6711aabb16c17ef90e176c9eae684f4b8541c1ce12c345ab5b11c986f9a1c535da67f5c5d44dd51ce14d788958ae75fc9c10b0c07e71c6554196aea7bd7e9ca7a28e39febfd90aa967dae8f58ba7fef8722f2363800271a6188718180b88403857c67c15561c298146c6a849fe1850ee63c74157a3605ac515d7bd65bad911236e0f4357a30ba000000e80000003c212f3623cc8cdc74dccfd3f6dfaa1ecc05c2e53648146ead3d744480c9dd040f00050ea2000000147569a0974428f2882959eebab9409ed0bb66438f000000a423a3685c0a3f63acff002700b41285495664c5a5b9cc4a52d48aaf79949fb022d0c3adde0000007cf0a6c74eb735a06ca74f406449b33ca072c30a7d9098ce4635453971559b470d50ebb7fd88d55bdd3657cb12392a2ad40b40836d31b6a048ce725b37d1943a68c58f2cdc385c6cb3f3c4d583763949082fd948e3e6f301a743cea76cc8f58583a57bb8d21ac679395101b6c64146ea06fed81744f8e5cc61720d878b000001440000007a1fe214dac2ca2d148fd63702c5a5934b234ead0fd67dc7d4a338e717131f86b0ff1d0a7000000052b8bd812dc1446ef298121153db53c3583473bb0696c84ae6b1ad6a9451e2ca20dd0e0efb8cc855c174786b9c6c8d97ba6de8c9952b76c150fa51ae55a627f29b61df4265181580681395924ef0e308cc0ecb000000c2155809b85c0a0123154af087ac094898f1a321db717523db34012822c91a666e2329e6ac0000009a1c944e7af5fb6560a5a551e1982456408806d99fe052b12bb177cffb17dd958b84891cde3577f2b570d8686b0684c9ec23609bd871c7c0bf24b17e739be1328a19d92334320f8244ec86444d10b5ab6bbc60db29ebdb67f620721962bd018fccba0f723d86853bd6f16a22eedae6f238c4686b232c629908dbaeac5bdd1f0fc0caf4037f98e0ff1d39a67a2abad0e33238067fe3ea16c79204200000015a000000d811b05ee9a1070ed352e02f5f5271a59377ef551be432409839c1ed17b9c64decff32c766000000b0450d2ba78ec6f2b72d426dc24a4fa91dbc52aceb9995ceed6d9d7c59d92238e7d9ca68405e206b740aa5c7d04a7ef13439c11ede22d16c2aa7af4df6245e969eb463e7fb6474a09067f3014647258ca5d6a95cb887e2fa6062b6791dbca74b63e3c40ff290f14b028be7449a25435b12fea5c6aa1351e406d32b9e417c9fac568e2868112190163e16900f8b38883a1b0b28b2c023d46dd8759e4a063d82954c9419fdad6f4649aa69b8422ef096d5b10000007a13018d350406e32d12023bde818416c1ba1d837e22df68e6cc4dda833b872521d7292b5c00000052b94f0c41b5ea84e799623440374f8a5d447ee6d2b7c3055fc32a5f75562ea4e9d1127581b551eae06c6accaa99cdf5d280217fad02d2cdec4842ee2e51790406d3cb82bbbca57781cd57259d8d87f78693e9000001600000006a142a679ab6e1bc1bfa39e11523e7c55498f1b20791ad60456253870357dd86c444531d74000000426ba9b970504f6df1ff25ff894542cd8a764b01d6174f849e2f0f44d8c020b0ed0d75fcf8f59a88bc3bbc9c63832a37eb2b44a2e6d19a28b811b81a6516792e58b341000000ee1ea2fd1d20c6664d10bc28cab6b2ccc9649733ab8e159fc26ed67ce6f1ebbaeec0ca086d000000c6a91b3b3708fea3f43a74aa4f330e2612af26ff587998ea92b55a6db0911c98c0aeede0f5808d5c8dd9fe4f1b40813a2c811b2d85d06e59962c3b852b387b95e73329e791e02ac6ff35cd89e0534053880e52b1fce1f4b9e43f2299278211b2d0996d953c2ee6ac388a874b095b9b7afbb34cf5ed29dfa0ddb3ecb94cfa879d159eaa538488a0a0eeb1a2109eb0473d0379d102d0163eced465899199116588d75203e375940e42705cba51b3a5d7ca039114f9e20aa85b1dcda0df8da5f3edc179b2a035d1e6000001b8000000e426237a4f60473d3ff7ccc6a6cb5f1d794ac968c30ea8ecb26419a0db2bc3cae2f1e2af24000000bcb062fdbdc63bec9e9328402d76e8e26b27bd0b885ee44af51e2090dc3ef36f360af1e7adacf7e964b6262bcf327bfcdcb7ddefcda009bc6093844002551a33a47fa21924d7f348cc5966bd3eabb900b1c216f61380a26a5f249731131a7d479a72b18eda2cfe10d2f4f4dca587608f473c218d20f344749046c96433b1a175af4b07a87d069ce4638eecb069cc13ad52c5083aacdeb2de1f40b75b1a207962c0a5080564a640b063ae2138f8a94f84300e694ff3ddfc30ea29da22eb000000cc123b0ec16fa2c2fe7534f44a7c1f1f6c5b78f7a98bdb1809e5369ef5a3830368359a5c30000000a4541fcfb226e5ef28532ea338155975a7e36fbe38795fdec2998fd58a215319fa4cc77dd97b5dfa9d84c18804c0ece9cee0e4069edc29df32678681d36cea25593ec8879f46330bc71467f4f8c017c1b013a40bf92255dd65d18a08ca91b656cd8336d335e91bbe2934cfb843616e6f029cd2311165ad2522395f127a09dbfdc88028de578af77d2df9134a3edc31c6c3cf9f1c985c810224b9b8d85b25ad76bd42316ca5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a2570e1e3701f4d2fe25ae5dc1c68c960df9114392e97487d3cd12dd9b5d317f8baa024fb9b9fa92b2291538a539d311e2585fb32278edcf24d900c7789269a09549a2b5ea3527c3edd26d632894512d8503c778dc6a490c288d0ced6d8efd6f44f1473c786a373f470906cf87673807d796af040f695add3afd32e9207859b9d49e803e4149e6c2948eae1b5a50972eebc13a7c0a687e5749a9cca918a1615e68915bdd5858fe89cd05b0d49b726b000000b018de35857e0f419d1a3ead4b465117ba3c890c59c1ed9191c9c3291003f56697bb1d96f953684f32e52e429ed7e1afcd7abf9aa818ae1c2d692fb202b859706f14b3dba6c60108ba78d0d70027faae12575e948cc8760e0a9049e60bf99205dfb4413f1dc90d93be810962074d1e61f52d11cf11a1b63c3c58a43900d0a71c2678211f4e69a764a981b21f804a77b2df02f13500e13c72045d0f43feccf6a159222b7837f9bdfb722340169601814205000000b00e198c9cff8f270d1d60932deca0e07926026cd0b04c0903487b295bf7809df255b48ca5650727265293d1e0765f692e64aa52d28a17cdc8ced83fbebb96cfb477869f99dfec107b25e75b3c95608ac843f28c8e075f43b49fdeebb80b1981cb2d1f631399987e6562a8817591314a8c085f6bedcf2f2896b6bb03ed9a97e58a85c7eb4a1c444ac455c8b391990fec08267c4ba97af12c7e966cc7f9b975a9bff138fcb75ff26f0e1059198b6af305f80000021c000000b0023951f9f22b58e56d3f93898fd27b2c841b8f1b057c2d79bb465ccb17aaf405ab960e09a74c49627cb5616fd3eb72799f318591515a8f89c96e2b217d48fab693cb7b2f398e424d04afb1218e73632039113a5b40947ebb6a099ef5af7fb8759150de1ca2c1e97af9ddb7c269a546e123ae06f4b4f7febcf17da94ccc54f56c596aa67df2482a744a3138450b33c0931bccf55b2590d689b7522c9ba0f166f4471e4d047966983861a54801f1137b6b000000b00efdf77bc3d3a494eaad31b66218f73698d242e16082f30bb8d18d5bc25bf2847991824de3fc4640a1c1b49a2b67b7308446dde2110bec701662e096780ee0bed90d5c798b573c3a98f120413f68b35d25041ff9e454aa137de31e67ea1f290e073ee8f6441478f89cf80cac66a310941db9f2c7d6a531cdbd2a772e0b7faba6de775aada1149c48c7d8c49dc0bfd3351b6646d3f3b2ca6d769c149fce2595cf2af9188cf4108141c096cd57badace19000000b026050c122d1e4ae2bc25b049dfc65038d7456aa4de1f37ee0f00834b503ecc959fbb0f84e8dcbe88355c055aec73719ed67b244f8bd91dd41c754ab3107e647c0a711d05b34d6376f66e8ea61a7036d44fa56c5a84c803d47c921ecfb126cf3e5bd79459bafa51ddc5eecfadd1b6a160284ec0f2badfd197059e33cd2779e5d8ea5e545c9bc9c70ac6f167b2cc12ba2519222b34dd5009ba90f9a62db3d28fe0a20b29a455e80f0803362ea93e374a010000021c000000b023f9b29b67de5928b813626dd3839543d23bfd90fc546c1b2b94c47cac98e7a91f670d0e3b0f38228e30d147c0f4f33a7d70a7814adf43df4b511dce47d7cbd6ad892ea9e34720a7aa1e972ad8809255fa8640fc1b3865397f44bd1d21165ea8e0e87b266693e4e5dacdf55a92b5c1451637cb08f6e763b742547902112dd3e1835c7e48981fd47c0a0c26fec1f08f9115877a0f42066212aeb9ea1734056dad89c73f4af1ee4eb4a19745f4b614ccd3000000b004466a6318698635afd6e60c19b8148091f34082022b366dc642707e0ad8df4a99ebf72b82f7dbdec1cc2382132ec761feda380d9ab3e3de2cc078ec966716b506fdbc981b6de8bcf73b67d5617cc282d7f8d51c9b85cfaeb715b72c42040292526d904ef1ac8ef654a75fb07524052e1202a30ba2f297885fc7612c75d474b3afbb82499d2f3b5de80eec8daa8ba3222f5751ba5a0e413089392aa0614c9e501aafc0a06473ecb5af8e13925be362f4000000b0064cd1c3b8e8b0d15e6265705ba11690f2480d89d298dbf93b6b2e045094c8c08305d48af50e34a4f6ec1a941fdd6ca1b666151965618a8776361f56bf7d08ca1d87b49a5da3edb8c80c6e4320e470a8e0a8815a7ab1784f44bee758363c02dc9e572a21ecd1b9ae8458ceb377007d711908105dbf2d659d83b1b6327447b81907ece0707484ee0ecead9927b00cc8330d9f03b283932c94c105a2db5d3a9445cfc55a9035c1e1a8ae8d0237f642c89c0000021c000000b0044c5b764cbba19ea45e17804cef8516b4a2d1dfb659782c5f734f9947334e7f25309cf99656aa2d36c787bec6e406df1b5be655ef6de066e5b23789eda4f9471b8443f0177bf42ba3743ce8db190a1c585ade1016cd0c8d59c028f9823cfbbff664ece3a6af269adb4343f566e93269044efc214928cb5e25c7135a12cbb541a3d824d857dced82d76c76ec1b7a63ce27ee659a45e94d8cef8700e31ca29631b85b77e7b3da94540c6d9adcdb52aa9d000000b01954e5333fa8e85b0ca6766884b963e085c131545839261f67444737bbed9cabe16bde89f434a283ddec0840a6329c9a951a816909faabd6828cad28e75aecd67c3d29c1b27f9e04b86acfaf1c2cfa49de62262ab0ce6ac7d2b721232328afc560563e690847ecf0ca18ec08c4949be41b96001bc5266e9cba85aaf3c5045e7b13f42a1c454f541e03ad944c1adb79aa242573f592a21533926e11a4b6fce488bf346a4fd8e24ffbc626a58bf86ac63c000000b02de8cad17ca0fb0865788ad8ae66c5d7a4c8310bedbf0a219c60194de9e6bf7eacdf8ac5e50a3e86bdb56d6e0a12a850c12ced7a19665fe2e18af942e2bb00e7af5e7e120a8b574c5cdd26fc7c223d598b9be0b451fe8ea74eda49b43037cd98a3705720bbebd6dd64deca163fdf3c852a16e001fc431e3bbc780a0e1d42f5889e21a9c76c6e232b3f397b04e7c995212ac37d68bb19ef173c50e018f1379b9e9eb23d4217026d5a19b554fa9c1171200000021c000000b0056a2f6ab7f1d6514711d671148c93560d6855c8200aa6cd353e9a0ebe8c4eb3e60751fd95c3a1bef9d436514ce044fbe30b38b46d74a0312b213a37594e09e729bb1b06a482549e216a8628a0c6248204e1f6a3ab2be8ec73bd8d62dbcea62083cbe118638383649cc0cd2d3e855a2a144a08b28fc26e3815d20056b8103a9cbd735f4a8a8976b4e3d7a7e224bd0f9610ec99b3e5be1866db64251fe4ae07531eddee641f1000dac9e91188a33587c6000000b012862a105817d5e8b9fd001b077963e9c3b95ac916b83c8a958929419157854ae5da4e4704e0a6e6ac6fe1aced358e45cce4fb5b772a2642d35f53625262ee01e89f11b2747bd70c0d100975500b7e7e3a26443f92c4b86c721bf34b291c5c1b326c678505b79961de4f7ec18c6b85e304b55556ad9def7631c9f07208167768daed15a13ae6b104c0a2faea79cdeb530c758413a58913b9aae60143d15c41063b7715abf23a665a8a56f37fb2eedc3f000000b00eeaecc6d1af12987072bfe3e8e52ae0e2d267c0bcbc6b762040fa89b6478f5dd75ec9667456b67b0bf556553902bdbfbca5c1907b110749ff75e583e1f00d982c4ccf1c70425a9ee17ed6bb20d0d1cd54cd07de20afb93c4d51e25a97245207a45faf08dcba75b355be397ae585b434149b48647c01674ca4abbd38cea11a713294c0a1c5d4644aa4cdba9f4bbdfaac15a631b3eaee9d167f9942103f25995c5ef6b11f6736a45feb622c609ba63f9e0000021c000000b00374e0b29c5a094f20e996209ea9456f39b12ff8b33cad3e0852cdbba022fb322b9a2d11040317d6c023cb916a8b188f05830bcd96e91a2dc73cee40c59bb623e3e4e3fa8f7977b2c871a9d405dd971ba88165efbd303e6c364809c47fffd36b4e40086cc8e76f71b0b9d7adaf202d32278e56a4168d02c0f37a3c7fc162a2eb8d79bdedb13e14d354e867a4410c0f8428055c43968838e88b32ad473804a957670386c4f2f4035fbe543e769e076b69000000b0244f157d4dc1329ba218137ef130db59947934df118889b43a9d362af8df127b192cf334e284ea140d5b907ed06c79753e8c7bc03d856426fce45d412356b848a7f4e20cd1aaf7ba88f031e160d15df2febd3c237687e5b7b7815433054b2ebdf1ae3e5aa4e38ab5f0285423db43e02e17ed23af36c855f2762d57af35401c01c938418123f33c4a2c0ef44bcf3fa6572fb904c068064d525f1d24c1af7827e4ff3d06c511226e73c5bc4388201b6fde000000b00ec8308a45f792d709ee120656a561358391808271b959d2b4557c33f1540c02efb75d4710c393951e6b0979cde73eebf386973462317a9a62c299190001905208e622e246bc8b6ba4e49d3bcc3e138e75e49219da64eb1bbf40f83740f24e948190ec71d4ea08e3a37b21696a1f3e032bada960e85295b9495c6d69b6ad9af4ec5e91c66043c89a6e0f444f16c1aa760a40ef9172cd15ea91c4cd3fd9acdc21e757fd798d1ef7e3d27d74080ee671220000021c000000b0230b530550f1d85b92ceb8f9700b038bab1290c6741d947415e8ec4e72dfcaf311e8fa6e3a1dc862a1e3eba0ce9365787ad9b807aef4a47070515483905534e427f49d9606c4454765380d444e56b09fea20d73d94de65619243bcd8a1e728b85544206585175aeb6576f4c7841e7ba609faf94e848061d66b0d3cbcce1fb8c27c36181f058d679ffb126f7032688613070c0faf9d38ade608833ce9d3908118dda6ff4e86e481d2c82129401c394687000000b023f5f0f768dcde7362da46307c7448d004cc5b0124c89fc627d06c8a069d03d3c78ec4159e407cac7e3be5802fa9b89f364b34ae0f6462b6ce2208183e74bc87d7a231288b052cd7c6211472b2d33fc85bca30e2c93f04a6f32d8f557d1f2e08a5b0a59c0909a441f04f5406a8ec8f96239530ca1f8d3c1884d42e2c7db77749b6d4497ac442a6175b81add20931facb29ef3c395053f8e39d260889b9ca57ae3eb41625351e73d06913a073394f9057000000b022b0b5076b20b24e11836a76a522d572ff638153b8422200e80797b8b73f365ac9d322f4a1e4fc7a08686acba10db6263c1c740547619a058ed93319c7f4db22f1863163868b82fdbc7f16f004e5348969507f9aebf68517dc1ceb63913b8f5408241440a3b686bae9abc909d09af19f1f6eeef10a73228f2437017979ec656248a7f31bbb54ef4a6e1874b9fc2ff7b003b643cf1d78e137baa5b826f9945b3ae9b7b181ad5b15ccb78541ebc245204f0000021c000000b0058df20aa9e2d419be4c85e2ff12f0ad9504f6d184b068b4a958ef6e1a106f7db13beb3d3fff4800fd5124d7e7914a3caf644f97b85b2aa41ef24cbc80456ac8e40f4fe582cbe47c0aefc80dfe08ca72841f92b2b140bb30a8fcb91a97c5528e793bd8f9a54918d17851cc29142cc70829ea267731f1f49378750d6b27419b75112fc81008cb9f2147803f059c449efd14b4f168cc483f5dc459e56ec8118bf13a7b05acdac8d1634038488577a0f702000000b02409b121810cef898432ac406937a7bc31d5d66cb134ed00e5e27bf2848702b8eeacb29474b730fa54db88ee7f3ae2276148e70693cb1a026c74f0387b8956351a70118bde8ca189516cf15eb2cc337f46991f134404687672f95c449a345fbea43f947d6c5d18e4694f8104caf7b1ae1098d518de03f9471e5c1e6b47e77435dcd541b4d3fa0b8e6bc617bbe46166a8130df798d6620fd55fe36bc138f276271d3a811751de32895cfa9cfd2219ca05000000b0185256a98a495fa1fe843337693442ea036927e8f61b33397ac732722b91b959cd1cfac9e5991972f907eed2005d693b9ffc0d78662c58ef2bd32aff1407a7a87503e69457754da59b91d3f98ff8699c25f585647e19b98397ba2f0bb08824d9657d6fc4b11d64fc82ca38943538fd712361d1b32af9628073572d37a6e7620b89de9bb26c1f3fdf805f312b03f6815d111a3ce84520cfe46b799ce9002b60ae51967e218f21f87ff57e170a5bb6bb700000103b000001cd0000010c17d9a481b492021682f9d98909e7826a8cc90130fe1dec54735faaa2e0edb5a12524890c000000e42c81f2011c27513d18041c5864011a88216a3f23f529aea49d93ff8b90614218e8eecc655dcb7de83a4dcb465805ee1f6c306a6435030087c1ed1a3f199678b0d2eabe48b9dab926046611d35be886a9b1a0fbe87c0b1088bcc4cef405c0c5b286d204d79200fe0a5ecad48ceccbc8a8d4f61fdadf826fe5ed11710294df686902811d6e9b26fab9d053595332793d950428923a2bf61ed6ba3c4519c47d5a5b42c4d7fef26c6c34fab0264a8dd21748319e47b207f02f2d2430723e32a16cf656e920929d71264f6a4ca594df091308cad375c62e188cd741bb2c83592f2ccffb40ffac000000b901716a4aa86886a1dac02f2f9ff903ef7191caa8c4d7018438ce0dc349f0e47893b7b38b00000091ac11630d5228ec825a616c0f869436d1935019421d104d8758fca35c2272d14cd77912733858c15eb73c93742f57eec908aa9242b9970856724e80edc22edd8d0466a746fe3c95a5b1f5b1076e8266a6e1dc42400c7603644d3d1b6d9ab1fd94744a5722da693b310687c24eea31c7e744f10be6ba56de2c21625c145d9dbc1d5558c022a6a8bfc093b69d389d3b660d74000001820000007d1e45d2f6a0adb570c46c5412de00213e2f81732f7e99b130d0f6bff4be1b479959054885000000550ff1549bcb6d4e77fcb6c743104c3b958a7518c0c436b0d9b4a2e8c79fe41168f945d5c3a6769775e537015e385f7771dbf43a6fcc6432ceb0b0a62cd30d82af8e1bdbd4224e69bc463870aea40b2dbb5bb483f251000000fd285f862161e85895d382d356c34840373495af46021f4afa250257b88eb649374353487a000000d5ba9ea72123a6c4817924c4e5f9a237892830508bd858d12f4584fc89fda717b82202eb18b619732adee8869026381f86ad752e6f64608c4372c754c9c05faa0811b90f453bf07cf05733d51ea5d530cd8ceff191d40ac290d1c6d88dfebd7bf43b034d453653528b84e827158985341090efa3d549882bc5040f225a9006a20e5716f70436f3d806bd3628b49a48b819d2884cd087dd9a5249be12033425270542aa445eed80d0c741640bd180865629beb4b25ebabf868f0f0ac95bd1456fbe178bc9a33b29db5622bc8f2f7faa666a112a9dcb3a00000146000000ff265a06d88459cdc9958206d0ab2fac4e7a46e0af7f05cab2743c6f12cec2b580856362c6000000d7f592eb6485998575fc3aa1d6e56abca597c09a0188a3425f75dfc24981bdf00e656e704d9f4acaf7792221606f72f721feec2eb29548e3603a99cfbb2bb8fc8b185139ef795c30994d0a299d094e4866a51b8dbf8eb6a26047c6d8ecda06c1e6acf4ff3cd76efc882ff17789919a19c8835e5d1161590b605260a361ac12c3c61fe4802dcfbbcbcdcf0856311c83c240bc2ce9aaf804e3003eba09232c762f7be153efc525f1b2249980bf2cf8fe5ed9cf6a663c2d1e69b174ef6a2b45fae12c1c60f29e6761cb69fb306653da78e4d045ffe0b18555800000003f0ebf8fe2ecc2fa1d8144e0c348121a3a63d2e776df0af769751782b964b8018e28f6fdfa00000017a439a84e099126beefb4ba799d8c47499fe450c014673b000001b3000000c12fbc5b2eb2286a6b8506f90fce96fb3f7aeba3897af7139b8e84ff2b41aeb8c686cf0362000000996911ce698afeb9b3590b863ffdf823e811c2920ecd69a5245c004f205b709fe98f42a7405bd38df252e7fbcb49dfe2db0b9d834ae5bd9aa53fade1149befc0f3e5d7975c4d33a46792b9e374212e76483cf0bcc093261ea9b802f5c5e041bf3028092ae8840a358d294e4126394639e3606b281187cbb745076354f2e579e37d725ea689273a7aac9f4507a2d6efe0f153aee1a683056c9f68000000ea16257c20c169a88630029cdb5e28301882ff5528c248117f82a160b09ce5ff96e0190713000000c2098e8180df0485ba0fa98a37704c3b2171b3e5a2b496f48f6fe117139694c21efacaa11223e3377c6349071ac1aa58dd438bbbbf123b790155e75cb925350a27604d2f1a67c18d05c18e154ff9cb2b528ca86c6b04a0be51b02099fd0ac04beabcfbf6ffe2d59d85cb02dbf1ca57837eb3b508dc8e49766bd93996d6a2c72b167e8d70ed0830fb86a9d9e33a1ae9fc19b7ebb3a2f584ab46db37bf44e00c70ca03f09e8b72e88bf239d31272872e33526c766886343dd53d302fd68f86566d89b01b00000190000000840279d64a70b0e4dd91fd0b11528966d388e11cccedbb302183f84ced6f9d3ae2bd5789d00000005c47c5d899c395459973645e2a74c0c05877719d0c8eb2cce957e1fc9d4bed8ecc8b86c98940133054f12d4b2b9a0d0eda463a1348d41511d40154becf315a6c87f737be505706be1636b493248f497cf9e1bffa902d5543573a9b4a350000010405e5b6e78a325ab2f2ac6261fcafe4bc47a73657384a117f377874853bb17da369147909000000dc672b2dab1c90c55911d058c819d65782724688d66307e099939073b53035481c08923754dd708c58090a41ca4c8635184f42263514f2edc33514f6cf5aca8d867fda0527d4b04762f38439cd23d084526eea66de5bf211e1830516b0461ad5e13304e5a17f5d2ade69fe1cf0a8972580621116c45bb56b50ee08aab66f8c0dbd84972c5ab39eeb0bbe3a4f54570ceff80f6d408d9acc0309f9e72f1476a45fb037b9475028cd7d0ec0c4b175f7b98ec7d56b32da11659696cab790329456d8ab27b9aec5ae031ce55700b174e8ed8bb9825c6a258d3d5ad3dcc597340000016e0000008f2f9b5a95e4aa90dab337a7041e29315a20745401612a4951309d1c5b35b76d17663ffd680000006746fce5b0c7f25e5b2969e2f373a45213a78bd63faf3cfb2ca8e2ac5a8b2b08a1ce2405d55919064e3a461fcd56bc01397c48c2fb81569a5336937fefb86e6aa09bfac91cad125594c353451b0219636c01b537714e1b5063696140bffdf5ad6e9786571c1b528c000000d7297ca6a760ce883db88931cba904becc703df116609368fc108573b5c50e4084384ee123000000afed263a4ec6335c5e8b6485ae57618e596fb1e4ff8c7f7c0b81de68c38912aa977a28a8608f71ad9a295c988076b68a8b9fc4888776df2dc88f5798f6cb944a1d5a9221fecedd873dde22a8f23fefbc2b6dd506a973bb3dc55e606d0260ffe40af5a61ec35dd5a9ab6490bdcad5b7680d82cc17a72599ff8d125a507ffcf302d2f44cdb8050e101a45af025c9564c6d55ad11461325f988d7f83e79faf7ea7031d0252c7181ccd15f6ba1665c4034b20000013e000000c4233585eb29fc8ecc2bf2954e2df639c320dea2a3e8e4abe7fbdb5cc7690eb21bc645343d0000009c906f15e6688470cf500f310904cbc9e4448ac2a1ae3852120439b0c11644de7acb7298836971ce8a77a721a2dacfd7fec0baa687e41f5d801aa03f1f80d562307fb4558e7ff0b837d64a98f98ec2f1e9cf93e7f67cd7a1e7eab7f2be671753c8c875597d0bd3df3258e7d2a114e92f176434b347d1cfba2f0747d88dd1b5c6508d369be5a4ef8242b0c02acc8aea8d36b0596cfcb4940bb3c5d7d4bd00000072059027929fd19a74c76e8b764417a6eaf7eb5d9a31cf433312470f02f892fec7e9f60a850000004aa9465dcad8dc5c930f65b92d70b97d23ed2a1698d4a5a3678d7070309e7580b6ae3abc5012e30cb281cef6a7712447d76f033f275038622381162b57f7c74997535c58382e71fdaf42a400000160000000c407e91711eba9202a469d942d2f1a0f1da43bb24e84764653a86093e182ff9610262f6a680000009cbb8d8480309106c8036b7f9ce3f905c23abb27ebcd12d2bc385e88ed2d7cdf2743be27ccf704bd9117631495b1b5d3025e8ea5965ba7941ba7cf17f7c843c74a0d9bfb48ea24270b086d819b92892bc35f3d09b348d4f4c4a840cc28dc4754b77d0ac994dad08a1622933cff2ad1e284d3c1e772c4bd53d695d46a3452329ad5503caa0c49e5703d7fdf912662473bd68ad1200c6ac159146cd3a1ac000000940df47f949b62700daeb58ee3fbdcea64237f6f224ad3f7e83abc20c882a8e6a2b73657e20000006c6ac28d18e6a96965c0d40ffe144b26b8207ee6455dbd5cd6f407cf1aff93e81e2dcf48021d3d2fcab8352f2dbf1609ade831415799870f4b1015c50a58c2fbb4ee328075d4f910da1287e592f95108cd684803a10587b00081f8c97c539eb39c46b9e49b191c0e7102f48385000000b0000000591e2476533b145be9f400bd97c81531cfc263082216506c0e5d4c18bb8e35f4266d3fcb7800000031c44e13a8ed5922c5500fe47d2ad6720018730323452081549a1fb3ec2e45597b0d83a4d4f46f91a4ced9de978c3a2c29d20000004f26c9d0fd67af05560687f3113bbfafd67d4be53473d0b64831d2ce353fa6a2b00f2accd80000002758350e3adf1a0a15a6a1c7b62698eae6b636e02987acc08af467a9c891fa7bb99cff518e193c0e00000184000001162c86d74fb28c359e14f251f0bb40b7c54a9cdc91b5bb2b9008f51006db2dbc520f08a357000000ee5d79f027992874af26d77ea27ccfd07e57d5f3f2be2a5a854d46f8ca5df3e2c3946cf0a20be758291390f9e344b88f8a7b240e908ab8378a456cf88810842e8805e5f36ee3f3a4d2427441592087028df60e56622444b3647502aa2365f31799adc04fe4ac3fb8f43e9f1d19a11d48099bbbfec3182fe89003a77f5cbd0f81430e7a2391f15a7386165378276c0508871eb36ae1c7906294d768d2d219083a7754b834db15c94068f68306475eb4ee6496020b6fe9d4ce71b5eec9db79604c96715eec6c398916b24f838688c72d676c22e5e3780344a13ab3c16847ceaf2854839c68b3144aff1f2f091a1706af000000661534b88f40444980093558fc4cac4bed3d7fbc9598af09ba8255fee19dba106efb9f2cfa0000003eee6be4532e31efd0dd422c8cd93b560fee35377712c92866f775a0cb795daadb4180f661b1fdd0a81ad3798a62be6e1e65981e3ea84432aefc6e8d6a3cdd000001f7000001270b56989daf809628f3a34ec1f6fbcc5d1ea50c533b536362ce24795935b2f5ca4a1480c2000000ff4fc39dec48e20d765f642efa0c45bd86b11c66c352866203c489b235675039e9ad235c936bf860661ad47e39ab73c806720d061327da1a0e4564658941726a284455e1cab7306ededee24ccd1caf10883968ca27f6bdbc8a6412c0a3ffa243c11a33cdd06a41752077519ac59e1b96eabd4dfbabb0c45c0b42f185ba7e1fb7674c6a68f925beee8b1cc8839141b6fe7aad06683a2e2879951443d6b5c517762035126efecfd4a445d877a5c219e39be25c339f9638b554676b9ad197f358d0fbfec0f39b137419192341c7e16a4579275fa6a2edc88fc7c07b0d02cd84e071e3d9734644b6a20d30643fd290a22d9a5551beeb7a4efcf728ed57606778fbfe000000c82fbc94b0a1f0efe01cd79b786d663f0fc588c517134ce5cb3bec5be3a0142498bf48046a000000a0db6294ea95d4a33e2958d922e7efdea814abc45833a04f0363cc1ad72072ccd4aa350ae361fe592bccfff827cafd9045af0bdd3d5ddb06991292ba775523b1a084479621eb2cce66970d9fa6cf2646fa4ddfca9137275152389a0831e25ce117d1d1006628585fd344d6fa5204dbbd21563a41ca90a3fa6ab458fe6796f14f578d188f436decb6b4f0dfc23fe67c5baecf2385d98c1b94ffbacb341b4ec4561b00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b02c78906d743f556b7e45e7c23b0c2b39a7d7e4c1bb3b56e04233dd271f280c019ada29b2a2db7f0568fe0484e122249b38b3c172aa515e0bdc2324927ccd7a2cb1a3f129239fb734a849a7a84cd5190661d036d0d6098190ba4a46cb799ce71850d1123486a8c6237217f2c8cbc6e9f327b417d4dbfcbec7300a96d3ced7313675f8c4d7638107daa550111f5418a9a51720b6a5646d3837d07debf410eac4250491850106ae8b3991e72c216bd200ee000000b027048ce49de31396e65972d4e30e18fdfe501266255a602e67f807bcaecb00c102322428b1d9d8de479a3fc974eda8df463bfde97f39ca6d2a02f165244b3490dc46d840f89f4bfd48c0f5b3b084a95410c36aa6f3dd5753bdaf0090783e8b55121df8d21ae74a9fe8d9909738bf2a5e16c828861ee3d230bc085c49fae496f46b31ea994701eb3c993701651a9299d01630050e38ab319307df9356c45a35676aea11b8c03038dc3f06e06ca0fa4d17000000b00d5414ca8f2b80fa841499ae221e241ef4becc804699753cd85af800fb11d55436431aefc747f26fabf3333b186c25cca88fdce59540d24766aab5e80871c940a5d63c72178ee2c4242b8e47d1728855a8159ba7206202ebaec7844f85fd85e91f2acb82ae5535116d6d654a0486e6472eb1a1e2566f58d470926ae16b69332146bf972e5629d7fd1bcdef2913f73a3c048691322688d956461946ab645a512cee5659c752930f768554b644458200f70000021c000000b00eeda7a6ee4b0d848b36e73d2b99c6192c3facf83aab22bcf84edfa1154572152d9c91c4a2e4ce9c76bdba7de8c1081f78937c11cd400b1d9da278b3c567f2ebf786f6735f6c220a90ea7cde5fb06fcdf8fdf0124f9612ae8ab946f87121bf5754da0f74e45c789354963d67facec0551b72a8c760e9cbbfd9cde49faef2c5faad421127a37369818fbc6f70c5fa279918c5ee5d574a750f0150003e2fd176a4c2abc7c9f39b7a43d3f009d71bdaf323000000b008197ff8a9ce32ddfd0d06add052c63b9a8ca637a4c33174a41c826743dbbb571735047bbc72faf946a536d091a5c632d97f64b2c40e8487739b9e627cd33c4a43a5ddf1e2d0097cf780cdcee9bbaaea0f2519d51bf40106f873e887a46c5948c298e2f447a3cc636edc28dc37a6612127086d392c7f5cdabf96d2593fc2113d07caff464f2cde326e749d62f09ff038270cdd44ecdef693518eedd07ea87374c1a53803ce0622f16a2975943e3f8ed6000000b0088e5cae30c252963d892ad1250035865c18df6ca8769e7b67337e4ba2551ebc02f27e355e81765139c6683d9a24cc41529ef0a037f155ea615fc1bc69c1df5ce661a92891383883f634114392aaf7487ef69c97e57787625101a7d08fc4910c979d74c3b1169ecb0ee2a13ba049ce6303f4e3fc2da8f998ad6261edde004a0d0ff7b8fba33e1826a10dfd156ee79ffd2fc5faefafe18c0cc10c520c2a91dbaee1bce8c9b706b3e75bb5c35589f6960e0000021c000000b02803c504e5d7451e4d96c3b15f15767e10c108245e334f399027529e9141a8d9a729aff994a08ed6a88153614f85fa8a41fe089ae6905f1eab63bb0cca23f5dae2417abe544fdeaad1ca79f6a4f7cde3ddbb2fdee5e64f7c5f56559746aca6e571aab7c9e1c0e70723f9aa048b59e5481a3bf758c0cfc10606c49984cd418fdcf7d09fc03c01b003bef5e3e6f784fae621558ddab0d0c6bc184495bb68f32bcf137a1a498bb6ab347a8d8602e1b82105000000b02ccb40188d67ca2892ce5f12104f0ee18da44e617d00a55b9b36d1ceefc8cfae2f20b422271f3765f8638a8876edce7f588eb782be883d470504c83c6b5632b3557f59288442d1c9d4c88055d72de6b39d9a5675f3e383f5a5eb0753a1129c3d5578656387e414ad38d28ae84ba6cc9119365424ad7db9965a3ca7219477e35a9b06cb117971a07f2220d6970f3d9a3f18989dcc8ec616dcc456f1b0a7ae59ddf9078479d826fecafd28cbd2746d0c25000000b024515b430d9794d13eae6e31042dd8becb04fbbe3f36888fc540c7691ab850c41bc6366fa99e9a910880cc3cd5f2d71976f9e07f9d905181118b64e6d59db9fd56d1d4a3d9c4d017c4113fe341c07d98fa3663310503b6d8c885ab5cb9d7367ccda43dac6337bc824e7dc3c4989ffafd057c8f475bedeb0e802333a20312c5ae669dfb456aef4a23ee7b5f16b892dcfc1437b75c28df5f373398bea591da351b0baf26905c1c563eba06bce1e68a3f2e0000021c000000b016a80a59dfe0f5f874fa4de74cb3fb08fa95ed70cad79d9b76ec570576b994ab97ee3ccf7864a03105e067906aec97464cba94a469c45831fef69f75fcde1de7d9db43dd483ed7249a9ca5ee56f4fbc125e19b81f3aa7bb123e3f5d16dca0a2bb5bcb8f4fb00874e66b4f094a8c1387d1d7824c0176969490d79bf21d6ab6fe18f67bef4a2a4d437a44a6d0e613f21761739b197ee17a3d47a6b9d050704cdb7c78c3bc7b57afd40c063c5f52bdd7e4e000000b0205208881afd9554d075cd599c9fe02c7104b6edcf9e18659ff3bb38c5eb18a8a18d1820d15f599b2c8499875fe301ee7fadaae8a8eb074f61e2d24f1d756d5b1ee7bda0b14b578c2478424edec5c5baf59b6a0017b5b17a885411ba6a85b80122e958aa78b408e389e881052cf3d100147683c69b11f46e61c66c471993e37275d4236b473d87094f1ac7124fd2fff603b2bffb142cc5f129e4724916424bf2b0227fb1f798c547db60ff6a33471f1a000000b0162ae1fb5940c4e9e090acbbaa16cb087222ff397276f1dd92ad00381d1587c82aff73a186234e27fe535e8729e9e9699361583668fae4681036b8bc5626c33e031649ccfbd993443de4e47da04c5be05bced4b15c4c8abfe32058a5f95eb75ef21740b8e9e12a11c32a4543928e71af29227b81dd71df2e67d616751e570d5e242a61286484a03355b965f16f30cb602e7b24d703be3ec37a1efb6cf4be8664747fa29e26ca6708f34d48ec6d278c640000021c000000b02ab17bdf50166990ed6c066e6d1410aaee45920b624716fc4660c91566eeec5a9fc4fb87c9d51bebf05d98151fcf753c026cd0172f90740d3bc3ea39c6436e2924807b346279685628885080fc64ff039e02ac0a2e52ef3e29c2743c4d6e4f348470b326c44b024bef95257e66b2b9f82414721e492b121e7c77aa9252e1d1b8c77d3383b6f59725a776d1bf7ee38e450834617ddf681b9f5dc492baf5827b8ca3ad37f95b9ba73eda63005a902ad614000000b000b851c055c5d0e6ae00eb9f8527818802b52773298191b88d0adc1766b7661c6eb019eeb2dcabe614adeb99137163e6b70b4d26cae56a05ec01d4f80801e6e04d61e534eaa2021916f3edd454fd6d03ebc2d31e7bfe4158b0e2ee3246132d2e2606cf9c5427dc7057b6cca98c346571058ad12371b36e1a7cd3647231deb6acaea80bb568d7a7750fbaa2e95f8aed5f2542ca421d0af798c7fe26cb86d3c41372ce593fa5cd6d34068983322304c16d000000b00b772d5e181cf177b5199f1b8087f3cd7169ff45b4c2e4462ef18db061dc2f257d5ce86c4f14f394c83091c4e6bc4c150f2479943339dbbc09f9e8091e6d53b4edb105dbc1632851b53dffe339248b0f357952bda4deaed6deb6443f2fe6e76b12cb5a0bf7f9396c950380e6d5af487e1ae7538622ecd299577e762f27035644e9d2d824c0e3f55c147e479702e2abdd28893d64a3d128fc329141cfa2521e381f3ca103bcad273f70b0c6a875885c420000021c000000b00a6cefc5c3092b87870a57fb4a54db2b01d416d0f3f54337a64168cf3773131f7412926e679d01a98366b7526df899e96cdaa86c0b7244a2fb1f32acd1d8f6bebe9d0ed1f8aaba4619cb6c06a2ac74ffee35e991826e5b6603b3d3f8ea29d4b151645cafefd94ccda42e72cf4c02dd9e2c0192d38ffb64b7a4d0770c586feb54ec529a680bb78072f5ac9800b976d16103b37253e43f28cb536db44cb290d21ccdfc273d87cf0583a53945dc89bf4d0a000000b01782298ca15548456387873c6d0e072fdea9a5f7bfb1edd5a3213bb8ad8e4b5c1430d6ed42201799fa0197f59e22b17d697552bcfcc4afa97e4385aa00bb338934f3707342767eec26ad51e4fc810d69171e765d5096460267d630b58e9cbe4eeb2f2b5e9f7cdebce3a9f6900175a40819158e4f668a229a477c8e7538ee3fff9f7158c0f167656a05862b2004c13bb9139c7250ffacfc453febf26465d24ec0750aece07242d6343b5e1787cd9fc4f5000000b00244a3ccd5f36751ee6efc7e9e3022c88e7a6930d24661487d327394f71509fa57154b06e05036292b4f27a31216a347018227282b92c282e241e668d0e8f043c842dcedc4cd427e4075530596eee08de8d96c1b2e713b2eb3abe48baeaee03a132ef34e7534c94b215210a11d82918623d22f58e9aed6408d32ef3ed995ab01a36a7d2153b033e742f5dc9099eda7222cac5609cc9bb89c1e3a824522e993f2a7977e116d036f29c8f47793c2e668d00000021c000000b019bde7c6d6b7ec83ab8a3d06bd28f045dc871c70029f037b116a826c8dd9f344d2b2e54e969cd66c0d0971b48673074f4788d5937e9cc6da321eae16c5896d106d60d188fa117b9f42fa8c38580d0771e78a5360bcda19867c1c56eb82089f1f870fc4c4fa1c5552ad30f9ec55cd1ad6106f9db289745b40323a0b42d722f54d0cac53d07516bb49777381e2c8c17d8c1c8e031bab93552655ab5a33ce6b943a923ea311b7fb680bea1539c92f278c56000000b00a1ebd30b7f2846a7957065219edc0399520ec46abb8a2eada35bbc212b9656e95262918257e34caa2666179cfdfa2c195d642a3ec556ec491cd28c22978b0db024175a2cda64ee54f07c88bf6d827ad02ce5cfc52098545a2c7aec3081c7d01a3f05c64459c0b2c559f8d29066dc9dd2eee63a51c9544dfbf3c1ebc81902dc3759e64878ad9492251dbce84a8b5b9e60dc4454a482467cbef1d072f56c0d47744d1a7d66cd842bb725eb2796eb9c2b5000000b00950cd0745ce61b9572001ef02b438a046b4da1774999db21771060be31f29a2f02b064c2946716773656bea88fe8b8ebc7c72b0ba415b8f9ac1509d9d52a62cafcbd4ac37ff30534b819aae04c3603bb669d6687663161a796b4c66deb693c5df82a43b51bfcd282e4ce391fedcaf4524708c60598abf00415c3cb73217b9552cb7b6c3b8b601d518113c9a0bd5f3470db4c2e2129ac80123c151bbc4de31a65012aa1d3f23081ab1e37ffec3c73f000000021c000000b00a7e8edc6f0c3d43f57dfa6880ab5e3e7e56200ba7a4d907711d10f1a28127f8b775092b56fcd173049e0233e5fcd23e7d73313baa578f8ea526d0876cfe1f826df5cf7c36cc4d6a23b8edcef75c11bd084bf647e858b32e0e4a395e6c131d3b26ee99f3bf3b9bc0952575ca6966604d1dd589d9e35063d2990357fa54d95845eddbc67b2d2d39d955833f577aa5c9f72b5fd4ff30b8590bff807e784569207215a13b15cfcf9fe60480bdc3eaa79e93000000b029dc8a0a9ebb5472860398281aa48a00ff20bc41a8b8dd023d3c2c6c0bf85da81102f5756f9fb8d26aea14603bc288e13155876b70ad4fc6841d8f67ee39f3d4a7f96c4cd4998bc031d5cabed8887bc1cff0d18fea2def9664e094043d0844fea792c100ea55e5a7bcb141a3a5ae4cca06f5d1d7a6fac71ae2ccf9e3205d972d90d90f6ded158fccedd68adc7ddcdfe022330a48f6d7303a45f3cb70e4beec873c2c39e922236e25bb3a0751bcfe4927000000b00a22d8825edd32ab623fd236f651b795452847b8861eaa77701c665bd9f7ac4d6b4a52f1f9b175ac0a1d995048867849ff2a47dec1e38b7f1ffc01f9f88377c634e0ad3f3d5cb162fb18281ed503244afaf790b87bdc62710a7190bf63175ce1f3670da4e88d7507e1a90d3767ffa021096edba0a781ab9f1d5464c2465b0389db0f461c5f91adf9d9342c1054996b1e0dce9b403c40a12a8f8923a900264540f9857ba72439e23693a6157f0a41235a00000cbd00000177000000ed2f5322d3cbd2d5931a584ded8fccde4c99175c3a8f2d619171564afbd60130b387f2d49d000000c54444b08d8f1e7a397303c0b2d937e1de7c424af3672d1c9a24f0d16e330ff8dcd5ecf6e7024cb20c8b056c0dfc41d218b39f735b347ede2a520bc09d514f3efa9c2546cb4c152ecd7456f9b51f2321095c56bb3ee6d0bdaf047abcf8a40629eff8bbd76504f59cd7b479f12b45b5d76dfd708b0533ec58dd80fbcebcc741ad326cc1f65666bff3801b51269faf5fdeeeb553674eb3c6359664634f0d6d965286b52df009abed4d9c1c1fec810f359c641faccd09ffe101e758724f5107628a3738ad07911800000082020ba8e8291c76b1bb5df2bc8ff3498308a42a707670c3a817a02495f91b40bdbdde152e0000005aa9b866a9687f33423810c1d11b08b53d2c77a0674a757714f087f89e03c295f5edc628b3934e32c3d858781d5b62d559d4c4149d1cd3b630ac2d4530b086d26f0ef6de92517ea15fb77fe7af57d87e3e55e5316d525943f20dd000000164000000fd26d5ad958c21b78842584f1097ea1a903d7bdfbfdbba1ab112e020a41387a0256b186444000000d5e97671f6d2766f296f47987aee693e0f98d226dbbd2ea01514c24211a1ae29660c7a2729b5e094f924dfaf97cf341db9586063f394fa374d1e12af7f50edc97613c6e29f75e1b7109dc3b2456cbfe1f0c226e0708c4f8e3ef9869c5f14e3accf5e17ae7217facda1e94b3dc5d5e06b67c10061b39426052029c0a14c13b52f9b14eef2a362afeac76eaa3a4110589591d88fc6ac96a643efa46fd8b34ce557136c8e96938fd7ebe3217b958762a73bb03ae71afbbb0c119a28e389f69666bb3f7775dd4ccc69c4309ad69a3751490075fbe0a212020000005f1113fca85a0b29077341e11d876332a1b87e2365d2e44d6aff0ec01aa3fcbf0cdb4d66d500000037df8ed7f75a947b506ddb3e45896c1a35d331f3a8b0f2c842734b6e31484604f258b7648743841c1f1a9efdfc2540836401251e6d0861800000009b00000037260b7b651356ef0cb4a8f727e7092bfaf55236319b94bc3d213ee2ad89e962bc66f34bbb0000000f95a66ad2f94be704ae0caf793ba0ea0000005c10dfd38fa707fbad7c9bc5ab0fdd156c541da800b1d1c763e2ce6077f9656741476e4bb60000003492ddcc1215c2522c5b38b8daf0a6d3682ad3a75717ec9f30762dc5327d2f41c2ea3d4c996d2917b5b013f2d438dfacbfd672f9f7000000d30000009817f2ec9bcc642e34f1e4c065ed45b55a0f91504295df40ac1a5cb7f121494df83b0551870000007017fd383b2d629063fc54e4d5677caef5a42385633a63a9dc2df4b37a5a61a21bdc6e81556d75080ad8eba3c8ff768fdb6ca1b52c6c40a51b97eb8b5fb7051bd3d428dd98ff7823881dc7134a3f75fb41c520bd82ab129c4ae158e314142409edbd83441b8142dd647768b9a9a6164b2b000000330a54c18405c9329fa25dfc6a293a5a0f030162aa4ac39975964af9ffab4c604d00b73df70000000bf88079fc99afd210cf24ed00000159000000c92b33b491a5e72d0d77be48b339678278f9fec7a983e0847719ca48322ab288a5983e3891000000a1c68b5ea4e1e8f6b95ee10b64237884d445ce7df3554dc2c3a51c9b1c16943d59ff7160bceb5433346e6ae8045bb58c66ed80ae208d01ee7bdcede3631206e79664301f9441cd4c9f268611ea9dc4fa996085a850740106a1f4a69cdf2ec6433f6368ef7deba718b8fbfb2c605424d8ca8b657ac5f2f72b479df02827e9df3a7911514b2de9c9c243dd7a995f2b05de69a18724a926db85f6d492a794a452ce30ff00000088043772c9ffb7336985f9216831cbfe8c1c46a3cecd801417087421dc829f906e5e0c66380000006026a68ec1c521b09c6b58215f7cf21417ae2a42efb276680dd649271ce69f30ea25cd61c6f2f138acd9debb80f83cb243723de7a464b353ab9699e205099d1573758efebd36c50d0610f4684445cc3b1a83b42921209ad2bd1b31cdf909c728bd00000136000000b324539ad433209063c818e3c6764c85e5e4f63d655cf83bdacb54bb70bd2bd168d57d10920000008b6b12842215905304a0de69079fa1b065f95a40e83d54e9ad213b094ba7cafede06e90c63012871620e3bd7ab5ed6c1ca532645152a0b9df73bb1c7410082bf9d70a3c7f36642d86048736602a9360a09f0a0164204478d768dda94e5551f7683e8576c53d0b7ca6e0a8e6a67d039ed32853efec4ef3b28463977a80639cd28aa2afd0f16a0cd71892ef4160000007b0c1d9e7095e08218d5d1da5ff57025a24188eff86451e4a55eb6cdfb4484cda6fe0352ad000000536024040f1db22da5e84d5c577d1db53083151ac88848736cd5dd011bfa53092454ad1781480670b650f991f37ebf28c3a4c689eadd31bbb0bfa56a621f09a6e89d803c226b31f1839331b91e6d88cb701f29ae000001c5000000e82c6044bc92eabacb8139f2654bee540f73e41eef5a4b35a5b58d88ae1821cd9fba988edc000000c0e851ae04d8646921e69b2b8098ff350a0b5efb70dd29fd1c768b5506445c8576b5c5b25ba7eefae68ddc6d8deaf3400ad0e5ce9c2547d9dbea51aaaed2b5ed2df9838a4864da4012c98a71f69fa0506f195900f2b477ad74b5eb89884120c28a0310eed3287b61d18ca8de39852e4c1f02c300f7bde079616934e0d1bd3d986d85f4797e841f41aeb2b587aac998fd87fb1db43a883b22481a9b8de4ffcfa6cedc8c41e24da004550746665d5af61782a422ced4f17c704565dc250edb711e88000000d50b045650ed047183d019bc76eaabc2208bd6e672ad7df3097c09ba03783eb95ec068294d000000ad800f55cf63b640705e1398f58f68f547502c0b67099c6132b69d343aeac92d9cc97ea92e8f075863da3d825ee5b92bbe73353d9b87dbcf8251a65b64792efef62c1cab49801bc660695af67c3da2c5357ce07fc4a97a2a81c04dd5ad1d9615883e456a07cd16759d21cd47cc36a27bc90cc931329fa73a3e38fb5884ea6bae988d9f5d9a3f7b9f112c4f91cf980a55012369f82e33ce109df79a0cb992c9c0b63df32bab308a8f265671c0b8ad0000010700000055227741e2c39eb8f434429d52e2055c0c18770b00931fcad22e344a60069140541ac6dcdb0000002d557f5b1bfd5ecd0e494deecfbb84bdee48985ca8d813894e157129db63c1d50fc6518aa7f6a92974bf4428140c000000aa0929d3aad52237aee9b0e38310904576afb3ce5cc792967222c6b8516ce10201ae2b1c0c000000823d64982611c6ba9162f6f5dfc726991d2e60a4366f1fb2d8e93bb390a3438ed624f602818e1da5847449f75461886e00d5503728997a478978317bf386424f446db4a205f852c05a78a72388bc50ef64da774fc028f21dc8e1becd78077cd9ebbcbd1cd7010539f6f62baaaa2f68882034bfae6fea70a63c88d75ed9458ba76fc9ee0000011c000000951a01c19559ef12f89e1855bad57e8c89f00fe5bc1ff6428903d89731b3a26892caf4689a0000006dc73f0091b978a46f94af4e99aac6d4b3da45b28c2245d653191210b51be933a3b6a75ae45ab2637b6b1b3c240622f531c1daf1c7f19e107eb2658fe7b530ad19531657b79068becbdeb13b26f460392fe9886d5a6a3c4af5522960b832ba8d5bde00782d3c46f7671f6b1a69ed0000007f07aaa09870dcb2f245fa3d22382d71fff5f5916e431f561287c6e9416c15a76c642657c400000057524f95e2c357d5433b9f3e8e17a040e128eefccc0608e67b1d4ea6fc446b05ddd588fdab9e75a685dce62f0371837187fb47437b96d067eaab2dfbded1e3103b48a79739757095b58227086c7ad0d541ffe00b52564f4e000001100000006f18b08552aa73404d6d51dc1203466547d09654ea1ffaa11fa07f61c59e2d995fcb44a3b3000000471d20e554434baf94a2b41cf6b32106415211bed84f6350559bebbe38d68e2adf6b4ef45859bdbd0d52e2966606fe0b40320272927d5794744e624e7fcf1a3aa19923c557c5061b000000992e5092c55038fe539347ca410d4f36404126dc8bf97a709232c3c56f6f9e4f971496263f0000007199cd566efa125b9a70de36d83aabb1d79f8a76f7e905fcf7e31086a6f03a7b79627ad2e8dbea975a9ae2324df48f6a5d3d8c24cdf9a3d871d0d108981a5c952191de97b1d732c3265ebfa0158ce183202b25b791d48bc8a359a68c9c58aaca283afbee6e4818eca06d4bc75cd5750bcc37000000c10000008115003ccff43d3d59e3f7dd8377c7c2de95ea51b676d2df4a93fcb5162b4404bd21da798a00000059166711105d9f493165ffb7e5d65b8b3bc2dda3f2d662c4efb0296a0dfb829aa8b014b16c6d2ae928385197e8e028eb80ac05c3e8c8614660bad2b650359aa5633da11fbcc9361a05ca7eb6f377266c9e9a7aab870e0389b5c9000000380ed54ae14d8049d832d491f8fc3d0863a74e931ffede2bcf0a6fa7c98c7f9be2803964b300000010b455aeb2504de3d5001b89d66b590890", + "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e" + "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711479823, + "timestamp": 1711947319, "version": 1, - "coinbase": "0x9316f80d254fa0d3d2baa4f6bad7a31bda974edf", - "feeRecipient": "0x1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c" + "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", + "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2" + "root": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x22ab336463498959396e3016510e924fbebd64cde651ef704eaf552d058497c2000000020000000000000000000000000000000000000000000000000000000000000002000c30980a1858743ebfa3f2df072ed85cdf1c7cbf19d9d5864f233249d1b99e00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066031c0f9316f80d254fa0d3d2baa4f6bad7a31bda974edf1f7a3f0422f9a375653df6b5ab040a4c418291f7c00fd66425dba7eea6b05f0c", - "publicInputsHash": "0x00018e2cd561c8620160c32f8c374be37078e6d3bffe8747c305c9f3568a7ce0" + "header": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac000000020000000000000000000000000000000000000000000000000000000000000002005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e828900212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e37d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", + "publicInputsHash": "0x006fa981e1daa5d49ddb2d414800a9ab0be0999b2e5497f21715e7060bd6b535" } } \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index cea5f18f602..e819c7b325a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x00f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b>, + "txsEffectsHash": Buffer<0x001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x0000000000000000000000000000000000000000000000000000000066031ca7", + "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a3e6d", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb2>, + "root": Fr<0x104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x1fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f24>, + "root": Fr<0x13b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c3>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33>, + "root": Fr<0x04694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x13bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf890>, + "value": Fr<0x1a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x00ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa>, + "encryptedLogsHash": Fr<0x00c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x1318b641187d9678f7db0e5b911c7ecb2291b75367c7fdee2b5a711694520765>, + "value": Fr<0x28d23cd3f4c08daeaa0eea08676686f6a3b0c266aac8925de6d6cd2213c17ee3>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e>, + "value": Fr<0x1b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x0ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8>, + "value": Fr<0x14486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x16736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4>, + "value": Fr<0x07de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 3558ceae438..cbb4038fe30 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -15883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c4401000538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e7500000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78af9f8c440100000000000000000000000000000000000000000000000000000000000000000015883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f780000000000000000000000000000000000000000af9f8c440000000000010538906d999a8e9a013c8c6953ac477f77038fd1e145d565260ab9532db15e750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1893a5f8a6edeaf9943a155114589b07f3d1d09e4d089edcfa07b969650eb9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115883134355801689c950d669eeb2583a7894cf46a8c000946083992e8eb7f78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fb6a4cb910fd2e9e4717e12e84abc2eab723b09bdd8fc8e7219fb97a395d8c00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0890abc78b8fa90c35f41934c751512ec2c2e1519e76c3b5e18efa0fc4b6d09176e094b458e5dbc261fddc9905fe0889f55c02b4655e8e3a91ecba3220eeb9ac74300000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +1be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c4401002588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c44010000000000000000000000000000000000000000000000000000000000000000001be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed10000000000000000000000000000000000000000af9f8c440000000000012588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d38f6fde0427101df4e778ed294bf222b735c885172067d2b4d6967b6a7c8c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fe53a6ceaf194ae7c61b757a173982685276f1dade7402c02e78198779ae0400e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921b17810bc097a2bca3247690619cb3215d116f832eea2ec8d844460fde2fcfc1bd86d85941600496c74f2da2ccfea9fed69dbe88d8a73033097f0c4f7a44e8400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 41902d20920..e85fef94585 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bac7df0ed537cb8728b1f9932e293a028d01d8dbd45a6ce5c7f3f9673bf8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013b848b11a4339ef7a9395d66884f023bec1ad17c4792cfd07f422d2ef782b65034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001b83fe6f75fc7f54a7d29536f19195a777376fdbc959bed02604e2e262d979ab28272000404f8f47b27ca59c0d66f0e3046b3f079fc68ab395a7bc3eda35890e232e291a67a197a0b581d8716d53d79916851a44a10678ddb260212b49c4a4da045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d00906bca10100034a487a18746262742452f9ca9f74a186864e676f9ae906a1b4a4f9a39c2c04045d1ffa67adca63e1f17b1a34a7c049af1acf049b8ab2fbdb6b9a6061b812d000000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004160d40741daef45c5795299b873b85cd29f0eb6d5748344bf73f2160e93dfdb200000003000000000000000000000000000000000000000000000000000000000000000100f2deb9269146493623e69b2e763684865e89f28618b0b3e7c3681318acad9b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000301fddff8bfccd38325c3be904ee6608179a4d0d36999560cf45a59a2273482f2400000180129f589dd54ebc0a6976700c9acb1b63e24f1094a0b7e204cbe9392867d63d33000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000066031ca7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1e08c7474ec54e620c1374d3c26a9aeeeb7c52a058ffab74c6f94ed3df566683268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed11ddaf04805a6f068018feca53bbb9a7328e0e09b9fc7d48e6e5f7599e033dba00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e957fb833022fdbc841e0192be07c55b1f2d3ec3d9d5933c566e7eca418a2b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001d33cb2a28886e7dffe6e29908fa4287f9a770bd5591eb4e0b05af7a0410b21c03d486d8df44f793ec2c180cdbb3835e185e43a7c9991695e6bacae04d0b548c0217c6fc6e5bf85420ed3b84254a5ff189eb6d11dc0d4ce911a3b03be3c6b76014213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e70906bca101002b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce14213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e700000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1b312d79c2f2b38b11da7a65c57ee25cdefc03e154410dbc0d1208de3c7d984d268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed025eb824626710dc3ec6f2f31a2006710f207dc284da5f52f0e5051871a092b300000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index ae8febef822..b93929daff2 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd6000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab180ec8635bf48176affa40382e5d4981b29ae75077aef1d39911adc3e8fa006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000bf724e301974fdb4daaf99f85827638eae14a49b6c46a4a92ef060e265c1fac0783775f73852526669906702803e076d9e985652a7da3d7a9411153a7ce30c829f443365e401807d255a40272ae1694d8452cbd43f2c7df690019f2203ea8821febdf7dffba8e60e4d145e2ba55374bb1986c0e0bfc8ea901643d5aab650bd60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016736e2b34fe44365b45e7b58d5b42e1ba1531f261c3f7978c00125308f765d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001559a39023e030ce27a964f5d8519fa56312f6e429c67f3e0c74ce38fa28380e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010ee037ba773eaf509478d2eb0a82eab7f1c6f0f0265f89f07e724401036a36c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002447f72d2f5d3ae9d3fe1e17ca75242eb186337ef31fcb56cde96ab973f4cf092fbb460516c785a1f63de48c5f9e685761c45d63441f9318b29aca93af532d240d438e2fe6192c58edd342c34980ed4c6ada2ac6ee418572be0f58050f2b21b619babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From e4f75eba1843ed39e2b9976eb907049f5c364e4e Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 05:07:47 +0000 Subject: [PATCH 029/123] merge changes --- l1-contracts/test/fixtures/empty_block_0.json | 14 ------ l1-contracts/test/fixtures/empty_block_1.json | 20 --------- l1-contracts/test/fixtures/mixed_block_0.json | 20 --------- l1-contracts/test/fixtures/mixed_block_1.json | 26 ----------- .../src/__snapshots__/index.test.ts.snap | 44 ------------------- .../nested-call-private-kernel-init.hex | 4 -- .../nested-call-private-kernel-inner.hex | 4 -- .../nested-call-private-kernel-ordering.hex | 4 -- 8 files changed, 136 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index 81a0b8fbbbc..a9d3f6147f9 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,11 +17,7 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e", -======= "archive": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d", ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -36,13 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, -<<<<<<< HEAD - "coinbase": "0xcc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e", - "feeRecipient": "0x085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e" -======= "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -69,12 +60,7 @@ } } }, -<<<<<<< HEAD - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000cc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e", - "publicInputsHash": "0x009f8c7418042fbcefdb65b1e47b2307640205e7f96ebca75f551cdbc4a860fd" -======= "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", "publicInputsHash": "0x002b3718c30855a31bde39a183e0e2fe51bf6de9784b88e35c31497d07dcd6a6" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index ff6057bea62..6a477202b91 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,11 +17,7 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x040e0450205f5541c6f4b2dcbf53246ced1aa67898c4a086a03884589b9dadb8", -======= "archive": "0x1205c7cf2bb5c9844379718633439676fb40a25c1a6bc89a36af575447ac8d59", ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -34,16 +30,6 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, -<<<<<<< HEAD - "timestamp": 1711538420, - "version": 1, - "coinbase": "0xcc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e", - "feeRecipient": "0x085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e" - }, - "lastArchive": { - "nextAvailableLeafIndex": 2, - "root": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e" -======= "timestamp": 1711947351, "version": 1, "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", @@ -52,7 +38,6 @@ "lastArchive": { "nextAvailableLeafIndex": 2, "root": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "stateReference": { "l1ToL2MessageTree": { @@ -75,12 +60,7 @@ } } }, -<<<<<<< HEAD - "header": "0x03eb37fbf5b636e6c1f445ac8441b77a15d0816f03338ae737fb9e95a61fe43e000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660400f4cc21d3dd0c4f14bd2e4e18872fa52f4a51d6135e085fde1046bb46b77504003180efcc367409d6233529cb495056e560ade5d40e", - "publicInputsHash": "0x004ee949dcc89128f6dd16e4d781ea48159df3761cc879ec2ad5faa5c56bf8d6" -======= "header": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e5780b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", "publicInputsHash": "0x00c84265f5f882a389cbff59702265345727fecbdf116619286e372c79457de6" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 10df2b9961b..7dfeaff9da6 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,38 +34,23 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b029f7b211a9d086a26e6994ba100b176854fbcc970ec1ea7028c7c5c2d0f10504bdd006bea3cd02a46920a29bfe388c9d9bd8b0ecee05bf690b6fc830bfe9b07b0dd868c0e1e26c45632b0d256bb4d2dd22776d071ac8bd2ef03377d7b2ac52ba57d12563b3a475dcd73e6f9cb2aaf97c1fdc25cd6eea90f9b8ab964ba547c5bb3ac43b3c524a00727dcbd4e13b60e7581b9d1819ebf633c762d8e91ac1a741bf4ade0712bd9ce266bdaded143dc37ba4000000b0001d84267ea559c3df6a2d5b44c400f60b6c34559abd0d8445a02ccb30da259ac7e2bb3e9c346da31e1ee89e666d129f725f7f9d3a27b9fefdd78b985377aefa1b3717042e8db18d1c4b3d49cda72a1caf78053b8766d9c270cdab44e17f93257db7548077cd3a50bb44b146c166875621e56cc3038c40162fa14d279da84f9349449f9b2a2c2700213b7de5af4c7f8c2faa21aabcffdaa6b78f3e666aa416f893f27b3672aef201904bfa60338c3080000000b010e7992f405492c3b9ec7bf2ecd6f0fbc516df0815d6d10da558808653925d1fc8a7e09cf462a5a485d8fe0e4f300d25c756d2d6ee0ebe3b73f040dfafd763f13f2e2cb41c62b24d43e16ec8e2c642ec7fb10ecf06aece17b0fbd5d60b6b61fdd2ce57c843b6d22898c26b1eb1a1979918b87aa27ccf80d79c828ddc37991c53e4b754601122fd7072d6467105088f7711ad1bb150f2152f17d3c87ad08290a6d78f7682226ce56096858d4acd19fcaa0000021c000000b00b8db9f49c727ce480ba6aece934417f21cd71bfaf0b1d78a1a0c20b7d1d6251eb7051ed40f869e286cdedb79dc0cdf2e1b79a6b10024c1c52bc178620fe550b851b659ef80928cee6f7d16ec9bc46eeac8a1325be49eaac3c8536331e68a80023445d0e8a5d3dd34022adadbafa7a682523cafdff5ecea3345debcd52549a70a9f0772a66a05029bbdae140b12a0874051afeddcec34d1cbee98e082cdacf9b2237b8048c1a7df2b52e24421dc22ef5000000b027c67aff8c2a5db78f2f489a8973feca18243739e85fcbadfc2c008880b6b9a92e546f8281a0a2afa5a2fe793a0b613d2a4a6016e81e86a2c005f6c7a4a2b85142d1bc38f694f696ef3560d49ac47e9333846ba47eb8e52bebec449fa9b76d736b4fde6b2100e8512cf28cd7018c9a8d0b02ac79cf51db70342f3c9cdb203f80e1653df2f04a1d2af79d784713e559e1022359ca21d0d35f27267c68e51bd6da538454bf0416cbeb6765ec7ffc1d9412000000b00cdaa48b191189f7b8c0dfe369d6cbaacec86ac511d60f061e79644bd117deab034b8b03e0c73271a0cb33a7c91ad66cdd98e95bcf5e70c05089269355f62068a665890f4c58979b4a6d2537397c7c6079e3e9fd03af7e7b90e82cc3c9eb38b8c48f828b04846cea7200b4c1727e1387127bac420b48b50b55e5926fdfff9daad5bd06d88de48d95a713928c448e05082c5e9c019a86430b48d2bd2f0c84a7f04c794ddd3ea8d954d0c90ca3a6d89a790000021c000000b0011bae6fb7bb3cfd88db7fd362b8cfa905579b22758b21f74cf865fd0763407643dd34ba545b1c6c155068ea6aa218a22ac6c58079a97a0d0f75e0f3194a4f7c87bf07f3075fa0766f15f68ed2cd4c058d0b2887e2d177e9ae997c3ebc7543f222510c989fde34f2b982fddb0b22313f04c22441b672b8b5fb06797d0fa070fbb696d9c93421fc86e41135413c862e22089757541222fad6291edf3921646ddd2ba037bd41799636b8defbf33a8eab05000000b01ee0ae273775c8a8ed666715a399c3d2191e7185be68cb7b6c62223981b1fa5a3217f77d50e5af6fae9def72f77918a7ea2a294973463442c74b87f6493c3df16c2b2c253e83f90db3551c30c7e60526e49612d03969afa3179619dcd5b4b029f3304d70c7457c615ff5907dd4155c490ac1c2e5e0ea63fe3f637b6d91409b4d4c2239b0eb948142ef1610bc95d6635529fd3eb232a9929593f303259b19922e2260421309f535f9fc48eae81e15558e000000b0061e4817c7f4b065e999e07908dfb6611419d34e7604591ed9f7c6b01f66efd665844bd1d9ca026b6c29cbbf9d89ffc57048fc59105ec7b1b410eded1f60e84a9e95e51d1fe344160251592f2e8c06261953ef93cdf1075d3e704e22fb47867130ed1114ef8710fd83cdf3fc683a3fc416788cc313428cdf229551a562d0f590875e7a8b3292cce57eb81d863690ff6809ae63831bf0a829d3161bd9968c872c86c6a23bfae0a4490a03bdf2a61002b10000021c000000b001d45f1058742f21eaa9dac0dda9b2e62680cb7b13dade281e2e7a7fd0925b8f5082bd0030a3e0674d3f54553ffc5d90ed09f924d1e76a5c8738d8fd9b96ee0ecbc59180d8b880717c9d8a0bf41a4ecf7f1ab6476c64c47253762f7925f1b911be501541ec53a45d275c935861ebcdb70e026840304e0d782d2dd5b2be6ff88dd2cc5344298c03d05c1cd0f4cacb5a441be31af2a5b10cac94e5e61cd508df578b926a3b1ac3cd210f03a5fd37aae352000000b022cec5f232dd9f54bd6e4a784f3d3cca2a2f8d5f630d289209dbe90f605a5a4ace90229bd08921eebe2cfba6e2a7657de572f1d8b56f0b964823500cfbc7baae150b6d7526c745b02330bf5e5c3fa51d43996171e8f796fedd9519999cf09744ec2020a9d8bfc8b56c1d5eb9f5f22889224224f17269c0535c79ce88830acf415f72391306109082a86e2af90bb0b9c5295e8d7825468fca4273212469c3d846acb5f4848eb68f11500210d755c4492d000000b015b504f459799e902fa91485d5f03a8bc049301a6fc35afc332b21d9cb61eb8d6df096858973687b93ba1327937a2324de3ac56f15606fa8c98b467cdf73c3cf43c84fe8ce37e28ccaad555ad6246c141560ba67066da4c5bdb9db31d25e51a3c551728e2c53d8bde27d37146d4a15ec1c143ee08290888c75bf9f8b65335646cf731ae68b39c518d38edc1c173f157108186249cdc7a9cf73dc829676e3a6cf2a2c49557b9e8c151f406c2d86e8c6e40000021c000000b01c914c0ec8e2cdfc01dd0127146ede083936cd3d447cf99a02e892ac9e36167b467a755052e871763f20df92a33f303e284b4594ab56714cfe3e62e316cb02c423fd031b2c9750fecd3467bf955dea41d0fd10a2958d47e1f50cf908ab99c4ed4bc05683505b0deb41ca73ba87e047c4125ef251364f02cb3a950555cc66dff7dcbd6b24a587b18797492b4b61a9c2371ea49b029956110458d28b5a8b9357f21dfbbbf7afdfc8bb3dec7587dee6c55a000000b00be48c34ac14fdfc0db7d4a1ac23485fbc9e580a4bc9d8d3ce711f849c12d8a301df241bb630277baf4b0b0e489768e72256e94ea77a97bd654f182db30c7621654b23fb5c96a13aa223d0a89aff2dc35a546434e78bed9030b9b78e454659afbcc39c7f9012f8357bdafb6e07aa346e165140fd869040b958baed64c14e67bc8a7dc570ceffb34e5cb52319b4e45cdf18a827721db2e277684a9e4a14ec92a91e474c162a5f57aa2b4a0d5da9bbfbe1000000b011e88cbaa60d49be19d3dd75c04ba520e6904bfebaf9fadb1dda0304dfc4e7458b17dac78709bc4e21d6633e8bfe2db4dc15219bde9550454b33e1c5f218eb56de3daf6aa25053041e1c0affc77179513763e273bda32661586a1194df5a14514d1c734e186c3cf58a29c097da67852e2facb38893db8955c138cd18d054adcd271b3a9f11f02c69a6f57c50ba2c58ee1df64214c2ee2051d86795a3839c815c27a18ac408f84bf22a3e01b3b4ea867e0000021c000000b01afe1947cdfcd7c2cb6337535aedc4cbf3fa8fcc282cdd8c1e38c485796ce0d46b417bce3204f634ac91ed575ce6bcd4b7aada6b6bbdbf3b0ed674208bb16907639db9742e56244a03c4c4a48ba50910bb2d8d8317ff48fcf736577002dd4ece0ba222031d17ae62c90dbe1e3e5901ac0a841a2da5274cd7beae80b7ebcc8f183920373f595b0bf6d5ec4ce1ecadb27f2eeb70fe02137898f7a2fe3a330f0dfd32c2fbb0d219bd431f86fe49459ca2a5000000b02abafcacff40ebfcf6be1d54326874fd9afa738865b88938fc003f30e62aaf72e01e5705595fe30c412a652ed8903da34aeb65c8dae3010210e68d416b8bb40cb6eb23827dfbd4d5c988a97003d0922c739921564391fbe593101ecb479e3aa8838bf6238a9821bab17da66169e506f228060da8bce67bfbef9737abe444ce47eb5e60198d1e31a761cbf669907a90671330ed0c8f65c01a6ffc33ef04d789386003b4f1274ee120afb980f6e9e0c47b000000b02ddbbbfbd3b967705c7d0a111c366214063cbe292cc8e792cc0118590cb97f93a2b59b26fc7b0d798530fd416a92336109f39d845de6912bea7d4d8ffc06ca4cc2a0c59856cc8b65821c08582d7326a8f22102c22555cd4b31a264a5c7532c6a66af7970a01c46de3d8774332463260c17adf46b4d3d409e3935c630656c501bf5eb7eb17387da5a84a17562cd1f73890d2b16ad76f4be39e07f2cd397e13fe7dc80bbd49bc191d940e3ad1ea54339d00000021c000000b010b6fdeeeb13c8ad9fe6d1962fe978c0ffe2d7aa298c371c4fe59b3fa76ce74ddb875f9422797065b0f9f5097b14362391d08fbc0b37761f33154d0b9ca534577cf77b1d7876d82a2e1c8fc0f265e7a77c1b12dca44ac1dc7a48c22caa91347f9886109a28e72f8f59a29c5ba1e9182b01316635684a261d4de31bbc2e76790f29793b30b13484bba532df1e90c7a6a314d2a8bbfcbcfe0fd753276fda1cc983d1b0fea04c375ef2ddf1b2876505fe6a000000b0095d9fdffc47da80b48c225396ed5339ab2842775b7d8a284c1ae636178dcd7d9b2c26f14cd8e34e4335fad9a45a7d9c804628b9755ddd0c7cda59d1bd5f27c2ef735c3cba890f5585eafff17d7ba34ef0eb96c4d809acd1b9238ebc355b2b933eff0fc10714831dd065ee5d72aa86051769c8a5696643571ca9f38fa0eff7445b71b795aec3406714a60d175ebeb6ee24e5a335dd4252efad035003070e4ff1961e5b9338aca22ddaf216ece52f5686000000b02def530ac9cd630cd09b253d59973bf6daadef0c339e62bee7d94b25a27a7b707d1b1ce00a1fb9885b4ad19a6b8ffc79d2dcf82a8d8c1f0538ea1ede865b63e374939080fec0a43ef497f57f0aa8b7660b46c3f73b89809a93569ad9b1b606cd15d462740cd47649d633a8542d7df376059e81b01aaa36e70eee6c626a75034adb91f4d24acf586825179ef8b187936103e394b00b8648ce75f9a2d798801836cb8c4d626e08fa11c908f507f954285f0000021c000000b01b7a7f2b7d159cc3119c8e8c8f4938c6cd66a3061e17736c5b32ca43b2f4fa3674e53d9059df73a65397c0b410b50471bcafd7156e7dfcedb0f349767221a94d45d378af594b039a219c2653c645fdb67da1289dae2092eeb4eb6f69003f9a151517b14e937b4c419f376d82ba24dfc60971e14a801c7fc2db2583bf799e365ec6acb229b4428b44040e18d77b4abad616b1d4d5fa00df660b7ee6227579efe7c867ef4ab461b08cafe3456b5965ac90000000b02ab464f4e0202a4b071667f48a277e01fd2f14f0a64d4f4de3dcbfd05d7535319e34020f40e8bc5fec5b339d4b9277e0cc0f34fe0c227de726a9de2c13ec1e88dfb585bd33f697f8e988240c9e57008249cb5ac79ce438d3e8ce19172f201fa2cc0805bebf6b5a91c56edc64359e52e52a826e945fd2f02b2dba41a2f4db3b750a8ee6b46aa1bbfb9d93e65fe2168d4d3033f87ab1d21dd82339b0f5caa972183aca2b5d48816af4907cbeeb8964924f000000b02c788f2028cf7c1dd1117ff99b2e219ae3d0bb5563842aa631c1bd9a294babda0ce424384c947dc8d671849de24e90ed135d1c010dad9c83ee23d541b03a10cc31f3ce770689c90513326fa9cb3d7fa31727cdae8b9aeb30522a9226ab89e4275925185bd5ca152aeb8ed09fb5bfb1672f7740a7d3470579beec43dfdcc9cba0bcd2b323c8f568983c5212ad9f247de41746d8eed0bcfdd7fb0abda598e96cabc6134c4bfffbb495d6f7c3b53ed4261500000c63000000710000002e02e9a38222f55bdb7b0b7014aea024becccf2e14511fe28479cf0366f5fbf682333a01a00000000660fc62fa98640000003b259336d641ce52e3351a7a55291ef8cfed9598237ce525bfc2ac14cbd8eb9c475b103fe60000001358d1a8d2022b2de4265acbddbc160f521feb1e00000133000000b007478c9981a0a50a30681c390cc166f1ad412d1716ad30be33e797ef95a0bc841e4f505900000088dbf2d4ea3dd4485f13c12863171110f8338914efc6fd96f32a69aefe1f3fa01c01daa2c4d03d2689552697e152bdd29228e55c6f295bbe7ed17d8d8b429a4b625cde8d0d05f8180bceb0fc95f21f27c520ceee25bb01304842f49df0eda7170f621182e5fc38917b13fead08f7908867aa25071f0a7f05e75c4b809cf9fb85d470e13b06f9beb6ec0000007b134152fbbe25255f4da961b4a866aa377e73b406cdd9b7a90ed03f7500fb429dd89734b9000000533c149d34288f33e6b93b8067a3f27cf4eba9a876799a557c8928f7d4fc95bc02c268e18297981f6e7d7649c90f33f49ee41588f2c0322a3cc1d68f4b472905a6c6afb325b826254d256f960bfd04d93fbb5e9500000198000000a202674fa1e4d3fbe8b365900c3d07717929bafdd52ddd8c0db0a4f5c1556033303c3d76ff0000007a727a979b92cdcc23703a319cb4fa43ed7fb8ed12f7884f064e85a69061387e120270497544b346805ebf67c87860e083f03f1c793ba908c8e9402e8796927dd9393bdf8bccc201e1ac6c0e3731880864da3bb0342eae899325859bc7d99a556de71883f30970bb98719f71b969d10b7a7e93a80b151acfeea79f000000ee26aa00a2b83ee15f9024dd20b9609d24ab7870183d433b1c03874ab01566983fc91d0720000000c678594631f20fd8de1d7eec8c5ce646d3ebdcccb4eae40a24531f2e3a0fc511c5191927cb188d0a237330d7ff68c8a5705a754cb35c0d4ca84d4ee42ea56fbbd327c373a5e5ee440ac5bf9f41915d24680cd64d19ce0a66f117bb18a1dec67da31ac129b8e0d6b5d030e6972bb25c6d73dba973f820a8e8fd2b233e2a3a986f3955ff402edc78ee7ab71ca98e1ed89f5a69de22b0b50c89de9360e16c4fc5678abd8bc7933c8f12a48f69f82206d455eb6efd24eb4284a91d650956b6999d6399af4c9a04a33e000000ab0000002f0bbbd9d697a518b6b41c71ba260567456fa2f9ede24e764dd1f925a95cb2489f3c5baaf10000000705784e8e81c662000000740fcf1c8e42ac301ce684fc83955ccc2168041063917af001def6515e254c1a3bd0ef005a0000004c815375aa21fc76eba97bee9c23aa533be5fd661b7558107861dc9556ce5393a123afe9fec446526e138b973d35bf10829731495e771890c645a056c71aaef53fb5048389e8211469560e7e47000000ea000000790f0658da94642f9909e9a4d230d9dca505174736fc1e222b7fddf3c1b99a0ffeeede1366000000515b738c8d2e18535b6c0ec271b5ffcdf75155e23f7493fb974ecd1090e726b16487d3ee9da7232b2ac6f3be7506efabb8280e0e6be87e4eb420f1218a5f916eef05429ad1686223d564506b377ffce770b9000000692d52199dfdbfa3657cb6d7495d49665b93b25e421f288718b6a75cf79526f43bcde98563000000416f4d1c177577514884b130656fcfa0b9cba7ff70144736cb0a07d50c31f7591fc176cbab401e458f3d1d458c536830930aadf56219306e9373add19d744d4071a700000144000001041f669a4d4e954172f8a234620c5f4a56c864c8112129bd8ec6ec72680e10afb8ebec1679000000dc06c6c3d8d31c4a99cae61147bee32ea5f6f6000c770fc3c216025110128bf1db4f687da16bdbf51d39fd41466b71ae9f34d90e64b4fd9b58e493064f6392ba13d8cd2a5756ed5ea9c3429d9e52df2eb9a8f8442cbbdd24242e911aee08f9fd6f4f9d29a7b449e756f41f454af2bda0de7e729f23ef37e05ba6dc7b5dba86928175a6c0d99003676edc5b203a9dda35730572856ecb0fd3b4cfb8a261481d3a2393f7d095daccaad64ae2a11dbec3dfa591fe7b42c9ff772a2a0926c39997c65a8f0850f6ff2d42ce6ae32a087c52be43887845fa0755524cd87f943d0000003812fd2cdb5dd071b35458fd74c92259bd4486c1ca05b74d255ce0a9366f8b57346ae02c8c00000010f1c3d37eaafbf812030ded5e81050842000000b70000004c2d9005c63d3194b746a1d04c2bab984198af68886ca7b49e919ee247e27639d03be832490000002431e2f7c0865f02dca35bbb7ac03a6d4540e438697ec035ce537c4e514d99ce089a31beb6000000630951c28c5f8346ed54fbd11303717338e3d32a4e6bbd88f4def2020e5f66ec4f139bb0860000003b08d890c0ab9f0ccf404a6a838187a7a6e9d6027d71fbc3ba4f91875dfacdd88f8d9297fbe039e35d98bbc9accd931ac98e13d761359f262447b922000000ce0000003823c8401d00a2f2331bcde4782db4b43e23baf1df3748d939648e40fbae7dbcaf8d12c3f00000001052ecdc4e1b594d7f56be04163fbebbab0000008e1f9971238e0252236b481fb52eb42d90f0feb856bd9a32b3bf1bd7f8dc3f9cdf317b11ed00000066460dd69fe83c13dd8677da67518907220f10fdc1b8f20dd2041cfddb175eb626854c14c20d03dbc9e67e337f477f0c9b559c6c12b00ce915855fd146010bd146fda4988605897269d99a19674908ef987e1bdb04a388873d7e2d5b1db8d5cd08cb34a9f8ca0500000212000001220a5a9672500ab8543d0c4f4b493eaff6b41def5dbf9b530256f0415f72aab7d66a3a0625000000fa24a34d3483892ad223e45cd4423a0ba920a6eae0e00fa8a2a3e4c7c6bee1841e8b757fff333a22aecb1fe4cf919a59458c38b80f073d5082bf4a30cb80713d76cc1868e4919cfed2dee86b70380ab25daa3c5afc1d4218dd984284b9fb597a6b7f81a27fa9677be2c9f176c0ab54a7ab82d60b3bf3fd81804defa90e4566d8fe5168367627a1f7a0673b4abe4b7b6be6b90603c7148824cb38231d2e8c336b6d113c8b6a2ffc89ba46716671df6183acd0c266715d7b90ec5efec6f7b805205f0ddc48124029a699d77481f9f8441ac608cfc32ad54d963f483c8fb13336d889c77f2322352379082bb82913fc2e5ccb03d1881159a70b7a9acb000000e824bbd75b9d39c4bb037a14b4fe3ccd1db2cdf7e1c5308f0306a1be897e1822e8239c60cb000000c00004ebef9596822fa1898a90a6d5b794958f2f701d6e8d1ad0dd5d5a37a4307ab7c17398d583cb86f292d4778f3136e62450c900a1c9d22cb2d289b79ed06ec50973a3fc3f2acfda3c0b35635dc85543ba48b77ac5893392002eef5c78ead7edeb5a5acae696cd9011e1abd1adc1c3356bda710a1e839cfc47aba030139be9016af925a550dd1ed705477bb72958b7415bbb7bf7d1abcffc2e91d28ccb5be9f72b045665266f91cff5cd16fb2e5151569223fb4d8b59c503f8a6362281c702f6000000ed0000009629288e63eea9ecd78a34f74abde0a8e3f1cdab7a19e0ec1f5d19675ecf350b7a5852a9320000006e35b3eb22ab7820d19200519558fadd1e6d1a6160b329b1a07caf13ce3f35ff834cf4b5de7761651c3ef9ccae55475c26e5ec09cf41bb20ff3a742836c5a8013ca602a70d95c92bf7117b72fdc0bebb0961d2571faa15b7e5abeaebf4e1530cb3492b707afa36759c4bb90adc538c0000004f12efd4e10f217294d1a4185c2387aee5a129e50e3610d088788bff76bfa9eedd261bb2200000002775f6845effeb33adaba3d28dbae72d58453255b2709bec3c317413ed7f801894e46e930f1b99610000019e0000011b0d30f786bb0431b8a611fcf2c221cda56c67c469a7f1f5ccfbc797dbd0557c53ba61b087000000f3138661fdda3c31c2f365403249ccbad7c169fbd70d88f78b08a29966aab0e70dd5937e3153ef81870162dec1eac9b0841e80000e6d9141db44e0aa2b3c88836a2c726b1eec34373aaf9410d01885e11104ff51dc2155298f26c961e4c30aaae2b1774a140edb13b05c76958dcbbd2efac386b26e77435c1d04b97571bf9074dcce5a9d83e16b121a3eb1760d5910958a6426c0b85e82c2a6b503585302bb75cbb46decb5af9222173622115ce2dc5044f87f0979d785d23a1b5a5b4e18e9f9cbc9824f79cf20f80d7b738b767841f0a9733b7eb7b651fc5dbc34cba5fe57c20ec78e0c0b2a78170dad721a81e65bf9e9fd046f0000007b2cbaef9c64f74db0f7e5a4b053ce06d6b5a44dc25fec6f463b76e2b6c2ec84addc3b6f540000005340c694f07f694292a246f028db7d5e459afcaabc4a70181c11a450b8a03dcca236d7966ec706cebc8997d8b1ee66c0161056247d026f0d48d4762f5e6483bafc585e57e2b097ff21778bd90ae5c44aa9e055ef00380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b02c20d5d785915076552446a7b2ba4a51540b6cc93f1f4bd81707710f00565f0c5b7e655410cb5578e88e038010bdb5a164d086302416c158b2a92326a496e145b39217fae600b037a5e55f207bfb5a92537e53c1617edb1d25e01fa56fd3cd577dc4487e03678b351bd696359e9230f60b289b873fd3e2324be1ab3a1c56cbf343e2c6f257919e418e19c87c333385661e4b726c4a1e6a96315d6a80995651af726067a73927d051693cd523f68c66a5000000b017e5ce7112371a4cfd59ba1c31ab0caac3f5fee0d2e35d8a38b82d53dae9327bdd932c355840c996a6528517371be08c234bf598ec50e09060c0f79f988ad39232cbab93c6a6483d155da589e1c4d53f7b5519f38d20ff8e753aaf46944aca84fa7c642e9105107d7d3c2b2b7969ad182522dffc3bd2649355c87493d8fd0bcfd34f97211583365135a035f087d946bf26670b1df3fe5d49c6415587a1d3c22d694da26b900d5b3be938e16722cc4b85000000b02c7499bd7e885db02018d485316b95c472c4df9058e5e2d0fbb6321d447a8664844a12fe52b518d43f26d331b8b8248bea0435cc7b2f25d8d3ccbd49e3a76528937365428b1f994ac96f1dab1d0d4dfc98bb5cad0e69f02379e2e42c5837b0fc98a2fca499a3f00a5f4a17f7c68ab8ff2066ee8c6dfba341f6fa2fa3e250d32b42e3009e3eb006443b575d61c82a55820b7cbefe0511794ca79af1dd8e82951af5ac785813e30db9f95d533246dd78a70000021c000000b01a254cdc0a562892b40a34628a34fa138cc14e299ba92a182c4193888b8af6ea4d9f489f32cb24e5e3db017874825b5c2039b09393b20309706cead03976c3ef2d1f1017c7d0a1482c89b65540676d433f4e73edb5dc29ef8f0c6b958b43d7afd9e0f8f885a267bd3ad3640ee5c5d7292e59e6b875c32a28dc5b3efbad6b3e1ca86bd90f56a33bd08a2ab1f9e579e2460dd8ef584522ef624320bad566be667307a8a9f11261b6d3f93c88a6949e722c000000b006d23ce4e8480a204d9f8c94b85eb918a1c1c8919b80bc60895c2625a0ded8b11093017458b1dae70b8b9900565eb5759d2b3302794b20b4849ca2c51d09eade6236635137ce78b13c0432a26b3900d795d21626fa05fac6cc56cd703598e238a30f93c5ffe08a0d9afca15307003ca807d4ca00653f33c2b30f6c1c8cf3b7df58372fec3462d9078c52d9180b8246f12348ecd84a41a5c6219579cd920e7ee2a4eaf208de13e115ba3374f1581181a1000000b01905e6d6f9c014ec10303cef2ebe54f1b2dd89f37be33c0ae2d5dbae9498c1a4f3c0538d1c6170d6a416d7b492bef9da1768aa93286af2335bd040c53ff2035b00966cbb336464e57a817e3439d08f42cc17455ed785f5ea6615f93551cd7b2c07b8c06552e1538cd10b6cc36f6c869022efb8fa4081806e94f960b3fdacf91592790cf56463ec679d16b83806fff4d00dc8f7441371a11e21b70d425383c8a3ee6e0831172440af340dadf14afc14920000021c000000b02130c08b612afca113a365365af152fedca7fae2ffc822570e5b0645c9c985a35735d94e26db3865d2b02be3071635591093ecfd5406290a0af6b411c41a982b4a92c75ca2b33ffd1ec1e67c382ea6049f7992ef1a67494dae1604b906baf5145f4972f9815d4f41d452182a3588d9a724cdc53d56256c144705d86f9f81e40beecb47c878ec9f14afd73964cf5e379007e46e774bc526b3d0c943e5a00ba437460583fb8bf9631ecda37eb63a085c97000000b02601fbaddae05d62767b2cff321815aba41ccf20b27af7afce1eb956cdca3dd888d9fdc6806428b6c20cb2a4e10ad5b6334a7a8a544e824e74e0607ad9685ff417d1625ab00e4e27d5fbfc0f4b447cdb3c23e753bd8939a46e14356563cbf8deb5ac55a2b3f1b3c13fe5c66e4e946daa09219b829f8567ad288bf3f4c816e7e66f0c8d9c1c970bf43d9e42f4130a9a8a21282be52136f37bb599431930b4af08fe1bff9046e058441e7b8b0aabdf47a0000000b01b74d43b06c19465b3bc43b4fc597d52b1da40f1ea91173b1130070693705221d9f221f5cf20ccfbcaab553e06ebe51e9801440bc58442f68b20b6431b2af01bad20e906002bd8c5d31dc6e5566ad957a6fbb06929acdd34f8362d092cd91f1756449436bf48c0a9c38324868cb4bcf92c09cc047e83e8f295b2c6db49a464282792f6ca9be875215c14a1a4ba5a635717cd0040f152af196e7b65ad49ac844afc7a36b17578d0ef6023a87dc310d3e60000021c000000b00187837b26140d29fc0683a431a02c454d0abc9413b2e93e7550c5ca684969a58320fc2a41f119a988db4c9d9a5b20c3e6690708c64a7026536b7486319436353550278c11f80efd7042f78e9c339cceb04ac3733dbc82930eba121128485bdc812cd0b03d66f9d94d6aa1ca9f2d1931171a4235a0a11f3c89a6ffb22c6ab0d93eff1e96f832bfba000b7ed984317f1a16c5970009e744dd6ce49caf17b24640ad5b8359aca79c3e4bb811da156c153f000000b00afa0901d3cddbbcf8940a9c67c6fe2a94856bd7ed8409e5fdcbbc10b7837d1c3f0f34f9c116dbc5a2fb4049c983055ed9d00821e0e4ab871d4e43100d2f85e3474e37d8bdb2531543e640f097945d3c3174a3b621040f758cf7871690de38b8633edb9cd91b22ff8af4d0ad51dbf8022634ecef0c2ae27bf5cc16433da07b590a7c57bf390f246446bd285db11f4d7207c1065f21e630c1b25b1e968d188ea251f686c02a9912b36888ddc04c3aaa97000000b01c24511b3cb146c919c803ae43592ad40155f19e952765e89567b90792d0c95e01107c6552ba8a0c9060856f4adb0217d59a9f06154356a71a3fbc1a083cfe14e228be350b3dfa82708b4c293b455719c0363bd9ea718f3cab063ccadeeeb45aaae299957b1e0c53b0ec667b5d7bc8b8028310db19e38385e69fb4ca34607a1c94f828cb24959e88b5d16653a12c8dbe11055ca102b6d81b9c6ab61a192a03bb78fc01aeb0ce2302813f5044ddde86b70000021c000000b01ee203147502678073df7000752515c0ef0a4e54f3987d77f71dfcad4bfa32c033da91255a0a7c97a90044d3d1c9a9d701fc3446e047ecfc32ac91795619e838f52ee2c9353d1cfa13c2c084147fdd9ea205f145c1469c7592e8e1fa9dff0767aa116e0867fa553bf819bfdd045d2989083353f6eeeddddf6d84042c9272265ebbb0a9c8c224902dac8dcfc48a47b6711afbe17b99ac34ccf90bac035ee1f4e9b1c864cbf780ca02c41e40662632c5e6000000b015eefb047392b5eda0caf483f74badde59b26053489d27d60a23629a3f58ea5e6497dd1a9ac3f9cf57d3ec1aff3eb8023815abd05507ef00bbbd6f5a82b8695335a9c11cf6fa8a359130bb3f35154eb225c577a30205223eded6a076cc560ee3bcea184594db092a8f9f1b4a89bed3160d31eb0f663a331f8ddd11d5486fd505f5f855686fbcc3cf09bfde03f403deca0c52d508804e73330fa5439da62eacc0ed58bf767bf3c02193a2e57b7f8e0703000000b027f34eef608a79dff204ae2a2125361d5b8845ab52a27a7172ae6d1a5dc4c70ff69ba75d659f3480d107b3c256ca6a668ad7854f4785827770660010c622e23a8453b69332737d13fc5c0c6de744953e59d706fad7bd61b2624607eaa3188125ed9a0b379dd17a785d3636e57dfe290b04a543ba4960d2650f772f7ea085e2e6fc01ec5c1c54d80d7f31d963fabf42d32402ff119d300a40f4149fff6e80e0f4048a715d7f3441294a7858f13f5025a40000021c000000b025551ad5a5f2aacfa78b71e36bdd743a55af2f02448b81115757a25539feb9671ce8e6dd557a534129ecf18ea7d1a69f559c966efaeb83e64d0b18bde13160e2736176f0354657c37d0f6060af0b919b946c3d9e9807e1b779469e5c478ed02b25d285cfd351620c12948ddbc25e20c81e4732dfed67ca4ae414834e4c6a2f3fe28acbe05f3fda0b809ffc1eaec703d2141f0632dec5f58deee971554789de2d540ce0369127bd5b02c311b56dc6e818000000b02dc0a0e5d43d2fdf1c9e45d3cd917b6fb6d84fa2d8959fe0f76293801a83562844f1322721c9a9b603d936900bf6f7af3d045491bf1373f60a30f2744b5c750d930d642ec2acf7474e96f3b4f2f963b08a56af6fcb594ea3a2bde7b4644115865a34d286172a3268c57299ee25f8e4931c5add5f9c9c0e349ea3d62a2c7cb1a48b6bca5f7f52d4521d7c381eaf621bbf21b90eecdc37300a648c6fa8f492711de27ecd1f190ded175533363255298442000000b016d795b4a213d70088223ccaafbd93589001500f5b1daf0c086139feb7a09df3d5fc76725109062a2550241fedd5e55ce6d1b364f4addbc7eb00f4a2d202a4f1372af2db6c4add5e9a3f86318a9c08d9206f96d530b322feb6e3e4880da892bf4c9b8fba08d424a25156b6c22acfa8cc258545913fc6edfafb1e17bc2b2158ec90dbbb7deb90c596a7e0725402364e7501e343416a990dc074e61da5d5c0d7097e4a87b78c83c9530953dd1255688db10000021c000000b0193ef73ba8a853170a0c1b78e4a5ad935674b08a72b31da120cd48428b42baae610222970f7c49db7df332f291497499b39316180468a005cd2ba342dac58b8df7ded6a187b97c993298476950413ca506ee9c17e756b4466f05b6ff99280aee87ac8af4722cc491b6d2f2d009de55af06034a393ea93920290785dd434be0bffc6b7ce6d93135da0cf5bfc2b158ca91097497a8028042176627c9ae48604ba65264683fbd1987771c260ce59ea0fccc000000b003d268b85f0e2ff66c216f22671dde3778cefd192acf90b7a23e307a7750a93c6a81bef8272dd747ed3a7293f2b0ce77d76eb10d9b64a336c810047a37e7985e96f3d7b87b2fe47cd1ff980cc73dcb6910a15fce1c119ad93ec039ca45d63ae8cf3e57f8adef2750c90977cb90167365213c82297321d980966d3a71ba5fbf620b88085caccd14e91182a4ab98c7a13d03f073fec6cb3dcdbdb52bbcc14084571913f460f613f06f34c926467588c027000000b02859ff4d974ae26bce03e6281e722a1da06f53cc2b70cbbd4c6b4c724194cb04fe4de246bbbe0ccf932017647d9f30e7601542ca6c94fd8426b26abe4e60a73a0bf87ce9b8b20103913acfafcb0d22d17abe7f0ab2beac87cad9622d0a7026fa4399ec58d4dbd911c079d0cec5138b7507ac72aeed6de9b2b2fd7493140edab9b9c65ed817aa718f604d1d5ed9bbe8f616e7392647e94fd05fed70ee9ebb44f39f4a53cfb674c6a3cb85738787ee13cf0000021c000000b00fde4fe01016059e1c78894ddd1fe79a24ec015fad1ecbab5cef0e44eec97ccf4960547f41b8488f7acd9be1fb56735d27835e9b6803eb10c25017c6f152da380923c0e2eaea312baf422fd5b1b073eb246b93932b77738bdb479fbfa14612c9bc352761014e40f4cd8b28540a8f0ed0203ebafb4a1ba98997df3f7f443aca92302cf45132bf42d602634d99fed55cd60b0cfcfc4d7de8f6f1a3326aaa539acfc35f363ae1c1ae9c2f16a9ae0b153a6b000000b023e62326c2c527686bf06aecc6e35a8593fbdc6522b663debddafe7e198c06e3d8ead6763f7565e6c8ae93d8f432a7ac8db7a9583de797de997c209b91c14ebf5076ba37ad28d2c7e2333d8ed485d7a8e9c5e00118984c74bef31e449c58603180481e18e1b5eaced9cc74ffd3df9a861a223306cfbbef990a328672d1aa056a65c4d2676b28d998a96799fec9d2a93b150534e7ff1362bdecfe6e7e47b32bb7b674663b7dbcbe10f20fe38c0e40d931000000b02941833d5b28e027138131f03bffdb52ef113e48d5cb102fc8d2ee2526526c22e73d0dcc46aa722ecdd616ca5ff647b01d502ca5010f097bb883e3a9a2863b2fe6c3de9511012ca2cbd3f0e61e8a70bab220f575b9fbc8faa0b7aa980de9dd7d8a3310365c50ea42715ed4275fd64be71780dc61e88083f027882f0ecbd2b0eb852af9201e7b111863b37f7c3e1d38042846ef9f654c60752dc91337cbd9b4bfd41c542b9fd4a78522abeb0093173d2900000df80000013c000000731db0b1b2d155cd230a5142ecf8d49d39d84df3430762ea2a03e32657e958003cbd8518a50000004b78d6fb9007bc2a825a64007aa9ea62393ea4f5e65667f2e25a2781677eb8c19378abc5ef1d6976473468168eb82460f584073fea528f8079aebad59f63caf0b87006a64f00a873ac3b1ec9000000c11e6aa9065f0b5b79ba187862257ae2f6e0b430904b7730bb64c423ec4e54580ace3c2f68000000992464542f7e9f7efdb26e7bace95dadb17a6bc35eaef60d54e6a60ce766a152d02430f4d1edb368e9df41787919b4e0bccf06cd93128a74cf4133d8997d6f8f077718fd20097fede2b0c4da39ac37213b6218c5417abbc999d6045c24c2f8000e386d5428c7b54d50f66600660fa43f8fac4f09d0cdc36f87c80f7686ab35cfff40c2b8eb53d5402ea28d2101854f55f990081c9fac44303fa0000000fe0000006a05170b24e89ce36877dfc248cf1fd1e39fa4a07f05fbdc7030f8244cad6ef492df9b7d7500000042012a4b4f8beabe2c6168eb45ef0e8aa3fd65606e76f0a636462f7ae2962a0ba88ea70314210247149030b4b08f26b28bd47bd3b6fcc106cc6f79a1c3d285bdd052b90000008c037964d2acf5a528b9cb4c1c10dfa59f63cbcb30330fbad9b53eb7dd86d9f2293d754b4a000000642116b7bd6c7ab869971f219507d66e13d8268ed79cba6917036eb922a45ef0d4a9f77cb174c00ce5b27afa891d83fa7a6030c55fec8be0166dfbd48e6ba7881d693e54595cb3fdd04f0bbc2cca8c2e9256c005851265c0d8890c4044d535521d4a219e540000016a000000b225e965912227f217e182bbe9205f242c540bc7b47f065284586e4619401fea1148bc93d50000008a392837184e90e5678c29c0df5eba809a02f08a7241395a9be39192f029f5ac126c90fdcf7627fbdf7c5742d664d4479a8bc0d3206aff684e3bedf859220172d86e2dd0be10e6b145b2248a5a8f96ffe601b8950b74aae3b15217796a30f47b0bdecc506c8838924a6803d46f5a9ee0beac4d0d683b75335208e5a34202240fa21d04a9ee51d6121d2c26000000b00509173a1c32f4a0c7f1f136d1a9e29cf00612f458acc2a8ae904f2d209d511f549419da0000008802cc6d37357178f731c37dceb75ab6e2efbb4b956b1f466d7424158c8b0812f3f8216d68eaae38a6445b414fd32d683fb999c39e768f4f64d79567f7ff7715049e83404e860fbc1bb3b3d30f246a3d4a616fd42f8866b771ada7407e05ea77cf9c0d0af8b7a80d4a973dbb8b0596a4512c45d54fab63fcff4fd03bba06ca5e36abf19e7ec8b787c0000001590000003023eb0da74ea577471a10b925cd2943b9636c89fab5f2823c4e69481a2c702c13e49ffe420000000803160c0f401019ac0000012119cb12fa8408e77a4ec6ac8b19802c8bdb739cddcf4e4669b7a91d733685fa7fcad4f5f4000000f9d6eed8646a26472e59861cea1e33e44f23193b7597ed73a7c5be8e35aa8971b9204712512f644cf944994317f5feaf52b3af9a6376ef09747ce50aef463c07130bbf5b46fc518f04c47b96ab4a1ba5ec8c196673193a4399b907a3c7ad01569798a7242a84537e2c7b93eb0f52f7cbd1a5112e1cab6845d86c6581cff00143aad5549327b7302bdff41a8b614bd09fa56bd3179135fa1615b535ec40b6bb750eeb77bf8da92ce3c3bb2bced778e3d17777f9ce587b08c2fc075a155a122081e6d485512de93cf7bbbdb9a6e23e3d0f982538f163bc93f32a8255c2796f9379d42d4e9c7a25ce71b7341d16e717f85795f028454fef285718980000016e0000006029ec8567ebceeb032457d8a057d539b25bda41089d322541c249d586a6f4e4a782f5051200000038b94355e0a40dde1f0e98498a6bc89e567309bc151f605ae8385661bdf09d1ca0a17305dabb33792ab3655945d5712c6d373a8bce9c8afccd000001060cbdf5503bcb2efdf2a72dab7aa11cf98297c7d180f36a0b03590923861d1021a2d3b1f1000000de455daa0ebee4a12d08c354f41735b3109dd270bdc69e224dfa16717bc48f1e2cb725bd9c195925b24e2889b85e4d89d2940758b17ca55c0db7a322d10ea8c933b7a26722d6830d1629148573fc7c0698d46c410775d6be408f6ee97a137695dbd778978bcbb0af307b2b7891824330c2c691e0c618aab8507c377c8f1e6ca06b8ec7f67e35203d581e1a5e304dd4772399fabbd306f193418921a2fcdbe7c3009e293320ab2c2620f94b790ed714fbb2baa74d6dbcbc3fb9eb817124ff90f202276abbb1bc48436500bf4eb328eeae99b4f8c0b4fb9f387c67369e242704000000f1000000441c36c84ccdac199be340728250f17334dc94752a03f80be5b2bdbc0842e254dc7d9a04280000001c3b9c2ef64877a5dc4683ab7087c7124da5ea02ee191f943e1d6b60f5000000a509eafa8e0e94cd3d956d4c3aa2e1feda0aadb73d8b7a017c51cd4c0ed8b75dbf2ec200a30000007db718e6e5bd0f02626df33eea5a3d26d92db3c210c12b433d4c60a2162da3dea3d4d46e22eea866b173b4375eb0cfe5a1c6ed4611d26d65864fbd84b7109d005a607154c585ed1d2881f84adea4ab4120b1335192d8c3f06280b573f85c756b0ce84e3783d1e637dd6fd177ad0dea0cdf2e71216731ab8897731292451600000190000000cc13b73d6292dd8682d0aa57bab042771a55bf13a9f31469e28919d75637b44da1a07feb2c000000a430416808100977e80f84c4bbc51e5243d65a1bedb2fc971d1f00519aa5ce40b8d42d386f55665c6fd525253fbb2857ef6aa90161e124f657af874601079b0dcf4f9f7e076ca5028430ef38eff24e59cb130ff59d6fe84fac85d2f93cec9e2ec2f882d569280e64816e60ed15009b31043b46384b73a5df53298ed58b9caebf0050bf2af6fc572447ad636a3bf53613f6b2863108a8669d4187e209f72724a6e743fa3cad000000bc0dee4c76743a23b76001e13836e1f993a4d9dcff40d8393f576eb0061e7639467c0a4c120000009464daf4db247f8c33c4ed3d69545e253ec008a6a2d14bfb96169922305d8a0585213fc0837ee377b32cfbd7b55fc0dfdde73ad2c80fffdb423e8d08b6071e49bda984eba6296a53f229b649400712ca1c4dd5a6e9706de1e92f931c30c2f678cf99e179882f17891eccfcf9e0cedd1ad0ea393ab0d3d1e3863ee07c245840fab8bb17be62e3510ed20d36efa19c8aad8ec55f4206000001d600000119063755054d81d841075859da0b50cfdd00b34e314412d4d31d764fe844164f9f6768edec000000f111fad2a256a392fa15bf3d3738e8c4411460e8a515ccc4404a98c63480a7edaedeb4e15d4fc4ecf799705c3d3351ba2c2206be4ca1130780b3e9de6df4330ea28be39154a2176a979b9cc1304151afb81c27a02dd544d175466f63caec1111dad5f7f8a556b2a7ebd63236dbd69f8a9b3113e67513a4d4422d821968cbcd82efe28b74cfd3220d49db2762ca25f32062ab661e8b316ccdf121689ff9fd0f36fcfdf1f7977e387127168452de132e00770c4e00a169f46c2c975e7a92d76f3304696498efd754b07cbf6d1b5ef74cda7ddd13852241654ecddf561b5b893e61003ccb330cee6978deccae50457e3cd91683000000b51b8f4fc8b18cc1e110337f0efd56ffb0efffec267d286828aad4c7ffb03b0e196ffb7cf30000008dc6200f86168edf44b2792734b9cc54323f5b6a00ae24a1322eb3a7a77c9f7037621ce393d07868bf617eb74cc85aec692c788bd84780aaf0a77aea4b0395a86fa199dc0431354692d92348bca337d137004968d7306d548186e11c5578ea743ad5e2e5ece12807a166422a90bbd2d5dae71641f9f889125f36003211b23d93cf8f5a298a7bec53ebb60a3c3fce00000108000000d0182923df4cec1a752362ee330d73e1af8d9bad164cdff69703a1751fdae31762c8d758e3000000a823f9d61e0c5693f862bf3dab31abfe0bd90ccc4e403a31acf0f0b4d67985a8cfab22d3af87b500c9e96c5fa8c49dabcf7b975250980f8386b12cf3fd4510f5a6ba94c0c55311bb119a471037793d534c1a8e89fc6afcc06b079065efc65c0a4bfb16796a1fdd54bceacdf79355654d2a143d7e02a612eded5f9f3afa72d7bf4a8b007ead22a3f9a304309eac05f0dd58bdf92ef545dfa4d5cb273e477fffda2a32d7f6e0f73bfc180000003017ac6f169aa0a822270b188d76927fbcfd332ede3aaaf9ced702fac5be2db650d456651600000008a59b27e24b61a6eb00000152000000751071d49517fddff0d7f7904cdbdb2b0c96281da2d88cb1e7a9bbf6d9689d93e6ddac68a50000004d76e8b338117efb2f76c98cc00a612e4e61481a6ac5021f273ac96ccc18f4aa6b26a687b9efa63846b986637860f702b8d7c8406bb725c9533224da9da850e8db2e4b9c1b9e07031423f4b06fc0000000d519ce5e05c6c2fda766c380b92cbaa518e05087cdf83d694f478e7b212f4ac0cf49e1f3e2000000ad46bb1fffe7fb7714275a340d5cef359c994c6321299bd525fd95adc4ea15c14f80e01a53013ffb39089a6b6f5f64b29e1c80293d1ff5aed7173bd8b7626f513e6efb2ff6ee9d01987e100263ca8cf3b7f2f3d6630387957029cf31d41a9f530e9d7a69cd952f46b133e1d07e8087c5d320c553968cada4a1c042c9cea7db484e046595de10982751c2adccbed30e97682e3dbcc941fcdd466846878ee533731f2f402dde2bac1c907d461e749a000000b0000000321c50ddd4b60a6d02f440f0b503bdd22a8a00c6177bb56fc078c9d3ef6f27c17855c5c6690000000a7d6d00fb863606ca5f55000000761239e92d9801c8058efc4fe066f8c036caa530076fb1d847aee25bca8319a0de4f5410450000004e906ff6bfdab8bb353cbd9039fa0cc0f9dfe7ccd151e267139b6d7cd3b3f112a742ea17f7d1e0e382dd92e5f0b46ed605422de7a6f823c2c8614ba5428632e0fa7f05545179ffae6622cbe5d10e14003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014fdd2cbb10739c20c2925482aea56191f19e821390fd434083e83d15f7de47ee7944ed5ab1f101999c2b8035bb331bdc056109692ab933d96105beac16fcdbda281912ec98016754ad7bf962a6e65174059d81d574054b735ef54c68738a230820cb3f295d91c99ee196bd7c53902821584a4e46bb517f7634cba11776617fd66a5e4d4e552b2bdc42a18d40088053301d9dd9bc2e465f87e4603136caac7771f3c9a6586269d30c61e531d34cdb220000000b02b0e093c9b39a2ac1bee51876c77a0d3bf3741d39034bba7cdb357b87aa24f16aa9f6f5cdd8620e136d065f878597fdbe03254f95607ecef1b18a5440b11ebbe0068e9605a53937275d5c63e1844550b5391b1e965691c485a3c8f3ef1bb324a18aa8691ae2d9bd02ce4446d047c63c314daec1b4af6ab61774f4c5c98bda4a1dc74bb43b996b921fe11af9eeaf23e45030d21f5f36f802048b0f07c0c2fbcbeee28208b89773e8700b075d066e79977000000b01d1e562b5d6c89c542ec19485a94729c3a04d84f505de762a542dd650d80fbf87c04b53f95c736ec6b7da8c58415cc98d1c47cfa7bde48a1e6193862ec6e5f238ba35c677cf229fe6608a9021707d21a260dfb582746a600a3ad389ac03fb9b0563042d115e590e763197e37533c7851057d73c03f5802ccc68624acf7dc97f4e45c5606d95d568fb82d8e18af760875002d9b50bd75864ade12b204397bd7b9d9d68d3a2b667e83d6e5a757ea4951160000021c000000b02431601a9fe32bbfd1cd2e3707ebd754cca72ebb79fb49ff705c0ebccf13c8c35796a8d462f94338e3b9b78d275698b5ba0308085f3075ab678b0a6d5782a5622ddb96a2b470ba2d33c09503401d46dfd13ff179190ba8183a759bb9bfde0986bea56527833d2919e13d2d82bc416555099715b44d7198a925d74e2093dd4c4ace4fd64f3cc541c9069043d84dc79ad21adc8a4359bd0ed4eccfc2ebbf34f1bfa55135bd3a36414b791d3470481e5bfa000000b0224115f75b8a729ee2ab0568d1ced4eddff698359adf4d0a301caf21d1fd747bfc12cddb0c8cbc9d8e43039b20c55ddddac6915d56418537e6037a9d23b7e352a01f65c3e3b658e3067fbc48cc57b502fa3cda8a0720787b1c54f665844d0fa1fc7f41ffc3cff32c63fa2ee2131024882032519ec00c222c28719b5c6671e4f9dd8dcc85b859b9fc56268aa657278cf6118827867db047cb625a1dd5f0f0f4f3716531190fc4dc5b1f8b4f8a1e44cc0b000000b00043a6c7cdc1ca7e814c504ef67597ef2cbce165ac226d9624cf98c580d766e0d46a64e6bbd2b7290185111d1af238e69e2bbd60283d5005a94953b0663b2a7331bc9d9f44232a1e2ebc90c2e06b4f767dfabca605750f77ea3c61ab00448ee89b940c317121516ec0cd8234e40dad4a22b3aa36b950708d1bae87ede81eec461b2c058d282694450da888ecdcd8572a2962775388ee20afac6ea11abd1c43464b4b71d5dd884a89f2f2668ccf614f980000021c000000b028ad6cc13b022afbe3efcbacc4d6d7936224e0b6c7ddf9e327f4eb615f225a0d0447b799b6ca95dcd412efd9d839952eeeb8a08b6e16cc876279e99e9aa4c53e5e899ff2161aae373dac5a435edca7a53763cac470d9f4837742dadf05a22a5ac92acdf51ee70f2271f72d030a4f14ba0e85ec9ab592a84507a2e1bfb44402e837680b99a30a10f1e5c6e5b2d6b7b19e2c7ad4f84d6ba6ec518611ad3578faf6e56edf705fc4a23c0ea51bd620c3ab40000000b00d241fc3d9f144b9284f17ca7092cfd4209fa513abcc0cb163982dd6ecbed0adb5a7164b0f0253ef3ee9ea0b720ada9cc089422c485787eab4add7fcb0a73611889db4bee2fee3a958159ebd066126defdf293e8250882a3aea27b6da868ca168a91c3602bd3ccaac7240bf4b9ecf01e0e10a3fc86062b98fbd378b3d40c4e12981eb3a2d34bfe74456a7fd4774c3f691446b1138426a89da4ea98aec4a7cb3839251cfa5954ebb998f707914b87ad2b000000b01b6ef917e2425915fe07bb65b037ded86269ac83e074724a6a9fc8cb7270e91f12144ea4daabecbbd138d01cb031af9abb1bbe07b46c1058335204559f9f4a96671aae29589c48c127d4ad920f9e0b5f86a1b64bd3b664a287ca0286cbc10e5d81a57501354dc36dbeff8dee93a1b00d0f71a484140367c2bd3bfa5f5f9acf160c8ea93692d3cc8c9fe9e9561a583d992fcbc7aea5f5ad6d9d0df69ee97a4998bc468358021e140a3ff50514655ac3010000021c000000b007fea6e5e01d5897d6b0c0c83bb87c3119326c9851e92c8663c678a412a04b491168bffb2fcf110c974cb0be8e9bfa8077da77fabfb1d63ba90131292e0d68411bfeb3b848a93412dd2b0f19308aa20f01f8c4bbaf1a85f57f9f0a600e9f1cad908187b737c0e94b201e71aca1efe829103710a5464e151f34256b9ea19572cbb78b5cbbc08d355682ba0b66efc0d3a919c2744feddd8aa36b698fc14e2f3470ff12959b6bc0b32e0e59f775f47deafc000000b02036482affafcb7f4b0cb82e97543d322354040a37f061d590b148f355a8f3440343024f08693800ae1b4dde93419fc9a93b16fd466ca775722f0eb4f2b11bbe0dafb881c6d7175fc9cb90cafbce8db4fc2eddf14ac914f3f5599494e72defacd1e6ab58e449c33b9c251936dc7cf6ab0f83f7673027ad8de18b56a6688bbfcd1aefc5565ad8296f36e85973ee5be0d6172bf56bfc9157974d4dfa26ba023ce065ff9f2369278fc5a6cbc981e471143f000000b002af7aedc76f5651864b7460f49a0ccf16e52b65459a9f6ed121712e7fc35c29057ca0b658e67e1c51282101ab76831e7060632b52d5f2d8d1cf6f03b892ad7961c1dd927e8d9fc19ae7826d5bb84307dffc93eb9ca3173a7f464740559e95bd6adfcdea2d0f45eeced62a98510bcbc72e977373d2c5fbafca57c4906b5864b265b62c4372b3cedc4b806c575fc2ebc30db2de461b7d09ceae1a9cacec23cf50e15bc169c95731ccd6137752e10619970000021c000000b01839f21664debf8443efa60c4d7ab58810c0e8d52ad11e988d162f72b5607b380d9f2fc3c6dca8cb99dd4b80a22e6271a2e0e0c3353f6d8fe436764c8b93db26ac68d57b5eeed1c6240e357e7cd6b58222d1e732df018214ca6191f7594aa728a8157d468379cdb885fe6b783a20ce0e1a63436591be71024ae6f1dd86d5599fa969fb35b66bd45f5fad2cdef1f08cd3130813b374bbc44fde01cc6f042195089b3e8a2e99c832ac3b261f891ab15327000000b00b49872de4c6c51bdee16da4e542de3215d14a10fd3dc4a205e46548b82a7c38a222fc423a791ae55d8801c06ae9cc6aeff5bf8565716dd14b7fbc6b94090aaa7a184dddb081e7d02dfee419fb0a5178e90bc87497353e385fb8fde0d123c14ab6b135d2c4969242423fffae3ed88a1f169a29479c28bd9130f53c8d066865a084db0c0fada549b5046f2a704222760b2f0a30139b854e649891dc472e4948b64152735886cc59bd50a5d9a55195d178000000b02d7a64ca69214dd3bd8d9f4fcf6b70081a01cf89b7fad2603a172f60caef53f1f012deedafa75542e0d342ca751dfa323d38910d42a6f866102f51879748eb5085b8e5bc9ef74b72676f1aab1a40e339247c03d0e0601b77fd07b8fd0f49e603ee673ddbadf5cd110c26448ae692e59a1b02269b019a173ea9a1def4c2df17bed94d6cbf5f967a901c39ab1d1de3933b01294cc30596976196fff364924a384bd5bcb7bad44df31257bb6551b9d2d1180000021c000000b02b630700ab34081a60a212323b9f12511699e23cb4dcde98a597bd0e4d7d7ce38069a835b6c6f6f9f6eec3ab9b7d390177e3433dd90a904673da187935843db162a1797b9636dd07af381c6eefeb67f12e1f2299f83ed1bfab2499dc00ae310155c7a78f7d72023b7ab14dfbfb720da70141a3770a3b7e300074ea70b42e142d867b12ca8073be1fc528eaf625066f66097d74a1be076de7a43707710440a8cf7ebee90bb9ef9379e54316b27bfda5eb000000b00ce3ad1cf7f594412949dc98b40f4f84c2f5e718d5d68e3c3fd5d7520eb5ae80524b8de138230f531bcc9368da617fd8a598fba6ca8130cc06cfd60333863a747c84f036094a52973339cab94453f2f043b2b2b0e50ab619824f25d88828d9995e039b1a2adee777f4dbbda8654883ee2977adb8e44c98cb56c3cecb88aa1eef5989b9739500f63d61618ff7510ccef61de609ded482e210a6996b3b7b64b73b01b403fbedf19fe77dea77dada9e65b0000000b0138f0758de36c498d8c61775d60ae1d50a3f36f373af656c93261b51cb5c044d03de1b2290f253a663814c4e69a1dc7552d74c31470c10fe0b767069dd73d874f214c211c047b9ebc90321e3313a446716f6ae26c38d6c9263552d1e700e41d9565e53d4c9969acfb989b94f65b8dc262ed204be569d3070a1f26944243628bf22038e6194fc115ea207c0a595e63a1b224d9ae92c6aba1c22eaef93c5beaaff07e24964dc49e074f699ac636e42b0c30000021c000000b0059116f008b6ef6b326346a0f55845421a711ff4129baa8e39c64d77401fe083df838f4fc65b113903adf022286d5ad6a7ba411f7a656b556be41a94802c85ca1642265551a9332cec05456003496e9bbe36f005abad06a902149a8c11effd2fb9c5f0609e3b07afe9312511587975c72683dd76517e5e13edfd59ffb4fb560679ac5af27bb45566157a43a04f6baa731e756b101c24bde60247947356a546e03f7152983cd3557c482b40d9ecc01cd7000000b0243ad06c44efaa685f38a6a988a82a64bfd021a88968dbeca332a11db2662de74e508bf80da95002aa96a4d3fbb9c61a24d4bfca7ab7cc381261676fff88e03dbf7c7550b91c5099079728bf163f6b6c446e9274cc1199df040101ecc962d950083b071fbcea11b26245c233486c62db1795a5d0ae06dc797d6a9a8daad7d207fe246c9705c1f6809c0ca94255801a4608a74eb8a90c1797ae6a988d06a95bd30bc1718353ca4ba4e5a2517988227a0a000000b020e524b90a312c220f3ec3eb61eeb40e493acaa77be86972d71650e74c36dc8e7fa35aeadba106f558bf255c69856dcd6ed5f6258a298b28d57dc7d8f53956bc9b263c23318a83839e3edccad3b131c5cb1f5f9e42e99fb2b1a240cb593bc635d4f634df82ab9bb844b0f37b101a946f2c92d3a2ba02aa40d852eabbcc4b805b38e21cd60aa4d05bb36d2701d68f5c960f10c9d067ff590f778c34012989047428f821664a3701db77cc68d219c5d2d60000021c000000b02022f20164903be8cb79ca2b320d82581f09937f8dddc77d7103dcfb419b82360f3ed89c00316a266cd1d2b9674a74d20f1074481dce7115c0d24a2d3ea99d1ac4855144b7e53ffc0b8dcd5aa6f7eaaea57eb7a8c247fe74c7c1c97f7f5a0c152f9889c564630f7d7a43e7e9fc0fab3204a9cfa861c08c6bcfdcba7f0949b5814fbef32f21c2477755c940bb717dbe4f011ade6f04dd778c9bea2e691b6df7de5da7667fafc77a692db8aef71eba5764000000b010ad3d3538ffb7544d95a7707a40933d123433e46a2b09b6336d66f1b6fa171ff22cd536ee514ba5b0e17786d1c7d826284a293757afa404c519bb51e1440254473138e184415b74a9fd21a7d403379bb032a9793d081f8300a29e20d5154cdf8112ab163fb7942f435529133bfaa2b8132d9638a7a8b4981203e8998d464543208d0545c2aefb2c91648d93a2a0d94c16010723e20fb75081fcc65b90e4a106d08961c30cb650a0dfd02f1db2b8aa05000000b00f4beb9f6dc48374d54fb38120b1a63f48a16273ef1f5abc6234bdfee8978e02b061aca9838d3192cd1a2591a08a7307e0af09d351bc8339611100298bacb465263ba329cede6bc31c76981af457e1f547facf2fa47d943640b17e67426535e758d6dc1beda7a470756420dd87689fe81d545c32b40eff937e83bb67ad6169f6a69965cbde11b0e046f6e25838406a54265385763e147bf2bddbbbed33e6df1289b99b9d0d2506575df7ca62beed420300000eee00000169000000ef29da59c6062db61a3fd3cf61824cd8714b8df76c46c1409d7620469cdf5c55846036c621000000c717223c618a15b86043c40ff22656da1a03653a3361260b7617659248e7e9f81727fa7234fc67eb09ac58175d86278d9adf64e32f62c27a2554570f142f8f69710b59a37d4535c22bd9c16b1944257c10263e805cc63236ac69b17f1a3da7f7f9673a5c24ee0c3aad6d96b557386fb19275f8f894d63017470bb873423deb301aa3b0b62de2b33814d17bda689a5674b7105a46ee79f667850c8647addd573a13229a80fa7776307fcc3ba14e1cc7697544f9eb82b7a0d676e6e6ed7e020a78a011803afaa32c8300000072034aa1e001cd2db35e1e41b1967b3d89ca134f296b1edce23e9e466e0b253cfbff6b6d300000004a3eef68d38f0cf5b3e0e490b691d22b60a4908047d157c0fcf995ffc57d2821a1adb0b1d487f85b372265cb39894caaffaf8d0fd50b9212d4d88b61a609c2d32958570d7157dddde744af0000017a000000572e90aa02c3e3bdfdeaecee09008ab1e10f979d87d46be6996ccaa6ab0d7eaf7d245086bb0000002f9899ddd72b765fc439a4e56ac82842f3a81d5052aa941bfd19307ba7b35dc3864dd7c3c2b33d478ed9472d46c8e5b90000011b093575631d231d5b5e1991b19a8f412e4fe1c02b948bfa9b2f7ee8df7e4d5d4f1759e348000000f36f7db5db9e33203d99f40a3acca6234c9891a40271cddcc3a1c64c8d89544354e5fc4e9941cf94df2e691f28441c97ee01d2f07e453a20a77fc60007a506a61cdbb3d0d27aae90f8b25777dd338a0aa87a0f82dadfb2577885ac933162a4682e698e0678ae92f501117f44f1d3cce608db40d697b5e84de01bf65db17a447e1fcb9e8179c0d7ea8e45673888e28e241f588e2cf61e67242ac1c037adb914023ca712a5aee7019198522951dd73cab45f07eeab30447332eb76669c5aac024cad9dab683e542b8779e2e8f44d3ca4fa24912ce947d9ae9ae5efdc6b9cddae532aca5d761723761b0bbbc1a42ca3de8430eb984500000127000000420aaf3d7a723f8ad0a6ea8bdaf1834892b1e98a4a21f6a1629b401feaf962db554eece5480000001a262b378589ab4688eef7395a9925cbe251782d5eed613fe0c78f000000dd2cf3672dafd30504cc81517a77c89f4661bb2643e44140107531a80f2e0251d0a985b937000000b5c955ae971a2bd92cb3cd438b28bfbaa10d0d2cbb90a45637451ece3143e8845ff11ce88ada7a472b75616ce2f5e1a45b3dcb29af8204bf36b646bf071dace4d106fc019abc73f881f0748289348248b80ea7e27cd2fb337b8349691df74765cf147778547cb52a36fbd7e89b8ee48c9cbeca3c884c02c9907cbfbb8ac7a28c91c08684693b85de00d406693926d5f1d6cf83c81f0602745474d33ea7ed623fbf8767359225601d5729bc86165c70e12be3eb2411010000011e000000320ce7b0234990df87beaf4f79777d1e5f23ba9f80cf30fac41929d7264f3c5d070756952d0000000ae00c81104197c849a002000000e41fe47dd5a991573a2fa3d4cf901d20619c67de269e5277d4968b0a4bd07b12dd564f10e6000000bcb403de96d87cbaa69c3d65970f2f03a403a08a5861720add1a0fea7d5524ec042065ac189b50bef2805c5d5a82c52a31b44f642749e6b36fed587097b7e437d6ee5ea5a353bf36ee28dbf29718c10f28dec1f49491de36fc86024e9b5c6324051eb812d43277ed25ca2d31c32afd820082e8283f056a5fe244e4eefc96b304ccc3e659cfba1f6e16d956e94014e958e228cd947758e73317272c0e40f8667966cce104934e9aacee0f577ac01319f85fafb23bc1ec7315f551f85d24000001a4000000b706cceca38805513a7dc125ada5f382519ac0a35fa9fe5f430de22d83c13b24338822015a0000008fd3e8bcc873009814f97a562a6b2925ae786f92b18fd771eb8ccfa2739c81ed7e4d48db442abd1026f272386dabee46a3dfe85be5adf3e2f3f8dac759a90f9a4066fd061ba8cbc0215d1ab74a2b19fb1ba65a0b3087ccce0a8cc74e3fb912505b357284af45c46194108a092b6a054c5755dd845d3102b1ff5b45a56b6c45a9b6ec36ee2934444e74e096b98534b97d000000e51b587d4775cd778a6f86b793daf88ea2847f3631613ef5f741be87eb4cb9e2417b50fab7000000bd8e011c3fd6fbd5e528d4620004a25b3adade6a5c7a9b9d191141fc1120da34c6a967e0342150822af74df2fd48b2e2fe7a3c06285f87cd4f25c3bde7c2b30310fe55682b93b4e01528972529965f0d5bf283e270b7b97188d22343db166829f72736a873a48c9dd6cccb72e3c520a2f99bc70a051bbcb6579f7c2f85056468371e018e63f1911df70786a06307c821b396220f92564675671d6cefda4d7688f64e7afbda44eb5fef15199421bda333911eea738c386fcfa3ea01f84dc7000001bd000000b903136e36ab2b2d8ebb01017b5fe5c9a527484ddeb2082385fed21840dc6cd23380dcc02100000091f131c0ee531ded2a602e72f01629fd46c8d2eb5a905992f554109b248eb569df24eff4552d8e79c29a54ad3ce8b8cef1b6e767265f6cfe55cd43b4cea3682ead1275e0895e2bb3707c9598448c6e2d871cf1fd3341cc33c126287500361569ea2ece1d1c39d02250c4c72defab58fb3d4873de40a3af07025dbcd841af355389ae91aeeea0604f2563361950cc879b979b000000fc1f737b65169f95325623fcc87703cf233601ecd2c3331143b2d9569adfd350fb46f49fdc000000d4a47b172a146662c318f0ca4f314bcd4292847be35911af5030f8f08934487c0177e45a489227851f2649e661d0142621a1ee4780815b5b0173f05fad726a4fad9bd25419939f5be703359638be08034f4b14c18bf7f13e08619806537daa48553ef3618d68c63bcda3fe6e2126c195f9a0a568ef3693e84182e946a5bc5bc523a156cffa3b98067fe8e78db954b2bc4031a5ffe7bd97e0b547a41bafbf339e2b4ac1c6aeb7999cb2e1435fa865e5db17b67ab9fafcc08015271b1cec49613f007d9856e423be66e46607ec91b3e357e3fdd3d1aa00000121000000ca117790d97ceb8310f16cf60b31817dbc29d12da2d46b6e3ab1cdbe1acca634bf4097e3b1000000a2c5feaf4b5e74c70eb029b31b0d0e0b5c743aacf98ece5d3976401224e187fc2de9090028d4d5f1e6ed6d8f14f34bbecbfc8182c90d15b784e4c2375a3028f960d334ca577f80f77678c8a5beb66a79b9f572fd5b7b260a3ffa1585b6a9f5440d340fa97eb4f5f353d350fdcb208ef29c668ea5de02ba75ea70c02644a03fb8d5e19c95e9645dd2e4b8bca297132d9ddff60bb6568509f93525331ebaf8164bcf68ea0000004f12f617a0eba5d50e297665d2bb0190e4332d65a8fb29244473847d5fa6e5d8a0d8040e5a000000278d819045315b7bb3cb3f3c4af6eefa064a71bf9dfaadfc13379512005bf1b15bab7d7d7039e73e00000151000000671642c53432c2111ef6083436096e82f3c3a24b6170e8445543f87d75c93c24bb1df270110000003f20f1e8226cfba677512bb6801b4ef8852c6a964c4355b5cb7e76f4ad578019b32aa5e283a12285df2f6cbe1e6fa47c08d16661d9bf2790cd1a732351f11edb000000e21f7202f8284a6a0ac94ee5eec3d4505d337b8cecf918d4fe612a9b5480f27189c156ebee000000bab62418bfaea75bfd74d9cd3a2b8f60c034909aafe6cde28b4f75d7d34e08519de749d6a8ce6c9281fb19f7185613b59781faf7154b75b721cde8ec372a8b14ce6b805734948577a47c897e70feb83db5dca35c96be5c874dce649214d34b502a6fd7e7eaea2526ec797a0d85cdec0937a75c41a5c2b83490a8ccb7a951a62c5270f14c1875592ff8205803ff670fb37ad92eca55970abc0f2831f880c29f90b567d28b42139fc26f965cf526532e01d3db720281c8fa7d3471c4000000e70000006412ab253fb0d28dbbe57b32d1787f74d8948e239294185b9547eb657ed9ae7ce3610b3f530000003c805ab0af411e6c0bc7d8b4a47afa711430fc55aed5a214da6a0903f36b6e7f4b673f7ab754dde7ac8c9fde8dea2d13def856354a3dea3b85d7c114440000007b0bea06b21b5b53edddfb58e4ee430d8bed330af63363bd76879e6db19b9266cb78bfc54d00000053f73a6640ffd661308d6b43aa64ef7017daa10d2bdec48c4308276eee7bbf4cb198de87589b506d2a7557bbb7b2b0d31d9da2f84827ac439d8a3b2df18825e33082a99391799cf86cebf6f757885b27b96697bb0000017f0000005e26e43499e82cafe44b4bbd1af8e3a36e15a150b1c0ae6cb1e24e20d78c92d939e391a40700000036496b2910e435aeda6f0a0822c21b7cf8d26fecd92e7b19e6315a983ee620ccf5035d2d53320a2c95fd79de5b5e124a00cddff63edff20000011923e632232a5eefa2d08ccb4b46c2a1e56ce2fef400f721cadbf4aa5e22db57da396c6e1d000000f1f81a77e21cbfd7ce69137aa67bbe70dad9eb09ddf4bfcf34bd3f160c90a5e65efef44ce2efd26dc6a23d78fc8801fde420068b4d2e130021b27365ccd8a01c6e97017825c81d4a3ef7de123a205f8e99ea6cc03590cab264d272af439692a6772038068d7b0c81b4d566557789208c74467975799d28f01ae059106e5fdc4c90d099589b4b79afd4fdbf8d1af1ede76420b13c4e026ce57e42dbbf5c1708efbe5c77f054b68e872c2d64ae478a92ea8240060e15408853c723ed59385a3b27067de1b7cbb0a7364320938d40216fb949e6ddd6960eab3f85cd605fc055220594443f97d3b50fb3277f336e8deff13fe6fb000001610000009b24fab52d877b6277c855b9a9e86eb494dd29e75ac41490958d49bbf652d50dce61113425000000733f3331948cabbd1119b8c4209dfaa86594fe0da89d208dd489d6ad26270d685a3c9e3174bda48beb38d294a412e2e4b293bfdf7f3b3231dc9a931aa80207713c1f2ea008245bed0f7896a774b04469acaf4a0a7ab3baee417f0a513d14c364a5e021cc8c707081e12b1abe469ea6b830310e1d000000be26312988bcc279f409cc5b8ece5232bc28f319ceb6d7c6f4dd491f81070f458a365cbe8e00000096a4ed3641bdbf3889e6a5b32c6bc4858b3df5d03363559e13bf1000f1ad482638134092e0f2e1d9491244d5c5779e9c2b009c721a01f1648be79a1d13ed5ee5dc21c49cf2672e90adfb5858acd79e3b0d4da976e9def0d57d571aada694539738138bbf320fdfa6883bd2254b7f43afcf5c232df4ee36ff4fb7926009f1a836390aca966a7ff0314c0b2bc98d4237b3fa6ba662e6ae2400380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b02a213680376bb100b1bc90b4a245fe7d624b721bac82445cc3e53ffa4bc7c3a69c704d3abc08ea1f34e6487a67a2b15c48fff7475a2447df595bab38af7909ceec7ce20d13339d3a433cfa14289e423056cedde52f627e86c876d5ea719b3d40cdbe9503c0f7fc154d24cf49b5ca554c29e2a8dbbee334ceebbd23231bf06fc7aade7f6605814b3ef51457548fdd711001a5a9bd6f632e9d5854b9aef2ea5d080b18af2511e21b44c2dd178a6c47aebb000000b015eaa4d0880a471c881a52f4fc33765b9f97a5781d0a6d0c808e22018f506d251527cb8b6c65126a574fe18269fe5788cfdb910e22adfa8049b08739dda17bb534ad84d377fbac0096f7a373e80dccdb34d647f4e4b860133612c6e006c4d2e1d8316c0aee38d1673fd2e6bd67b621d000b28f96d42fb26816b321d45689d42a11687ccd3f63f985443782503e1d460a1a8b36f209720e571484c242e2457aaa161cae0a0a9f8ef3c5f2985837a3e49f000000b0084ce8ad658ab5b28cb389920130f98361222fd1688f27c032afb028d2b3facf400cb15f0bd2fd24b262943b156488c44baf188dcfc885064c2b8df76fb0b7a724952f1abc0457d30427591da3e3ad35a5e8b88f32ecd813ca3aa4ef5ce2fb6e31b44b3313ff0680c67d5741972e36b3240e8675270090bb55fed5e27e99ed64abf3b8bbc7b9327716c211fd42fca7ea20cfae873d1c382b8c0c614aa8fbf2347b388ce0818d266085aca377a1be596b0000021c000000b0259a60cb4f9548fb3d01eb15a5288b4b43f0ebc68f003b124a3b793eaed88c2bb7c93dbbaed06c3348818c6a3cc31cd80d8d411d1de84c785a5cbe16d99eddb5b479b9ce0fb948a5def25f5c208762f5f7d643fcafeeed57a789d71cda5b71595de32dbe94c18b02985ae37dac48b7820647c70934564203fd1c2040b1d2c16c17ef806fbf6fc56188f8a071de9f0cb10ad5bd969a6f58242a5a7aea5ab94f5dd540c9acea2c8a686319d01d04c89817000000b01d627f26c365585c965aaea47b21c3f94a987cd08d221760dd6f25f0f80af8334bf35bc18e42ae4cd23a1686fb8ddcee932f53cc4a5f1505d8180088485951c1e25e585d77c6c19551e83a40e1bd8cc864ab25c95b26452f1853f557fde5e368c419083ecea5f85eee29112547de2d912960f1e53cb0b0c7fb271f865591d1e44a874e775f3b487465f3b5fb502925bd05d45b7083264a076b374ee9c19de356ec5a58794a3b1e4fc2a29938f75aa645000000b00c06ad9f8a7a28b039d05b77f46bee713f9aa8e8514712ed29e545c7f9b53543c1a2c1fc6abd6572ffdb72fc2672876d0e83f4c3fd6567fddd90acd71a09de213b83ddc8499771cb69ffb4c64404c2b64aa4822a13e3bcdf2438c318a17d048ebb065cb825ca6cc93c6bb47abac573271a799b7e4517ace12432832f16d25299ae626ef3a21b2c9eda40e5a88032922b27df6f2c4cd759ff68df9b0700ef1f373e765d16c5c13cf3f7dbf67e191c06330000021c000000b001e8a3804fd3113a767c3053194bd7b913fb8c211ae8e1d89963abc046de1878291bcea7f89f8cc3197b235a554d42d7f1447e2f6f7099f508703b59e60f33fe337eda49bf3e9f80f0c28ffa4f81ed0b0b7083d4baf76c8a6c8335c3ea87333aa2dc6fa5c35b22bdb1929caded6fb20b303a14de9fb4982debd513c49403c6e11ca2f939882ab29d3f4f3bee3604c8202f0041357e47e0d879a352e26c16e0da4201abc62894b0049aa522eb488f7acd000000b00644165ab7655cc6c7200646f67f3f9560f7115585b9fa81cdaf31cd0de41d94c22b1df00b1f2f6894f229b4ed250ac69963bb5073bff494999ef0b1713015380c669066777fb42d748f31dc6f9065660e252406e13b6e9763c84e16014f3ed34a51cbdad892be80ad91ea62f55335231e061ae1ff6d74b4adcae1520e4d9305e9f29b0ee9233b53ea4e2eea7cde8f471f9b3ee56d1ce2e2701cfd2a0d991019733884f93b7ceffc5d559fc56c300d01000000b01f52b0d9f4b6ed23a47cfd3d49b8bc3b572939dc83ce6632f5a53719933f2bc2233808b672a3fca1d2fe6cf375b0b78affd49f366f0003fe7816e54e22ad58dd756002580f099fc2f44e82a078ea284c12bc328e9d24ccb97dfb631204a0d8cee824620b7372c47b745b707fc45bb233003e168e8dde3121055b59af6fa607b662a09683ccc0d20d2156810754b4e5e7002aa07bfe572118620c9faf04b232fc6eaa0f2d4fc87fc5050c65d63c9f0eaf0000021c000000b0031557e97fea630e48fa8a4dde3c6fc413498d348960a7d30073863449620c7a5b49070a7486261222506acdec5da8fb9bbb6ef112f81b1c8bec420659c410bc161d4988f199baf4f023fa1b4c590083b853a633dfc8a709704aca29d108bbd81ba7be268a1f408382287bbfcd86ad002b1a81d16f22ec6560ec0e9993ec54133b66af79b63f666a3f95c954ef2eb408192855a19477e75ecb44a120ed5263d755fa932a425873b508934b9ed55d44c1000000b0142490f7ac1c1ac2a236cbe5b412b63f39ae8e670ab97765d19806d1e60855bb167736b82f9735bd7c25c73086cee9443b7cbd4bd3fc2ce286adba8a4f9fb6b15763e19ad0307d4500fb47b5c8a835d130ea94e60b4fe778b3d149cf7b96abf0902022b250de468df4359bd07f37f6810b10148833c44f39b5d76550c02b72aa5b6faab3cf4711f9f3423ef16a597b5718a253a05f286e241e1999c76169c6886c187289ecc745aea12833eb340cfc73000000b006da6ca086309ac76f2af18bacf34fe80998769e70e74d77e8e12d6e8a64b55df71b1a78cd4fe5f1b278dba89b4b6372a57de509646784928c44d007ee08af098ba0e63327f75e115a233f3460bef8d8af5703d43b690f1c60a8cc4d823ab15935e1b854a3f585569186fb108ee6646102f8650b179055cfb0978b4b9a58419739095cd09868d416c6eeec4185836b98029a09e72459c509e380ecdde8d75b3956020082bb2fd41469959fe618656d9a0000021c000000b026c6c87f9464efd694fca194c421639790a8f2a225024955ebc745f0130ecd3d18e98282f264243f955aaa7d9a526f994494a74bb8c7fe5ed6d60b4fe7ff3ec36758e9ecd730347bfb798cfe56b55880ba6d91aa85e356fbecd0ffbb5402408bf56da263264621c0b9886f573ed459b504b4a8a1ca16572887bc689ad775990785fc912560bf40d71b319c672cefe9d712c0334febe6abb8e196c668a40438b43c3db5b79065570a5803922b2f27f67b000000b02d0f5498c34c6c591ec25d8229af1712d16f93555ac4cb21c59f0afec40e189ebbdad17355e57d72a5f1bd902d86a964b070ba62dc859cd2d26a5e39262934d5d364feb28dbb158e839a814dc85b919fd62d152b613ffeaa142420bad35c852e1f6d1487952dd9f56c25d30a4774308e22fd7147806aa0771f1f4bd2b0f8b137872bd6bf80edd8e12090c39a482a8a951b5793600bbabf12f0cd03fd64508398f2c2156fadb2e499105dee683c36de25000000b0132365e72bc2e1f8f50618c2954db52539539585200f86c24dbc1e32a2db94849611469e1fc6265030f5e958e968e1105f725dbd22266ccbcab02363855cd8e5155e2416d65a9d2180832fc72530599218cb993d82d4a74ad59e213beaac3577fbe2e0a3558e24552737af2d3e5e86a30496794133a4e4ce3f8bafbafa360efc72bfdb4f99d784874fd7d1ee7de689c91a18708ea441794ac770c27b4def55b3cbf8e6d66bb37efd0dc66d1326c4f7a40000021c000000b022abf6c6092043bf92710f76fd215f09b8526fa34ce00ae6d3062ca1851e965e022ce54cededbed0e6fe71df159cc7aa1573a47444da2c292b0b23fcce1d7d65222fd05927b9996df3c19108e26fa5d7885eb7d16eb957ee63a73c1d569f9064d3f6804966b98ac12723c08fa0a6274d016507edc5a92eb172da892bf605754898b72eb954d69e83ffcc6e37789c8748032946634bfc86b0d2ff4e0bc4ca669be7958c617753b27e1edd9a083359478f000000b00dcc78d6c3db9cbcb0bd3cab1153b0baff6c84eb7b09fad3756d4355ca48cb4f94a28287d90cce6c4bdeaeb12ceecf91d29077f6dded871e7bc3dbfcef925f6c38031e0cecaa1c293291f2357dc9b3cdd3ba06e04a44dcef51c85a496bf717506d32a18c5ccfba14ecf9d7242bb376fa16164f3330b1a806a0fb730133c5e19b2e10690beeb46a04737fb670912fd2300f211ee55427b7a1c03f0f080a52e21d1f7e388f753ea6e0e46ded8ec8e5abf8000000b00f117848e25cbdd7fc26a3c9791efa858068843a44a0d5712d63b5cc8e8a5d28db1f200b2ec755d9eb2f9395af4fca5ee7016f5c11cec87b4985811df1e9e022833c1c5eaea5f7954c38831134b5a3a44406fa3e062339b11d8d8b44b0803504a6095b009e24f05d24020993d77c216001ed81c10c6613a1f3f05de1f233879a232bb829742001f463df6f28cee0f23914368cf0b8e9953066af286afab19a29ccf0f7371c9438170886414f4f8023780000021c000000b006f08e88be190a9cae1f002a2329351ef6fe5a8df44a2a7297a2d168fc717526078c170b58cd82b086c2b3194d7285d680d19e701d6719aeb03b4b66a6389132ffe9e701bdebeb80e7927c41df9f04a452fa9d0320215d33d0f45c976493408e3be3957503a94a26c6fd82a867eedc282e71495e3cc73fced2814097d41e1c3b48709c94c6309b8ee875ecfc3b52ed940b8849016b15ced6a6c44984753076e3aa40b0e29eefac655e722a3b7a477385000000b004a6309e02f4199bb74c05d986c0a26b5b149afb037b436a1fa49312170bb72d045dc7c547a07ff666f943dd3b9a09829c5fd34b998c24bd23ce58e06658b55a22e353b5d8811b78398484176d49bf2f5c6d98bb21c047128c3f4278db3b332b380d11218128312e4e80cfd1b69d0fcb111b4db0c0e4ee553f9fddc3ccb554a680cc59d07213b2cc434398514504b12f08105a62f0cc580b3e6ad8cbd873821a8ae4605790c4badfe29e8602c6f0f316000000b00ed44e3bc9d3243a48715c434664053640d6ca4702a9779bc197a43834974536d94a7cd960efe9ed691d5f3f1ea06dff953d111f26ee1ebf3d5e28cb60ed91fa638a014890af93e887f0285711e732e0a3752e5af62c5c506ecb3b6f04a501332a89815811e093c011ca32dd68f9fc0118a9ef4cf8a72aec488c0ad523f712e7b5f8070426cb2cd79efa01da46f52e9d2f8d0f8f7ac425c43e7ab5eef4d6e783fb2365906d58db4aca9f3e60604dbb560000021c000000b0131a9a3e8fabc08130b43ccb4f864eaa292d010587ea0bc377b0f6bb381b11a2507ca14cd2a7e84a71b234afb8d516448a8a5cb05d26ac56b755f41fa81abe0ae5d34e0a890e190b7e464f468ee3dfe5f604393dbb9fe306c143e6f74a8de213fe317a2cd21802997551606ce503674f2c15b2d707be6a88b120390fbe3a9b7e0d02e0b75676dfd093f3b682bca86e13128e173d854302fb3b8d49e721edc7caa41baf7038efdfd248ce7f319f27729f000000b001fab89c460df693481391edf4963db5cc8100afa46095c685097151229f6d1edf165e19ae64adb81c026f8d4cd91dd484294f3dbfc559e8eee555c43520aabf3cb32d641ae13e0f5c97f12a3a605fc308596eb9a02339824640c77bdd57e389c8a52cbafd10fd6279cc7ab76866859e126632de7c3f4a685fe7dad17b9e1f3d830932837326fbe0e60263bb299eb96f13a7f5d31b8b8a724a3aa6b7a6001bfe55a09cff20ba5ca3e556cef7f821ac68000000b02d13ecd7e0ca48a67bac33ee9f92cf8055f5c093c7397876f6c8024e2799b10e5740259e5743e60bdaa0d0a94c3d98c7d97b0d2e5613324915a0a9048dbe3c9cb15068bbe5eec53a1097820a2d30e48ea4570c648f0e7ddb1c9637050a91c2e141c1faa4deb5c3fce57b5bb177c21ac011e9f4bda3061c4d24a7347cf7352e8a05f348e0bbcc1a7e19be36136bd14b211edb481b0e6fef0be6769c4fecd4174326a933a7d52c8df17f2b185b65729081000010c7000000cd000000682fbe893af9850cb5939b7e71607d6a607264ff08c624c1333552a8d2a8aa31e0735c5f7400000040d97ecdbc31741e58ed7e3a6fe31b63c16c2442e666956ab39d794c11757c91eb9c85f85fbccbdcc5d9f4bb4eba959cc217c92ec2f10b59a990905d12373545c10000005d1f297fec89380dc9b133aecebeacebc8dad267892d36021d6c6929d15af7d0c061e842a60000003545c82f6a2c6f6dbd9cd5fdd9d2b07164c7933c74dbddc54c26e6a6216f14daab874afe8e0722de0cfecd9d32d1eb1065f7af78284f000001d0000000d72344638a809c5c84167ecc72668de7a48c42d3a1b3a36d8d64c1195cc4aad3d67104b1df000000af0b2ca61c4b65f0a946fb6aa39e32b07bb6aea2491d89381a0c0b200d53c1389a11a00ad968267a5b9aba037a1eb4004edcc3d8e04c67f01241bc2c569370e75486e17975a2e5cf10929627bedca598bf0f5c486c8168f10cb83f2c43705ce942e5c90c695fa2a131577587ac5a2f54f7c50060cb112ba8b8df85bf19343771c37f3c3677f51bdd70a64f04c5466a7ba2b39ab8d683f5c98df2693eecf3afa9743d51199a6e873c9096392224ecbf49000000f11396391ed9b614766977f0a9f6f564c7a1457c61d473c6bc4a7027249ffda2c6aec35ef8000000c98a276d88f2277c6c0348cd9f0b5b7b8b18e408a9cf302252ca8b04d864ebc94c2f883e1e2e83d43086753304e983daa166744ad0553410d779707756dd7045a38a256c0431f2502c63cfcba472eb5d5a4c39da4f50f633b218efa21fbaedb5ebf7f1252a0c81d4c5bd3c996c9b6ac50948184e4883d5eb3f6f68ec7837b88f2dd2d69b4e5beead75921fa541bf5ab04163bcdf7ce6911d98eafab1a65f2b7b046c310eb13ca7a8c181f52b41c6213f9b9537c9b71933ee6246c0d7e441e03d65826ad04cc3a01390a1000002320000010b288d9a420f10a2f5701f7f323bbddc4d6766dbaeaf38066972f2e009efde073499b21051000000e303ff9971d50d02d77e95e1b432a32b371957887ecbfd703c20798d27df8f552fe1638e3be032f22c09d558b0b649f355c6d878e4317ad112a9323b9e23159d6a79d8de6696b851e44a54762ce1f50083d42e0616e41f292bbe893833a714c5c3acc46c5b228f077bce2c95d2dccc03910cce93b0796957982a3958d5dd8df707c5c4cc9f04171988d8038694462ad63d8a7328469569f65d77646a118f6250e0930d27abdd7408287849604bc9c7f0f82c65c463616efc57e5facab81fc37bf8fc80cab2bfc590476a3b2f2979e760e9c58f83df946495b9707f8836ee77fb5dbd190b0000011f08d20558498c41e20ac948654ffbb8da632fe796398b6bfde8825f5e7d2ab73e5a2ed674000000f7d7628e50943ac012020db97bd993248a8c8af0fb49f944ad50438b8625a8147f15c59553593540f9f58c8bee4107a64d481df7ee3fda545c4a724237fedd8a06df3a3ecb70279cc4a2a80a172d525f917403e38eec210db9807cdfb7463153f1e49104c3b2860341bcb1aabf378ae9f558828294759b3fe185daa86a71ed201374c427173239b9bb66ca16d16d1e4ef575b7315a136c30dd40244a02d8745c2e6b3bd479bd936c442459f0b8c137a4fa125e08cc60657a3b50ec4016fa8445e5ff3fe74ff6bc2a7d6cc0ab6a9713dd9aec1acaa690adcabdd879b150e87967a04b9cca59d14f21ed1231a2846871c8fb85dda866fc64c900000198000000930f868f0f022387adf0baa073f612c843b0917d75bceb7969364e1828a8b3469303a5b3fd0000006bdcb2e5cd398927ef97fac3fe4f5386c8d535e4bedd76033421b4f0314ec1093ab2134b90b89a1c6519ff30b220d4ad37847801d0ba9568ece0cb5ac5a11a42df36f47e4aa062a4819a69967aebee786491fd0aa26ba2b46d6694296a4f36ed51b1b75924796de3b8c8fdfc000000fd0d1201a467573862143605f566fc1c046579944b5a6a179db6fd27147c43f49c237f879f000000d5c34ee9083e36ef32936500686b852313a5517bf899caaca4accd125feb2abe4c4b4533ecfa4f5785db513746dbe4ce22d0fb94c3ae1e04530989122db8578274992eb5570ab6ae8c1560eb35a5ade14d82ae07e954612875f2c61443b3e21565a0446a8f65e1aa8b399b76864de90b6461ebeb67c40ea0d041628a001a9903d59750d3173a80eac6d0ba03639534418017615df07ce03d7ac244e78a44f0d20923c5798b7c33d5a8ff16d5862b319b11d37d6ca8230349dbbd4b393a72d47583d46869cef8ba0e6a44e1e0bcd88bc891ee925dfc9500000136000000b007903ab93d9daccd4cda8734ba84cbdec0c1b56db734c7719f77dad0cc40c950c82cbba50000008848442a33458233248ed33cc3fc110f0b5d3413630ea01f56e34120db39ea50c72ea0006beed15c4f6afaef630b188fb19915de8bc417a6569ded2cf7214652e356d7da06cd67be8750262974629a1f17258236e2124d12235765e1c0c68a28730e6a2aeaf8fefd5aa6a4cb0d2cc7c09b07a5483cd6a57f4671875d0d7292377bad034d4f147423520000007e1a96a0ac08aa4c318e04f3ddcc740106e2fb160ba4372665b181d30f7ef91a8d97e7fcf00000005620489414e2c98dc2e66857bc972ffd1b1eb1b8011e2d44f053373a2637cb95e8d69151f43e61026b4f2be3258619c577eca6e92b70c389aef7879eb3586de01bc84e0ed6698bb673416bf2330eb896cda10003290d50000001600000010804f47d904bc302ffbcfd582c9f206772b1c44b9c48948f42beed9a78c1bc6d05df161e07000000e0c6a837ec702ea5f333e54c91a7dd40e8d7e454be8d027c2353149f70c3d3357ffcdfde052cb4d7e9de52c6ee8cd75a64d1feaa70adade7f163b39f857c5bea4db672e026f88e9c105db2136226712473714136fac1fb7f34425308c564d4e22927e7264d899ac0f96d6f283b7e4be45e89174343252401811e94fce0b500e40c7b45c85879e24c8453a0d6c40aaaea689de11341caea6d43df8285000b1ba64030c554c7f719617912904bb8867171b50a766c2fdae8ac8f309954efa1c721a39860ffda3a3d74d50fc8d5b893b7168adfd5f77a473686646ae5f360e487ea530000005017ec31641c4f94a013dc669280b3c57bf74c838a5ba873bb4e08602e95a0e787dd5e8e41000000284e6792d9c3c81f6692bfd9b551959dd10043f2c0342ca4379d074f3358987c635b9de7aed927ddfe00000207000000e520c6110ef4af3b8c0cc1077484d7aeb23b6351eb8b3d1eff6cbba937e1f24e7007539a8c000000bdf759f4ac4e71597a7adadc5a17391371dcf906d7ed01d4e5e31af450c175123570425f8d8434ece58f4ba0f6ce2c5d37361552c592108602dbc760b8944b9cb7a50e888eb9542da425465a47c61843673239cfd029b13ab946a9de10987e8bbdcfb118544eb81f2944ca49d4dc8ef99f5bd796bd0a3114b3577c789f10a00faccb4d0cbd145752489bc2182e5d2ef28289f5105e5b75af2cd7499067d3389287e7a94029822458af6e28fac648f9f751be6d970f076ee0df1b89408ef00000011a1b0400e019a70cfb6a4ead3d4d737b3ffcfc36bbf82238cc9f401e89fef122e653af99f4000000f2740cb32b7e73efff6ae68bdfabf015f41a9904a1a6dead8cf5b1641363b78e5feace264ddb5237f60287c2330323bcc282672c96be925e87a703983ac877ff4a2b078288f9cbcd0b45a65139beb1d0119ef3724a772a1517c395f48dfae645405eac8ef6e4f03813da28d6eba2863242bda4fc081efbb86e1cc5383e9dc4412ac3cc9792c840dc665d16064e5e73b7fb2aeb793a570a7c456bf2a25805283e5f201fac5bd33e62dda4468f3043a7fb79fd2e332e8563abef74ed841b8402185007fa9a059b2cbcd082c02081f9abb61f73fffbb4301ba5d226c162a630a25dc7446f4144dc4ddba09c05858e8a83522f663200000170000000a91befd28b6edd1f733bc49f204484ed0c6caa7606d1ec64a64d16bb68776bbd6241b4ad9e000000816f867bfdb44b4bdbd86412c6ac0a18c1c31fbd70bd0be734ac85bbd7f140ebc66b6f14e148c6c25a3bd08bd0e65726b63ae37ec54b537b3418b7052e745d61b311d5e04adb8ddf3d358f80f6aa24b973baf46d364f31883aaddb4b849a8b3d56e880b1fb85c7a16a82a418f32967abcc101f0e88397d36f5cf4b4757416c1d1a8e000000bf0b5f8398baefc08627e20582ba829e6cb51e1365b2be269c4b9c2a47ec2ae6c86fc783af00000097b8372e49f80b0a423ce3c020b83d5ede2f8abb659bb68ab9c5bad0dd262d13093efab93862416748ea79849b15446f75ceddaecf3902e635808f51c3077367163e6de28dd0af24f6dcae6f5a703f39d9b4946e9e7e02e617751eddd16c0c798659cea98e53267824d276010a4a248e5adbc03d29d218c6d3c6842b74605d3a862d5e1a4d202a52f73ed732ae7289fb31d2dbe2aa84c70f000001950000008b1bba2bbf8b763504a325c8d3aacf6ee4c380fac4f71fb2f0ac507a719283334a03642c7100000063e872195aaec4da999f847be9f43bcf7cf51481f97d03e0bb16b54c871dad5bb5e993aff23a7e4931c2da98afb91306336e52dc933c1d90a5c16aea3d7e9a9e1635e8a7ff6fc127a9e60a074925a5da9d27c4bd66ba2b59dd1dab174cc3ff1272cf3726000001020aafa1be6af7a898dc82a82091cc05a72b452b96a2e0851cf978cf92c5133b784b9c1b02000000da82a797557b4c65b5f9a8619d8ff66808f94f3358f5a080a4be79a2c75e219e0ebbc0ca23c583a99d6114186ddfd510cd1b509302c3b10805267a193b8876f276d08e61194834681aafbf907a4642a21eeff3cef7265426f00d3e6fb0d8a9bdfc61cb13fc5c7bd12a1119e17e170741a49cce6f8acd4b28d4db8c98f1e7b6e33123096d080a259f9350dcda9bb6a4be0dd6295d828794dcbaa7651e484e1109bcb25d763f5ffd4f6248e2c4ed95fac1fe8f59e66d8d7c51843f47ea7e0ee507b25e9d3696a9d164c445f5e1323f62217707b61ceccf4fb5fa8fca0000013c000000e01f8c387e0f2d912e461ab6f25eaec319a557905de19fb460ec5db4485c30d02c43081a4c000000b885ea942549da739a1abea8138cd160f2be3318c52b05ce2622ce993e8666e42505f9e5d117336dc2c60bbae3e6c4f7d1b6dedb08ef3b3c2dcdd03a93f4c41aa75bb3043b971581ae3dd1e802183bc757a724741c8b1c759a7a88cb8c8ea1f0135f19285e846e66ef52bfe9b72948665accb0e2b74ce8ab3a1460468450594de44a63ca2140ce4625f3c60b3de088ab645e519e07bb8ad073af3223390e8b2e8f92fc5a37ebfa37dbb33b445e83257147ffba5407b66f1a9a000000542f37cda709a2dd09d782bb71c532f9bf1a5c820c5a36b74ca1599292e52e8081a19a3b490000002cd0b16cfca84c6a8d9289110f64789fb585a358bc964660ed22b16bae714938ff9242f4214e40dfb9f3cce0e500000156000001172c15a13ba873ba6a17284db65b14baf0f2fee5d8bcaffa93a6b358bcbc8e462b7d0ee62a000000ef311b4855ea95df18f2ccfe9c52fe271a4cef9ce0bf4889ec85210abfb2925d274aca13e1b6095ae9a7ef541075b4ea2da82e64cec0bf39e295211ff927256717ab316ab619e0e62c779c200ec0686c3c65fb901e7bca0fde6d971d2c8793bcadabd6d9bd50b3e18aea6ab55cbc20b93557c81fe4fc551e89ad34f1bb02716075bb86a5d46ea73144923a12a085866d3533b9d888cf319e82c7dd64f81a40b725a13e541b6d959251706f9003f7aff12a0726ea7df8b553937978fe3967bc6188f3ca85e3845c2db0c652744747eb1d1e70f034c6da24c4b4ecaef77399865cf01f8c0a3ed2a699ce86876e8616bf5e0000003726480ca77d9338f78e9303a29b4526d08b04c1159156ad1e3838948a40ce8e9c1d0768c20000000f3f103d15b5f7748cafa71474ede108", - "txsEffectsHash": "0x00543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a9", -======= "archive": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac", "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b01f71ec5b5c2293fc361459339250a294b05961aefef5446f9572a26bf7cf0418fd3c2bf927113d9803d211429ff46561bfc96b46135d956c3f366be31762015185c9f4e300fdf0973010189346dcafb4d50340190dd6815a1c05e25180c9a25b0e163c23f3e115f0b54a280f5cd4b0401e377115871bacae9d3e8f79515daea2ce3800a7ddc46cb223d560f75e10a6dd0d1b8ce7ecb9122d831e7e1587c4bffeba9b1bcfaa909e601ad63f82b5bd7840000000b00fc41764fe69cf93975e96cb957d6ff5ec259feb6b3c9792bcd566b71606731b97019a17048f88843ad29a1c0b008150225b9971a84fa8bb8d6738862184a8c8df869b288088484aa25645076cbb4b5c155403bf8aa41af248881223c22e2a83d3a574d1faa65d23078f9cb8fadcab32040757bec6481126fb3db1a09fe8be3ff13ba50b46f92cc37def616a1d4880fa208acfb84f20466eda0720fc7de75e1aa22e0a717b7699a4383d877a9b4062e5000000b006992faa8e0e87bafc477560abfd3d13536e49e1a9698e0673218c16ad3d99f82b75af083a982e40188c1d0f13cd7547c25440e6f9b393631848e513421fed037b230467383b109fd9936b2c96b8ee3ba63d8202e94a83c83a7506f2ff7dfc7cd4eca941dd7b70fe66c70cd315c9d1d12fb953696afbcd1290ae46c5af945fa271406f6ed0d4f766c9b1f27ff66a7942112487dc2976780c52dfc84b7263467a32adc00f81ce64ed6792f4fb12fae1f50000021c000000b012856bc6cb2f903f4e43c65586a6036dc65abbb528e60732b54badf61aeac47ff8e21248ec9f211dd7bd2e3cb4c2937d6e318d7fc0097f2de9e871c0077433dca261add840edf43d4c3aed215f23aa4b511f75faa8e8c1adccaa72314f2bcefa25bddaa611733532c0a230fb5d4a8a881ac57cda84f569fa37f0fd838ea7de8da8661328b258a573e442135e025dfd24088f4f98529167da8e41b3ef3092d92224c8b62f609409470e98ecc4b81008b3000000b002a9d921e0aa49de71e8ef2ff25eb658fc2b00034146174f3db9e76f374d22a057af381cc9757c3557a4e7a694dafb74d23cce3d16b2e331297bfd3475fa8073dd2dd94ecb31bee2624ae0d6e529886697340ce115caed2cb325764c98e6729efca24202956eac1f881f36d4615f2e3e271b05c0733226439f3374ae19a0be066a45344f373b1dedffa2a6f31d92c0e91b9c8407e4ba2ee8feba5b573c532fee5e877ce7602c22c8503fe3deebd9eaf3000000b00aa5c18ea087706af3c20e0662ad300ca120635e39a199e67d9ce8a7e8d5c443ab1c2b5c294b478b8d503330599f296731d6e62149cd7defe27dbaf2dfd8acf9ab68c06ec0d27229dac5fa836f608ced2876cd135c089f6cf9128bb434c7bf19cc3dcf5de2dbb6bec17712ef1e1f81122df5b29841a7eb7a1560b4612c6557131fc75448f9a6b1b3828e4058bb2e4bff28889cd7c4dd362d7cd0b53e40ec34a9a5f52aef0ec90b2dec2ea9b16a0d49c40000021c000000b017a3601a7fc9e0e2123491f31e4af06436912455291e7fb88e88a9eb2843e1a8739f5403d68d785d18aff08a9d93c2b9b41909d326df1cfa611c0bae5bd04d79604e8f1171be4defae6bee01a4af1c20afac3a58a723555dbc211cfe81539365683a6f763ec849f0267ebafa8a9effbf0d54c44f6207678a71bd92f66b778d859bac328587829f09e4d36b8d148dfefb25c643a241f9f307ec07f3f41cd09444b28b35d030c95b01d1801adf611910ab000000b0246c17e033e968b057f009fb4d1c4e9d91005f3febd36f16e453615c7c411be42bc3b3496b7f3267ab475aabe180ba6916d8f0a7da1a18e5fe8d00d69e95a0ae9a4d972f027857ef3818898ed9709aa2261cb8ae0a56fabf2e35ee1282952a962ecb0771df5fa41ce6655cf6131a7c982aad41eccb371c76c2f837318d747f19362296ef35dec09966e23af4a8e4caaa0a4c9ba3e87f2672b9ec7e78096913bb7fc66a6bfd2b1671aa87cda1bd9ee867000000b0141ccecf05e04d31964c4c16d2ca0be65047d1152662fe7e0b0e45766b8324258538af3a149a2d5c251be211a4f9863ec17adfcec419cd9f9b2a6eb92396da3349e4ad43bc7dbb9fe3d92fb081bb95e96c4352f277bd3f6e0d6348b3daebcb3151e77944022d27063da75d4fb9115f4000adeaa479e2eaed678af7c36f3f42257d9bd241c51c7ec0d0a0d641a77d8a8a2ba505403df2f461774b74098726ad5b7b085e2bb37a89a1414ac944c11eb21d0000021c000000b0164a956fd938e14f48f2f36912f3cf2e56c8df5d3330fad09aca62426e38adc76c4fdf5728e954b32b181c215f585e30ed87bb3a0a6dbeb99e81872aec0acd9ff1cbacc3943f5939283910cf1cd5d0552df75c09315e1051679c5d458851d4f301f5ce15e4be094340259538242584561403ec2fc3c921cf80f8b5c0d0393da393739ed85f9554e00504e3e7793290df07fe8cc3decc120b4e504b3010429271a4ae030f8a21539576e38557cd9c9744000000b00c34ddf5e80e8ce04734bafeb10813e31b1aed5d8dc38ff49cf7d4b59a5e052592cfd188f63232bef9c36b4fadd1800361b6ac9ec5c676812ec432d9b7e46300b72dc73cc634b19f55afba7fda63054bc6965a0cc74af7b322b37db0d93ffe4b61975bd37bdbcf19863e926fd2b59f2e1585ca5589aed4852f3cea64cd12233566d817be0baf696ebfe96c4fc68a253319be781154f53eb2c6b337d9cfd8b859ea09b8765a664668c4d1a55cabbc9b84000000b020366de2612f4ffe609e02136635f40022efbcbb1a6cc0db965c5c57b02bedf1346bb04008bae13bd13506d680df1b4c7230fcd6fc5661ca55e78abd28f2f6513aa7463dfc2baaf636b94764cca2e757e10cce10c57558e920a6c63f991098552c03bbc603ed7de68f426143ec402a4803527c2194e8ef851ab3ab28dd1dbd40784f0cd6a72973680bfb6dd07eaabeca2c3dc34e34ebef2e1998256210ea39b693219346c68a338a86dbb753c6cfb6bb0000021c000000b0047be4b53244ae6eb70cdf66f3363dd59edf718a3ae2afb30b1b0fd79d8d07bd30038d4ef8184cd0fed0a391d01c488c9c666d42c6a478e3d5f6908996cf1b81670011df255e7a5bea5dddb70d150e2e7d51ba1ff807c78b186621ad371b747b2c7eb19c2317d1efcfd555f763fc37bd19ea4388ebc7a20142aac995169426b0d1717ee1a5ae39019df688fdca28390820217b3ca5b30ec8a33b2d2e39bccb98392dfe18c818eeeadca5d0b9b4630b68000000b02ff020b10d16a84718fc1d9a16d1611b74ff473e90ca72f78f19e846ac173a2700efc07d3d085ec8f2de0afdfd2c80d2a1f98b2ab48d676a96d1e82f664d1f39a005d68be1b6b2a3bba429f593e012db4175b99dfc135371c80fc483b1024649091e02d4e5a62deac2e296d0c123cb51119065c09b46487e9e4448beefce42e97c4e7836420d29f5a4b0c59898081ed725087b16a485e4a0fa95ca9e15bc24ac82aab81f674e2075ee52a2f4bdd46234000000b018e0a494e75c22a724e72adaabed4a8c375a7a9b71f8fcb14a27d64a13ae45242a249f900c152bdf9696638a60cb7ed9783425b6b302776cd2e10c1c6d747dc405e5d3ff558961d9f63be8c616a80ac913a3ffa01927e04cfc3445011fdc5069e106da153e42375c9fc3bb66c1b408252792becf13c65943918b3c8d7c83fb10cfd8578c62e4c69853c0ff176fc32413187a16d8a753f127859aad3d993504b8121cc6dda0e3bc684e5cd201700bbed70000021c000000b02febda87d1e2e2401696e10eb213125fcba87abf8b680204fd7bff8b32c71a5f56f7e598aa697e5a95cef91ed9771ceaa04d82267409c4a529c5cb0fe99bfb6bcbb3f76291e050a7788cc8058a97f55d54dcfb5ea0279c01a2a0db1ecdb6fc5a06bb63d0f3813d479facf2121d40eca80f2346670675c74ef669a61b589f7e647f30d32a3b6ac1ba40b82d586b3dade4222d0580af2ce197dbd7355677a6edd46ae8efc7cc44de690a93a051f504822f000000b02aea775138060b0c09e5208ea1183e4324c0e321b02f1ecf61d462e0a930fa7dec246509829b729b2c663119f180f8a58d2cd328d3369811679d59f91016de03c5863052544c3fcbf2382382c757d304ee6a6b990555f6ec462e6c6d503546b3dd349bd1a68891992bb958e201ef93381747f6ee8c630bc0292bbeef2a1739b0a0e368ae042c7f185f2811bc592e10151e2d43d2e1fc9881348db7c6a254f86a19cdbed01d28ce85bf3ed251c8902d57000000b018c9d03b3298835fc3c6dff2afa525df8a912ca2e44dcddf320a728126eece0ababf5164e538c6eecec7305acf6cef821063a1f73dfa1e6ca41ca7a9221cb24f559346485031f5d6de08032e2f25996a370e92dc6b46e7eeb0899760e65036f70ea37807ead3b3392266494bf81c42ac1e5d3a69926e90776f025565cff8dee508b8c539bae4c2ea6458825bcfa4401c0bb66e1285abeb98143e1919d7f40cf443e5fa542a687af2d9246d4447b238020000021c000000b02e1e113f3668dff9f9ed9b65109fc018e370f61face03d88015979cc9c825a408abe73e2b8eb8579115c2951dcd0c11625a3e8917fec4d9a9b415032893556380c051efb95550fb1f590768bd771e88b5f6f04a677f238c49b0f0651d90215607dbc25ae32e90d82e4dbc1e9cb3c50c92172503d8dda5d40637c0b78f5ecbaa9fcebe46c1b8171191e187ee43669da1b22c342109142593177ab6d4f5b1b93da531786634fb861d38e6669bea3520db4000000b01f1ab1803275282016a5a185328f562f53d17a83045a1bd60a43c5fe55b904d24355cad459502816e88c27111fc44243c75cce161806d49f9cf67d80e27919365fda545cc54273837d1929500d00ea8c0f81a3780398882a86120fa53e3ef22bfc99b621e6700c332dd840598fad07dd11fcb07d928f3d532aebaa81d7109ac127b1921b4d1040109b030ddd788ec42a223bd31f36fbaac2d98f60fbf7f71f9de3485ad5d344bbe94060ba797b86c6a3000000b02bf21f685b7658a04d5b0cb74d626a0d36be5bc37db7a8d0b160b02ae5f25b674072722105b9e06c9d4d93f50c9e5fdbeb0545233da41e609075a766833ee4f08297c452f8fd881ff6fc6ff357a66153ab9dc682a88f1bbe130b39462f9c9362e5132536c43aa9403ab808d549ff05e7207b59921e4d811e0fc56a377d0a3e99988ccd3d9eb9c9b52b9f70ca03e18443234d67a9b835db64964e8b2a094f1c50f0497b300355061103028c5089865f010000021c000000b0047f78f42e568a04eaa697b408881d46ab979198f4ed2cb4f2d0731c8f58ff5a37456caaf633ee17d3e5a9750ce3d2cb47074920e17bf44c262b56c66db0cf02687f3b4133b0570efc476ba938e3d571e2a7287b13e09da43dd13595b7ddd23c83b87a10ba85b75c3d0532a910b25c5922adbdace0a148da2e5e6c6e261ca89c0010ed8adcb7cd873e27e8a3cf6f0ed301e72c4fcc03341c32bbd52c3c372fc96f1c5507b669e1c6e3d037dfd8d6f416000000b003d1fcedfd4259c7ffb3c838f4da9e22d229f46e68b612ccb1fbb1571c55ff234184b5f125cceafc068d6d3f70587827170a59478bdd1c747c9d928fa0e2d7bdda47dfdd75ea0144981f3569ad0c6875d89887928bc9eeed6e0f0660010a51337d47905b40c2747e3e251ec4a27e69800765a947da8a3bed51574d6338d3b3aaa70ff6add8b842a3c2ae88afd491363626ff44afead6913ba84af807864ae1704e87347552d444483ff5658416da3265000000b029721b57407b143c9085a2247b4823cbba318f4b71b92c14eb92b93632baa54b68a0d8cfa025ba205e2546c77913427e15cbbed4515c18ce7ec234d8d94e7d1fc399ae1f5e1e48761929434693de8867d5716bc2445f1af7d20839486b7eb3915b31e2f4e1b225e560c866142d53092800910bcaaf6ebdc588c9de3ee6f07693901bc625f0382cab06e61b5d3474e12b0ef24352b719cbc0f66837f86307550cb2458483a6d4092ded40c04a3b435c8400000d9a000000fd0000008a14e4bb55508548af6fedf5e8ba390bef413a23a633faf7fc0c8ca291521cd03e2dd4684e00000062edd557ae581443d7165335c93b56341a0931f14e658dabd73ab19cdd6fa8502f3900307a22387ddbde78542f8d33e4aff1a8af5a0cf76727cc3a08ed0e7cfa702034cf0bd7f687c16834db49719ef3a77fc8f57f211fa7a24466f1430951779116a90000006b1b051eedf94769007221082fbd567af6a30a9654dbc8aa8fabd02da3547a10afc3fed88f0000004371d086ae9f21d0208c8a2297f97f2abc2c9483aa85120354ce43642976dd76db521fc6a138c9132742e7d81eb5020483350523ed36497b428747b30fadc6c1edc02eba000001900000009e2f1de42d2e569e395248491d6dcf6a5dd9d2dcfb92704af7cba08bf45593cea012ada0c5000000766e277464dd5995d49353ffcc83d502dc8e9361bcbb7ac9882a62b9c0f1ac2201f3a6b319ed11788c2742ca18bf1973d374695c245a690589a25556a99d168d51534cc2f349462af3ed3e14330f5be06a591a875a4db26f2fc91c1e728d4b70ad7fba17a5830c42674acccbd6d2f38fe9a14c7bd501ab000000ea16792974f765c3ca7abf1b7b38c661aba42a7c1323317707545848ac22a755f63016eacd000000c25a19525dc82a4550515c1e02e2422b9f87e9298fafc5fc5615704e2a24b67d4ba7ee37e4d6028e957d17343e63885d29337e53b1a48f008379690985e45500661e600fcafb5c280a4112674e3263f031fe5ba8cfeda3808a92b93ee7579d44570385ea88993d63dab382574fb6683413cd87f2928462e916e71337446a6645d15498aa8392c2bc685099fb3241d979ab59bbc5abe191500e681c2d05c2d41cd368cb08fc9e6eb43927d78602dbdf8382de06140b26a1735ced26b6815370ac93524c000000f80000007d1c58d8ae23d6d76704625d9e91c769bcd48dbf55292c554651bfe46915b29eae899748750000005562d3909647bf97ee3229b0618515231341ca7421cf35a46ccbe80f1c5e0ed8c4fa68ea826ab23fe45b7df38e1cd38d70187eed6f6be4b6f6db6f7b66dc11007b33982172989e4a0b83c527557c602fd27cb7a4f45e0000007315fc948fb50df693238eba94a6b33b055932edf6ba952dab865bed8a57cd908edd5f62580000004b22be4d90edc016c12fb3f95119cc259c1d7620188ad16dd9e6e780e867ae272392873f9294c212e0dd1981ee1548e13a4e060c24403e41f07c29d7dedca9eff7a608ada7726ef410407540000001ae0000008209ee09a0f665173062b636cec323de3d22c4ecb07ae6215ac808cc7828ffa875933bd6610000005a28844857a2329e275d6e9fcf167524fdf015ff8c9314fb3bfa1fd803133c1994dea11144c125784133df01d584c466a2b16a9986d2088c147fcc2207c1e6def853caab102a71932d5decd159fedea1d8fc1a9e6f640376c234670000012425a95095ed3d30268b97aa1e00593510e2b4eb5d86677f92eefdcd10cf0a83753778fbbe000000fca8e2b33cce7f99f20fedca455ccb4187f393a826df51fdb518a8db364033e743c12244143ba7e68fc93d176402f533654797656da98c0a3528582995defb952831ea96517b41b655e0768e8d9d3b9facdda5b69653300d5d6f30a2b5e607c699b38dc7027aa9274acdb8f8eebeda77255e2eb0c70e5f1dccdb882441a4ecace44cc01712c20b21c73ebb680bb6c07daa8f212e4c50cf636e5fbc702eb1b8089537cfbfbd357a4e3c4f8da430518a20f25addefa923230385a1475178e28d148485843e6e714cad6697b2e9e25c4245dbd7de2254c21c52f0ca479c97dd81192bf600bc84139bf4fc37f8cadc986f9db9f3a9bb8233014f61dcef2cba000001bf0000008e18ad7f35988617e31647b265dbe068a65972271ece31d8df4a74b6a536febdd9f1145bf10000006676bb18fbe613bf104a898d2f6e310fb194283edde37e996c7c65a1de82383d5b0d844ac0fa37fde0777b3a41deb55dbe2358e2f6a201f8531863cc7193a53f60a488bae03d1954e1aaae7e9b43fc7325c7b42f98f6f97ca9d21948b974f45de165119baebe3700000129118cae333ff5fee1363c783c57703820d89cd1e93c2b55e7c6b6b689b17a7d187f75d4bc000001010e169550eb01147ebe2749f4305d445cfc71f9cfd37aebe2999ebf4d490a6f2479da4d753f6ec034ad7b28f71c29577782c329d3e8649b6f9cd5232be7106c16b1674d27d4c34b36eca713f35ccdd9e95b7f9adac46e3b22117249ebfbd24b0b1a0c61477113d9250b2c98e762e5189bf0a00229799ef776b7f7098f6f69bd19facd503e3d3f888b715fe1fadb2949ec0d1830d5f296e288bb9585f3404a593577c1a835241238bc9c0b3a23dcb6fccbc44dc089ad5c55d814cd3f249c07c130003227c257ab5fd5523e81ea03490e53ac3d46556ac94c4eb19e710e02e7ba82406af163c0ae214b50b4dded70c926efc39e20870321e571f0ecdc26c8bb6f74fe00000158000001030c676d7453503184a38376ae2b92b2f6fd6be741c328660ad8bff40375eac3c0001dc9ff000000dbe41a7ede72b31647886ee50aae0e29fe774ff6f429fd1b35ac81707f9b435a872c145aada39345fe1c77d9c3678e30f1668913b1517c75162cfc9b923c72d0e9c877a8aafe48a2cc05100d43198cff869f6bd4e793e73a089c0a78a843e79047e2f96cad714ef689cbdf41ea2dcc4248f22141b05ceaa194d4b97b49f7769dc80d53e7d9bd16680d87e81307cca5df2f2f8eee88e3432f8c2a67f9d64d507f0698e429336ea5f0d040955d90fedecce1cebce2571491cd2c5bf19493a436915b4e3774da01f1110decdda95d2766b1d6b3b3b2b63cd8e709ac6e010000004d2876c52e75b5df7c71064ee4e9a6b2319c5f36398fc0f9fb7e56b082ee9e725c02e3e02800000025690dd29ab3aab3e7e81e808f7776f6f3f45ce74bb95d6f086a6c92f4ff715fa61e5875f4d1000000f4000000481301f0c83c8546b3ea5e84865c1df6841479930e07ad1df9e18d373f16b27cb94c7bfbf2000000207dd3586549c75597d74b22c6a9b0777788a942542d46a28ee5300de55cf606a7000000a40d6f8188fbeb65a0bf8b2f94efa1c78fd05d818a656e555aa724598ac6256dce871e82420000007c82b760d3102260f7bc59daea11a182a05ad092c94db0754019990293ab9e45b1410b8e0cad0a427953654bb3c3fd5453e64b606661d51dca4b7a06156b15344bcd9ddd658afb825befc5d4a152024d07839313caaef488027bede19410bfc393abdb23f84274e9d016a357b1aef9bd47d07615432f6a1dc613884b240000014500000060060832938390547bc49e151ec9761fa5e01093d00726773a19cbe6af345b29006f144249000000382a808fef6d2396ec6cd41df2a36b4f843c0aae631ac996bd093124caf82fe3764f89c22f14ca3089ed8824167153e56a2a08a9829a5b9998000000dd10db2b74154f8a988ba3f1558bcfcccc82012f008ce4910a14261ce37797547656a3bee3000000b5295af43c6c9dac139d1a2d9974008ed63445ddd76f9b3046b68a294eae2baaaa72da6d5bf59c37682449b403fefe7ca58f42ebd329ac88f3f5eac3cf786e85aa8659c6713d9510d5b4366358c413359c6d921a43b4277d1ebe6ea4860ccecc41ad5a06eb80fe6d330e05fdfadb46313178b9f832ec29fe7961f63ef468f985bfcadfef89c950db8fe68165e8a3deeb156286e38af04f6d1e94937a956854c515f543058950f5f1a5a4b36fe2454567e978a96fa747000000920000003923f379e745dd7994529e21a7107781543ac240e6439af3e547006361edf0cdbc91d0528a0000001178009f83577d4378d43b68a0c2abded1ec00000051194395a61083e52831efef6a68261b5aca3cb86cae1c906172259ec5c01d2aec76389bcd00000029262adbb3f8b818c9b9799af8b9e99d8cee2e9f6e179e36e0354b7891f26f5797570d42a962b309463d000000ce0000003e2bc2a25a813eaa0d2f24189aa3dbb526bc5b680f1a79ee3905d50e730134de5f4fdc89d700000016ba61167c533f6f26c09e4d9390fe28b26233475a9069000000882a2e803ae31dafc0dfd4daacf30276f7e184aec66a5319917f13170725e8c763a2af2a6e000000600352d4e88df8a380a4ba9c68ba848030d5099439fb66df0ac17ca6c5f68da43f5816ea472149b5bacfabb3e9cc82dda4e12066390e5f01eb9924a1fb9e5b7c075793766b7e2889c1a9e7940f15d401f395ab4fa5e72f09a42cb37cb00a3e8c8a0000018b00000093298bba78d539a052eda2c38d8dd17fd2fae3c824991927a6bf3edd78a5db52dac0122c6d0000006bba3b5a19636cee8a61fe116f42276e74e070eb11a1a537a5e689a4398a04a4d83fb1deb938882f4ea68a0383133d2f340398aa99083ecea33396e6db8e47a71e6b25fafb3721f5a8024f4a7cdbd6dae8fbfcb83080db84d27261d7af92e4fbc6b9a47d2518816078fbe3fe000000f02b1d59d54969d8b5459691811ddab7d008239004023f123ad421b906fbad2759a7a0c9bb000000c82524f4d441fbf7c018ad904a9c6d30f26bfdd622b4f23d2b1eb1f7ab8dc2fa92ddee106b561344cfd5e7636ba2a11e56b0da1bdfff171a9ffe65c78423f31c457c5532ff84035109d62aac21e465f5f8e15269464db648c1c075339f192119b3c2f3cf4ff62542d02d90ebc571ded46faed47ef2cc720f819d2bce1bd3fbb51c96f96b73a52626b8d94ef0f39092144ac9a2279ddca4e8fd1c4a87382170129dbe69b299f15020715760d63b87c0e8acb1a27de0baa8ae756cebc265ddb8904a880fb32eecc690f400380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b0081d7e95baf6d35c3402f656b0a6d7f1805469bd1be8b0a0681d2af278728217ccc4ca1fb667ae515ef0ac6f7096e58a61ccc4b5b2a68270ee8b14e4063a0068658c52ef3e0842df098d0bbcf3e2aa96894f3fa069d772d66e557b55d7cc44dd19fb8c31791dcabca9f53d62cb8ff9a0210b9b9db3f036e8562fe750f8113cd361894c7327bddab3f4d20a8b0ae8c83a2e8e9a951d2bea777287a3217f85507e588e168e48f895f892a03390a3147f18000000b011a92c6215f833d00473fb90336a1a73868c088266f55c84eecc99738a40684a5c258512af24891249f8c6b89ad1a81b1f3611f9bd4964916b44e19088be1ad1e76e270033b3b2a03720a59d80214101094c15dfab9ee2e461d0765a5915989ca9aca18e8ecd332932f1d50d31c3ea9528bbee04720290b556c161a901c93d7754a22e71aeb68f080886c687c9a572252747d59b6424857d8fd767856bec527173b0bfc8b41dd38be7b78df5538a7552000000b011a65f3842ffec616b990f39fa6617a520ecee304a59d8af6a885786a03e4ac105447a8eeb41cc1987a476d7d5fc9c89c958a6a5a68584b7f03a04dd240e7947dc72f2d5a3b0ad0888d095e1db065c4cb25c8d7617a7e6037ab6c14fbd98c521690e5e9011aeb7e55439518b825c7f522cc8f976fa86cdebe139f891ef0abca66bb9a3318f10be0bb81039361ac2256a2ba93e045077c74d4aebf58b2a8bb0ef4b4366f5aa19bb08ac85075f5036c3770000021c000000b01b3a77ed158b4b85e6ab1fab8946059b88f504c6dbf7894b67b8b5dc9b288291c65ab85fff9e053ae5703da171e5a4e172311d0c087a2aaec14f3f4776fa63b0eb80709fc4c4cfda15ea36ff3a6f10b3dda7a07421f9338a8e5a1f33ed4faba985ec8bd210e7d901c979b3d44f8f3f0b1ddaf796385b9554b022d18a8afdc638d1110848222d8c43f384b0488e7f30612b122418fe30e00d3580ce5d8552bf93ec207814b3f5659268186461c91bbd96000000b02b1a31f9c13bfe9514e79c9f038774fa65daf095d813904de66856825ed4704287150f260eb49c042385325ef3720a7d8818ae59d0cea2cdc56d41ac38e61f274bd66cfe0e923a6a244b2ced547d99d7df778796cff97dfb12dfe8f528d73da27bbb737c7394a6e7e072b59aeccfe6311b7d69a11dda3aac926e46a6f5f059a2788463dfd6280ad9a3f4da5d6215e818243af1f51e1c2ac2705562c48e6848e3776661262abf1053266b18b2cffa1a68000000b025bbaefbf21703a36a7797455d2ba86fe049a58eeeade8c98126b47ce00e9c77841dcded5ac592ed87a8f34ae597fbc202ad95a3822173a4bb0c33d346fe45da25d840fce471154038ff30c453c230627ac09dc776c20d09bd07b693f5f43f080ce436dea05b2278a5c2cf7d9ca0e9382fad0465fddf75e6f58a9e0ae2385486cb7face0bc7f5f919a8dc5accd7d81030672b6c9bac08e63faffe2d40b4755413ad4d7fe0834867f46b277f72edeadba0000021c000000b00369a714bae914a042de119791b8df8159a22e6c1e2aedcf0f0e64730b91a6ea017c03d6f0ab19d7e2f865d17312ae958a72897936f0ae6b8ece7cfeccfdd751610719bf01f5336e79c7655d6e44db3f0d82e2f017125a1d2307e3161a24b74e865f4152f9221664c2a0661d13126672231ffcf8858c5d83e59a1a0ab4ee693175ffd7925533af6079fb04fdcb57e49e20e3299b69b71e43752d2a3285ab1114934080ed70771e3fe189a9a807250d13000000b01c3f8c04f6166352650ced76aa023e43f7fc80db0af854a5af64c69fde16595e6c6ccfb7d23337d8eb6d8d83fa52a768fae74656a74f1dd7e33bc5ff19d35533bc31d520aad74a5fca680a56664107e5115c281022c27034ff3c6426085bde04351b49a6dc8bad501fb024777e53e3b00195b3123d7c0996f42ffa35ef5f4ed3e2d340148e51d55809917713c88332770bf561425133a86d6b168568cfc9cd619f2130c620a21919d48c71d4faed437a000000b0043e8c896b9827baec0eaf62d3891c1660e7d0fa1d28aed67b579dd29954d190a124c0d6cdf80d22e435c10e72d0e68b03eaf0b27bbf83752cb21386f20eb88d3468e70c0f27584b8006089500add6c8c22302167549575cadde664de9366a2985f75d726f0ebc93c7b6f49ceb8cad13011c489257a530398c2091cab006ccfca42d3a63472a58622f4b15ff6fe6c2bd045f91ed3143b60ac5d2e1c90664270c277a08ddc9ec053b6f4905a1833c4f910000021c000000b00dae24c6dbb8d4115e357f3df89c6d33dbd672110d1106d77651d24b4b0aa6a2d309c1bbe859b8c40915f315d269280eba2a2b838b6e47245c384f861f3a1855dffb53129e39e31ce5b77c838ad084d7f98e47e7600b4ca07169f6d5110e017748da2e717b8c8a987af1a14b6ea394222f73b54e3c50c8d496c221be05e2abb5f3e9e9f0d80d397856081452f8eac5522f1b22ed8d9ead851f376968227419da0cc1beebc0f3962175b82fd2611f7009000000b0255c6251b5d59455a2c63fe2418dd6dec026f3ba7d6f9a98bb574792255a17c1e03796b54ba67fd1c5b3a5758e0a019269a3a61b5be316c7c52269732962eaa3340d17817a58ae8da38e7a847d7edb5345ca32f9fb890e48764f93d6b7da5f9a59cd6ee8b77bbb5e0e74d22764c77893140b0df5d0c529e1580bfb198950154736716592cdd4442e83bdcfecf284bd7f28edb3e792a6cddd80835345c8a142308850fcf94a1fde7c2e3d476c82658ca3000000b00cdcd79b88eda22ccdf97bedb0db0c802befb672d912b6413beaf08391d41f28a9b2a3822cc4114c824bbbde432659a9731377936c3be261c466dc6bc46f9ba536f3809a37c75bc2e04dd4990b74da29c94758849aca76a33b6301fbadf2de6ace6189c77214b481ba62a71b6a4f288f0bc5adcee6575311bc0a818c502f507c03a2ba695ef3746618e3751841e90c7901d11903dbab5ef02a6710b6e1a54e72b88cc449402f4ef081f6d3fc1c1354290000021c000000b00acd54425e1606dfe95705bedc4ffc47ba3c934bb7fb26bc22e843848e542fc07c24587c58c2d44e84868da47a17e5620e742a33a4de4d195dd05c551d82943473b7f31706945ccfbf9ab8d63c52f554ed4edd221f48d024c0d5f7ad5ec8c79fca0a027bf845e5f4bba1f762c101a1de0e979644124215dddb7f8b48a65fc5120df079b0345268359c9671d620f1e0532826455dcfa58d76cfd3a2f6919a0c082e48f35bd9abae1587c0eb40a28482c3000000b0094af06a522ba2ad0bcfe5df418346366f72c4d1c2402a0631198c76ea476d234998db4e75b70add9fb0298da3d36339f9a2f07a5a50bf59b15185f8fcb66117d28c00577cf35f5e7d878ebcd01603499d837aa50289e142359eaadffdea829a671627a48f5ca8af4fa5976c76ab90961c248d1b9aab3fe3e51f1b21cadb2dc57984fdc3ef9b192711468f70ae2acb872fe0754b279d9065043b0204b1c3a7aec40d71a65179085344917c36102c0639000000b0214c9e9c4721f6b36e811b7696f70e85b52291a7274d6c86226d171f4cbfa2b24fd1edc2aea14b690cdb3054c9796b0a3492ae798e000b5eb5cf6706a2fa3dcc1d64a630933d2354878d1ed4bd027b551599398d901dabb9da3c4b78cc36e32f740a681e18ef71f6b14015ea75acb6d3015562d42887051a1b6af550117eb739a9913743fa0e017c4ab53e15f22066f621d582b3b334885ed6b36dc0e500ec9cad34c4d3afef4ba877e58d5528fdfbd40000021c000000b026f3bc295281f2d12fbda88e7ec474b658f6dac186c03cc4fe7e08aac14e29eca8efcfc3cbd92961c22a007ca72d6ededdd1a3105caf3fedb449e39c4e3b5381f118c932b6c0be72c91ff7da56490f3536439f650a8d0c6951e94d6cd930439fe3fc568076f08d0914eaca89b79f289a0eb12379446111bc04944dd204f1a24bc137fa1d05c0da90ff391045880385b21716be8c1edbfc5d5c55e125b4d10560cdc93a006c1a76981f8f44ea28187062000000b010edc111750677293d058f04fc858849008e22e6781bb40e6edf262f6e2fedf3c7a15a91c33d882473479c928f05903ec7f72a6064c09fd7cf3029b66e15937daf90560cd18fed25e57cb2eef2b68b42a1fd026032757dd22d22abc4654ee0ab3e6cef413f3372ea74a3b42c23a2109b0dc4d8e803e7c7871436e4605b9ab1c018e61407c47672bd96d4f989b270ad630df2f474e2d7e52cb73c8232acf2869bc25dde7571b40897ae9eb7ebeab92e6e000000b0175b2cda1e5eabf4e8dafc2cd27002d06da5fa46c02834c66b39812550383a45c292c768b7fbba9202668eede0e055b7ab964f47047e069d96fb84cf4923c302e6ccf707008a708cef74a1b7b2db25d1f2165e2b78c0d4cbe22989ed5ec41b2bb878c3fd40eb3720bb171a64c839fa4a1f65cd6c6fda6df164150bdbed695133bd88a4e6970e84e153cfb34b10ad31cb131c7e4049026b2e140ab5a7b76a436c1efc6f98843386874b820691dbd1aebe0000021c000000b0005436c2f8dfbf1820cfa2fcfa48424ce773a82a01a9701af93487cb3157c4a48577189f62ab400f20a82c9540a1ca5dbd9d849e14b25fc7835466f6f5c73e32de9aff35a4a938cdb9962f96f63d7713dfc66a3aa82791eec7cc88f7f6f9781cae40b00cc56f802509b7d1c1922dc1b0287b0b2a6e0911f1811f6ae1ccc3c3f1b40cb207b2628c3f16bf2773c7df56450a750c74cad0234895f7d70f4d60cf44fa32acbfa71725b563a5ca6daa6cd741000000b020cb827401c97e77f0d1c93510df02aeb50e47e5b203628054357b2825ae05d56e14836994dc6c390ad425e73eb4717110f587c81826602086b10a0be5dfe3706b7ca9d20596a87802549c0d3a49e31bcbe282260dce8d8b6b598b9e89fa543819427e6c48ace3ac8305c3f582dbf38c18c8fee398a5673f5f7353d3ae36924b5004ac5a2a650cb77b1125f4849263aa07d1afc4418141ed80595e701ab72da97fadfeb3b2aa67210b39d0469dc70f6d000000b02051863b5d2559575135c3590bbe0eeb6fb3baf42266990d1f8598b1500e8362ae0a59f53a464348f1130758b7973de948b0dddc3e0c4f5284d63692b6ec99c67dbd04b29feec4f03be003a69152f8f419bb51855bb471009db513684775d5a6341b86a9a4e5d945b4c17830f350509626846e262fe259e255e93517961a9659511d59cb5c6d15758286212b324a544819789c5ae9c8e2518d7b2ae26db97f31e4a59815828e047cc7cbee0cf31bbde50000021c000000b012ebfa9306b78c99bee2a0cb69b4997fd18fb7fd0bc5fdcffe26d5c26b3334fcce327343f27e8cde1754c20eca86b8ffe4ad5ead132a3fca5dda3a40bc48c984d2b4744a6b2db0704b9b9c01deda09a43a9f9d231d98cd049dde5fbb5b60ee5f3a186f8e6e94aa8ade39b5639d8628f0190c9b62a7a325e7f0ac8b9101716bf3120521ffb110a3203d7eec873e38a4c01f2bb6759987fb34fb05d3dd4a6563b74f816271117cd7f84dbfb1a3bafc0cc5000000b0229389c85158bf3b5feca720c7708b2fcc5b1431d3d328ee4bd89ada7e6222e1b836c70dede217cd688f18014887f7224d923468d90b341f1ca0546f0efdf6ce716bda7642faa79bcf6572bdb56dd2449c7bf5afa33939843a8ed11eb27c8bbee97b4d259ae68272b72cbfb4552dc6171d8cf90f374e1ba72907a5ac68956b3fb30bbce63947035378aca7d0a3675ae5172936063cf3bfe2ecc4dc1d0088378e3f1796163d18eec7284c374ef571ab08000000b0131743e37bdd3c80ef7b881ec7e0ade15c324c2bb69d1c0d17cdd0d449b3f7cdafd3eb9b7030aaa4201a5eeb89546d183240bd058628d9857c7054f129eb8604d25365a2b501edf7ad58e8f0cb120446486711cc34843214145e694268c6d953d72ae0115f91aba6af3aa44ab584360728a248040512a5208d1b492018e57fb1e9a81db45afb9e0e56cda199d61edf2229eac6a92b03dea4571dd12e774cea2925e055711538f5bedbe48fc286f5272d00000f2e00000172000001152e7e194cdea78c6420f903a92bf0ede289727a4c560a2f90046641e0684972c90b8e23c5000000edac28b03abd7ca5c7b19ab6d757a08606c47e6d71d0316b15b1b17471d8dfad73744f124a0a1c17e9dc0f1d4a4699e20195f4e48fd7e83ab01dccf9b80aad5f02718c58f4e368b1cb1a63a3e5f5a853d65f159e23ee318528d9f791e37e4273f651bb7a6e803aa57603e67aca93ee063118aff19a283d8bd4d3892b5ad005be3d31a3cf7ed1d6de8f23b255f26699ddda343e9be1fbdad951ad297bb6872787b7312851c07c819360f44f17b9a54ee7d6340e1959bde5ce141a02214b1453e9949501d83284ecd0e8aa7e57631f63132ad8f4e7392aa61e4af4f5ff01cfb9ee34fae2456daa3bc545af5593b25400000055175868229d59afbab6447f6aa4c96cbf77945531ad6124a5bd524d0d7bd9ad880b95230b0000002d8db2fe5b4df329bac10df6eac0bf9c85c00c8b1d30ac32bbc3f0ffac8ff6ac1540140eda280f71e401fcc4db02000001930000011303b82da1d9255a3b380af207b070d31dc1ef8194634a56ae5316ab5559322abb65eae5c7000000ebe15a8e1bd2792e62f244bcca85aaf907b418edb4255914912068126fb7cb03c4578cd7e3c97988f1aae76a995f3132d65f9d48539479c6c1fde14031fa1f01b9ec0d04c573becaa843f861972ca7767cbb88cf37ea6192798eefc6920264263eccaa7f8ff28f45697ce091a255055c17c2289b82945c3b991ece66550d8388b659df12e9c5d2b486cd61cc226cee0568992c3d2fddf921a56f0f677d7d863965737f3609f47ac77ca27f52dd865b7cb3efd644025963d6b1d1f8bfd5974c48bc78bdf1398a07ffdb3da15fd857de7c4d10a0f8fc639c1df074dcd3da55badf73eeb6378e1ebecd765b07bc000000781989d82dcad7ae0c61f3b8206f934de08e36a7919f75c7e9cd1d338cf77931c8110b207700000050721b8f7a89de5e8c368f6d2202edc39045db8c2982f716f457c0137c038c21828af8a6a23c599dba974784ba28c2af414f5dc8acb9d8a7603d301f4fcda4eb82717f14e2a414dc1c4075df010b95ca5f0000012f000000331300b8ffc9a135f05a78750d599b64775305f09813bccc90ba56a0b4ecc6e03711086e5e0000000bcc93af235c347f1eb02996000000f40de69571e5c6fb514ecdbf14e09ceb66be3d226ce3d4e64e04943de35196382309d820d5000000cc5fb1d1382ccb5cd5f9b3a8d232685d4874a5e24563e4c658bffa16f4a9a28f7fb4510475fe6407a830a166b912c7e496abc911bde0fd53ff3a22043a806bc61545bed97a2e2ba206bd9add68e27733beb0385813040c9e60498a1dc091a0498aaf358280ec486fe7ea979e3beb501f7ccd118a9f952a789809a26f3abb2a5db6b06e56d51231225e992e5141fcd563c87e985b5f908fd4a86225bb377e3dfbb1dd2a0b7099217f84af856b3bb38360cb4635f5e3e175c66ed5202648cdd4927e50f0e03a1ef94e80759ce2470000018b000000920fec694a4e4e637e98a49003b00134233a36074837254358bca612c2df357a95b6fc0f990000006af3ef07aaf94deccbaecc47d709639459070d1b871cb45f35bf0c80457590d3f041fdd0cd6ce0744d0a0610ed0312887f2f4cb51d7839637257eabf5cf44b7524327637b2e184216c8d59b474ddf0a739ff7450df630586523880564f05500326d4455a546c53800fc2c7000000f117e11f6aac90eed3a2e4334eb90ca2b7a803589964d55150858e65312ed508931f6410a2000000c99430ca69e697d6c8635223f50dfaef37a7cbc4947e2df7607cddc38e9833a1ef392441d153bdf248630d0557d83a3e8704d10d574fe1a25f073d02e82886b6a6301da8ee40cdb1b9596d3a849603a15d1f3d18c0e911ce1607ae21ca0f635bb5862f4dae873905399138dfd9cb9b9282497dfef5948188a598e47d2e74238e3ec475e9d6c3ee9a928cb7c9d8093ae5703c7e3e65c5991a48fcf2f3f78743a8bfe2788fd5254eb79e55e1abde53b482cf2369c4dda73373928b7c01ee1df5d8793a4cb43831e0ec80410000020b000000e804ea7194bb36f51f8e174cf8190b04a655724ead53a777aeef019ce9e040389e126f1f32000000c0eb0a694e0390e3d0b5a62cc4ad8e1bc96352539246b7f045ad068c2b6671672f0ab1ee8a571049b63599a6028924cd7caa6c03f7ee283bd8c13566434e0bcb7de1f9601ae942f23c989c69f5b48b6b378bf0e658ca5ed39b8a33f34654b4721c757ce175474f9c26029e65cd11d533af9ba8a236c03474eca2ec102cb3bf65dd66193915042e03bb3efe877e6cb504de60457fbb0a15e50e3cbabb538243561cd397257ea684ac637f199e0e129a64be1e6b980d70c89d47606cb7fd3fbada640000011b0ec24b2d4fe48d64b60ecdce6996ff7f2becbf2c44d5512003cdc309b643f900e800737d000000f378ba0db20d7b2c5eacb3d13fd1958b80af3faa6ab386971603171e0d89d590536b1f078fb5e8ee8e99168cee95b1e0975d09a022e5c6025309969be99edc50960b530839a932f3d8e8dbf415011f38552d559b2fe8022ac14a80ba338aed562facefa4aac51c4b85f1a4b0f332d32a09ffa3a750a1b2331d32f734552a36b080882e037ecde8f3f2cba9afce01644e93386f56c01186f5fa3d81e92e5fd6457dd98f259a42b8b67e7aab4a6e2da3122a88edaccf10bf0cdcc46364cf5e62b5621f6a8c898c1bdfced128767a81eb40b2a4ccc849dc521b82be02e1f99d311edb821dd80537d52a0965c2cdc6b33d918d6b596b000000a60000006105997d9da063ec10492c8489b8d9b5839d97f07421277f9674084051e6f05597185292b300000039aac50a73450064c027cb125110a22463d25efb5752c29b902a9aa615f1a62a21ad95f039ad63bce7d9531dc02ea973b12e7a6e0acb613575db0000003d07e0a6d03c74313d3de3599b8cbdd7be8d7cd11fa6236c6b8d93eff6d0c04d8102dd937b000000152eb42ea203d2f87c3fdccd3f3facc70180ff6319ab000001b8000000db05b360a766aea8ee1167b76dbb6a83fc762ad82165ed8e853e1d3d6cf88be52da5950394000000b3d27abb582c80510d960afff3b7b595ad87327260c8dafe293370d4dd27fcee725e683bba1fde777f05281c966284f9c49f7e3aa2ca9cf688105b859987656daea9fb581e7678fab910c00214e29d49fa6c1a89de2771cccbe8222ee62c20e4ffcb75e25f5df1f10e91b0ec69b3aae64fb324b858d86316c4fc3961ef8d414c3dd1715848e10f653599d1594268da787890eb07f3c36d8903fb20433253083406f5b50ac6e494c0e39c6c84bc23afce76fd5c94000000d5303c9e22fe95fa3e3789a00209419ac0fa8c985b7f8a31a81ae85e049bfd330f6f6b04af000000ad86e79fffbdba4df4d847a2779bf3287d4fed4053ea52fd2a95e39303572258b029d53f5c17a523714cb2751e4dcbc10217d763a1494b011da7f9816abebc78acad292f748d24555be50a851c079b889de47a8ce929919c2ebec7f11be88fbcea3d4f316eabd5be826bb58ebe7e3ccd58ad895990280184f71d00c0cf370402aefc4ea02fd09e3cb89ce4eb2d523c55a3ad6230389b76b579242edfdae0683dea343aa9135be94e9103903006710000012d0000008016105a16340204d52a575960418b52e10f8bc54cb32635251093ba9eeb7ccf4d9600382000000058c4888ee362cacd9323c571afaa517c6192fef1af95a35b82a09aa611e4284bdf855ba2e9dde9d957d7f8fd138c2967a30580ef57ccc8ec6691eab4b60e87aadf3552001aa5c1dcc6c583df216f1fbadd9ceaa7cb9c61b19b000000a506541dd0cdc892ca8172b0de23f2c58a0804718d4559e4e6dbab5d7ae7c2dc6403a5fb080000007d8ab6b912e18159ddb511b4b701bd02c0dca39705ebe1cb72db9d75387243deca1c13cd4f566448f19976f2958f92e5f198985388319aa2bf4c69a721174d3aa47d0d36e4d6c85e4200be7ce8d8361cfbc2c8c1bfb5eac21bd48e1daff03697b5c3b5ffe6549e888bc6815b6c9922f0841aa70d8163c69372ba818858030000013c000000a7299abe2e627221422b744f34151ff209616f6fb90f89620b3dc29fd008f1e4a5e16b47fa0000007fb197c5222f0fec211e77ab056baa0e4ba8b122ab4e07bf8a5876d170289baf62104d2437cad9493ea4cc058b6e3340d51ae8865b08cc4d1848dff101c34ad6320c7f94c46c083a5047b49722c8af370b1c62bf5586afb5aae576f759a3288603f3b8d1a6ac20339766d1ad4e45fce640a897a0fe8e8ddc53cd5bbd4c23bc420000008d0bcfb8ade5ecae6c6348b0f9cba1e661fa7877118a714bddf92c12e44a1ca5b2ae5b72a8000000657ddde276c52d3c5b192ce2c1cebfc2b0c0edf108866d0903b211d4403e114e9d243829ecd75d34cabc721dc67243340f396bdd494867e249fbd4393204003b609b62c5f4dfab0fff44b1f046b0c565e7520ca14971f0c6a9183c83029d3ef2b993d070469b00000109000000460d84a6953576b079298096f04d1bce47c21d5b71339a093a85efa3527c6cc1ad528ab84b0000001e979ddeda2ebb0c740a4b564fa1a23ab5ae084dac2e91b343650fda0d8df9000000bb00189662f16f69d7a684b10a06440f99043d3b607fd16e6dca488c02e63a9e66cff0614100000093bede4e18343a6a27cb9643fbbf8a32dfebb9e019e7c147a14060c6df54eccf2c7eadfd3d145c9f92d6f5a32746b782094d3f4cc0fac738fa44423ca4ad18c9b60e1e664cdb8f05c1ef5db8ac8aab11f85585f5e6fbd385d6042c196a22a36474774fb32f67ee2ea9c42575622439b739a89c65616ad339a1f0db0203e6fd04c22bb80010f44d700fc5810059414ec86cbfeda500000168000000f906e8b61bc741ff466bfe557b4cc06d3142020e26b73a5f679f0c5787491d59a3e32e6229000000d15bcf18235c64f0a0fbf702596a9b3ac94115b6d131efad243ccfcf8433de782a0d990a9fca45ccf8a51b7a4e2f801115d43610bab13c56e18065f1d7ff0ce9c87cbaefac62ae7824618332ef545202ac9caaef2e376701b37690ae158eadf5dc7d84baef4dd606d94f66c3fe899076ed990c35464e9b9458a8024f4a8385a1ee5e17b1bebb2c27f1ab56b534db7b7fbde6b081209c05bbfed644c7f13b87b319580fb0cd1f55d2e3bf2c4a8e89aa4d74ebaaac952366a1533d85a947ae2fde6f582b2f7b7ee946bfa71cce6307c4943441000000671906935f4ca8126e15e4690d2e5344e842c348fc086af80f4e89521c5613868544f504970000003ffd2eb4b663d75f4785dd33c55d9a19ea61d875a3e9256c19b5f52a101d4fbaeaf9a5e368dc05d36de3e489e35c86cf6b7b78e35cf310646522a153ca4670f7003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014ac437ffed6c42649fea7303caaf694149c0f49b975392d5684e644278f9c6e370a3d472aab6ce7660dfe717de8d9a7bdede1c8b8f8bb0bf106f47fc49461dc5d444425b0d32a688291c58e3745435d06d0b02bd23de6f032c98701445a98ae60baea30f2c86a340fcfcaac3b122a9805ed3a5c20478e982ebef1da20b0c192cb6ae9ce1f7a74d36071486b0ffd9d4402977512ff5bbe8b3a88847f8c0759b5433bdd0b84eb638880f3c3cfe8c7b568000000b011e7e496ce590bde8b314a7e158975854e35bd08096caeac4ecea8447e99c842d0c51a2f61f4b748f13eb97a32b7a39618a666d1c2d84cfa3f41675ce1a1edc00f46f42b4b914477b6a12940dfa2330f3e0a9fe862648bba31e4893ff05773d66deb1b87968113db25c5d834e8db4eff07be843136b216253af40b5f118019eaf8cc699cde8104e95549035766a329a90471d16d2a355f436856e36d5b078a38599dcb17b996452796635ccc13799186000000b02a0a61b687e31754c6868055452b01020a3ce3b0f6264a701ba225cc95d081a69a87693fcf30d4c633a11824d887198d71348d7b15457be4badb34039ef22df42d8505dec3ba7033acfda094020fe4ce8e02bf97343229a413cadf2c414d71b94f922c0619d8dfb9d7379225abe531910f168213f3ff4749898ac04eafb8930fee3eaf8587aa15902688919416eeb5d410b00c166f812c70e268de5292efbf29fc89c952dea59bf8e913db8f11274c3e0000021c000000b0255883fe6dbbd4dc0002b2be61c7dc9dbf1288fe46828ef32ac115eebe5dd14b91efeb96996dbe127a1bc8e4a04f18a2d8736f032becda1a65f7598265c675caaac157071b21108069b7cf4689b5b3d75f4229b3a8ddb41e9d130e59a07dcb7ce70c92d5eeddd9f11704c470c6742107155118c4b90ff8c13dfb037144af8f51a2d2f7241d14a6de2d2efd36995dde4c0aa81d17417b841d9c6d646cc759a3ec271223fcce5c622fbbfe6c2b64bd02d0000000b00eaa6bdba5414ffe5b647a33783cd6d2b807921b33baf3e53a35668fb8fbc24472bc3d2235ded304554727688253337ca6a5f2aa8729780c400e56c7cada609119d65a071b5ebc9606bae0b4baef86475d8a1951668eb0722832c645b4da052b87deec253426eb8ba09f4a56ee5f47051567ed7a1fb583191675bd30e60c551a9988fb9d3075660a30f08d12f86693812b13c7d1c7fb726de69ef1fbdb4b08a6d9777920285dc01c3884ad45d4419908000000b00732e01ac48dbb6b63a941f53898402e3e9bdb94635e250f3f8799edf4e7308bc45a62635aebd2a1a4892450076fa1577f3b40d0b9c1329d4c2d96bd82c74aff2f5a22e7a0f52d57e51595254df8ad28833e3b9b1fb63093def7e05ededee941af43e46cf629082c2998e07641f165dc0111c610a3b19e10767e70b2bc1e0e3ac4e464bfbc856b8d99ecbccc8c725ab107377e3afd4a1ad0d10fa28ff2e965eb7db1a077b9ae3d01a10d665759f090cf0000021c000000b00fd3353ec40f32ee061467bd65dd7a9a4db974dc9bb11a23795546f7acb05c1ffc56b8bff3607945a74f94ade0cfc97ab88fb4c1bec2fbbfdf66dbc0ebeeb117c55fd2333b542b02ec8728eda4ceff555f26d8716fa8c9c2ed5fb5f36fe6ecddeb01bddb3a8818a937e043f6b1858c212a67a29c773a7eb1de5a9e19517c78f2aab643b0b68359d398fa75993102a5202390cce3107aa3ee6b18e67ba9b09bb7a7803b09ef8bf02af0f76ed8cadf48f5000000b0027d147f84efe397ced437bd5f95df0dff58d9f3947d71b3c45d79e3b7581856aeb27f4648389a8c1d915456641c1a0a0990073ebf920b67d79b9058616a7026c6003767edf18a4a4ee742d3e9bd8860e372d18bf48a6f2d5dcfa2cf18a0bc6a9b75e445aa52da70219386d127bc111d0ce9dc08924e42d5887fb099fc360be046c0f88b604dd0a0a8e7eacca9ae08771ac34f0092bfc92b06589c24f7dfa9053b190191682019e940e516ed308bac15000000b016d5153124a68fe9cddc8d1cfdb80d594fce6eba337543a0e22771cd781ce901c48019d4122dbbc8aaf5943cacdb76db77f4e154280898128946ac3e3194a6e8161ec41f16e16737a83cddb4967589daffde567e93bcaa104a1790e6c1596f2125f9d8bf8107dedabba1bbca11acdabf17850fc35bb6e2491bfd4022e8cf2f0025f14fb762aa6d05b81afb9e766f89f417acbca79a9394302da3ef5730159dbfaed165a8432efb6da419c3bd5427314c0000021c000000b01f821738f1caeba0f5b78dc42bde940e1f3676b280fa6e174437b5c3315e6406f5e2fe51c92eb71d0a0b3f9fe036134c58c68735450039b8c824c15c024e24f7898968fb02dacb79a584c356aad1d855cc2cbd6755533781f7cc409fc6a9b3172a77a9adfd49f0e8fd4c2f103924f18a14d6fa0625de97da6e16c74784dada62314b386247e3450e05bd2476c42d86cf02dec5dcd70d8cb0f3ab747c453b554dfdc0e8a010222c15955521046426ec6a000000b022ad2e93ba7b04a1cbc6bfa87a617f83430a0a6d1ee53f55fa4a389c7a14f2bea3266b1866345b93307b876c8a13724533de87db2cc5ac3977516ba8b08bacada8c3118231a1e859c9044effe5c3636bac0ed9562c9de981008d208188c433c4839a45466fc2a3fd10835958f2a49a4506b07b9430984b3754a843d45d2b4b21a483b44989dc5be617aea389045c108c29ea1dfc98ff18e38870be3004d8828dd6a6d669684a8051edb7c1f22a624f3c000000b0114fbc1147203f7c59d351cfed9de6a882546b17b5d02d65eb828a8ff9d76a10fadac803587b0c952921c37fafbe675a34e121954aa0fd7d9905200f3a0d47036f49b1eb7c2b5f6a38c961b6f87622cfe044078635784d1559295f469f5c2490283cf724f18aee0c7a487caac8a0c7b529dd0f9bf87c13c306b6bffe7b3db62d29b52f26c6c57d6802b1d886fe2e961413ca54dbbc85e9ea14c5ff8a29ed2019fe66feec00ca063a340ef5774d3c2e6f0000021c000000b01088db56f1cf8e6bb37e00b106af697cbbba256acb3cad5149c60b01cb2682ed56ce5c3af124017aa9e5dbf603ccd9a488932a68e0f14ab137d62521352eb430164c9f4b3c2a9b8699262c74e2b756d3d81c58a374fa8b44f80633c5bed701dd115a0f7689a706e145eb919ec063f71a2270db6b3269e6bff4de759d818c3b0ded068ac9b4a88c487c5ede457bef82d400f9e7e6d6f8becd9f12fcffb3df5132ac9fc659ce225a6db01984e53ae71ed7000000b011a9d47debf2a4be9d147f140a1d9796aabd532895395b1430978dd0f9eab812fd5f9444930a6233a98bb9bef06b5aa975a7e28640844a85a96652bfa2c98c27f723e8940c956b617d8c333f9a7660436557a8bb9cc31527e3c6ae71016d1312046bbc9b1047477e2882396edd9da2e9133f913c15450d920705c917b6378de750cc0a0a2f477048b1d50b2566519ff3059fad594633362430bd45f4189d36d544c9fe2e99d63b1f0efe80b819ca7ae0000000b00307d543786c1c4056c739d9d627932433bf7b6c83b37ad575c9466c283b976c54deb14d14e41aa092f79ff5e0adb30c9afcf4888f6ad9b61482bb993ebd26075515c488057f67df6c85d3920bb1648e8b481cc99853dde8db193e0054cc3558ea35266e56384c3fc6bfb81ce16271380d9326e3a6c47e02407d57ba7840485d3fbc781d9a7d310a1e22264144221c2b17efe29641e92afac0929bf35e65e2f089802533369debbfc73e38cc0a49ee010000021c000000b01c0cd9bc7ba0deb785e6e4a001ad27840eb9732187e90db9cb84c21a3f798e1b3a9a70a2574f4b62ca9f9b8d716270e9a9ef9938f29de567561218d068ef08f921c13670629c8b7253379267c274a5e57fa6dca0781f0afd5fd7cae32cfd1d329aa3242d66e5e2d127016d395fc86c2f0aac653f73aa8e2bc4895baf8844ac9b28630f46bf664a981478a3182ec15db2295aeed22a92b96026b9d9c3143012f7bf91df72b31e08d5bf20acba2a04cd82000000b002c9893b4813a372361c6d15b44322c531eb3d28850d58b013dc2763174139ff7bbc84f56e720d06a552786e5eb8c16d8c5d416aaf7e5acdb7a24f50ccdbcee5e66d226e866dadb84c17a5a575ad97af733a33ac05f0f8dc1925836e1323178e1a656fa41a2a7abd01c8693fd71636c41369794406dc221aae3f268bd552596a9846beb4636f9236fae5820d717792012943bbcb58f3dbd7634670adda6b6847700df45ddca518d918901a6aba07d772000000b0149a412c2da3dc581287494147cc28cb19c57efe775bd2479d205e70ab0906a36c04c665673b90c9036d6f6bb461a5b9a277364b4b3d15a144b3c508cb0603edab51d9e1a9fa74a15ace5e5d7f6a6a4fcf002f5e5d04db56566aeae03b7280854f00334e249c68aea5c301c35f5b5835055e6d0f76533fee16b534eba9500881cd8f2a8bb171e977f5839cc2b9fb1de90e875e2753520e36b7ffa4ae1c6f5ab33f7ed25381bc5fc215721027346f91f10000021c000000b001c285fa65b2aba5adf0d3b3d6caeef7eeacf7c868f513b5a1712e2593b11b1ae1a34ed6aa7baff297dcfd7e84b9b791c9d57e81cec4b19bf3f38041e384e88b474c74a5e98553ca048afba363491ccaa5f82fa7d51f1d95b264607e0a7356bd593390e5271c42cedddadefcf6b789b930359aceb8f2ea2c8454e9d39ae105fbfdd5c8fc6a38f5c160560524962cc77230376ce27ba0b6503f4177499134dc8b5358c4771e502fa99cf16f40f1135273000000b00ad33296515224807610567a54ca400e00242548f6ec209b10d65c9e0aea1d340b165855bdaf06278f8c2fdc883f8856b0e92458684921936eecd274156f85ba7dd85ea99bd6424ccf6a0f3addb7a1c831176672eff5b98dbd0ae86460ce8c97f62149bcb87e4861b595d8122883d652212ce677767cde811aba3345247d652b34f373a587d2c7b1c5c93735ed6de37804b1c2a593d147054a578e7c736162c329b8a79364199744e994b720e99b0beb000000b004daa2ab90427bd8ef3439d5a15da9b1e62885c03871a491942df4664e5166aa4cb01d63d2bb3d385877d9c1b649fae5ca2b2882fc2ec38e6db60a4492415ebc312c91ff72238d9b0e6d16b05264a3491fa5c9ba2ec0ae13ce33650c54a0600a94cdfbb8ad3eded30537afd18a6abb2e0d2c0fc289bfc4898b3c96670b536411d29ca8e1db8cae0ffa138bfebc907cbe1ffaa7ca307bf3f63b36c13dfb6348305f2ffb6c180fde113016c151ce7f95730000021c000000b024c35cd6ce060f2fa9fb577bd3a30b3ad1e3405b43c4a3d31d9bdbdd3d8f226571f7b385fbbd7f22af0474069630e55123c1edd68181c3a621db3ea402eb33ad3be324f17a001c4b0d972bf33a57bf1e653cd0e92d81b24ab486502c0ffa39e22f847f238a004778b80b4bcea89c231d10df27c4342abc9eb1e087bf16e0181c43bea62e79f0be91c3ab109bab4b265424e01edaba05a4f7a181da94de663eea4702a1a3ddb621b1110d4b02996e673a000000b01792413bce0abafb1ea96264b751deb139ce7233b079579a7b2c501be205076d442592cf496e3ab8f0e665aa890f9383e60a39f8ced4ed86897aca69de4bc2b96fb61952b113438f78735038e8d7c68e0807269e5b132f79088edfba0a167e851a56567c63598eeb93bccd97bc05b7c80dab44b286514f9c59f99573563d4c844bbe178f0f5cfdea5712327ecca96b9112236b47a6e9983ab2afbc09e161796c764fe61c57ca33ec61b1473819704c47000000b00ebe06118218b563520a01ed4f22d6a1d3d235d3eba52b6bd39efe28bd246fdc2667169919252044113b1bb9572426f19f9d6dd05371058376dc198a19b7df59d656fe7ea251c57fadeceb3483caa7a095f0241ebe6db143ec9d1c980b2eec199f85e0495bbea721092dadd04dd8576225c6cc51825382fc5d4705999a8b6c9b74ff63b2285244ac2c40ed033b68bf6a1c14de2f9414e29edc1e8d13f09cc0e11f76de1223470763d0a3f8b6229679df00000f860000018c00000073009c5eff9ea225159fccc9a722d7d556d6844cf64fe8ad7286bee50f1d14a31722f497330000004b332559b81a3477daee89ef2bf771b09e8f512ef9455f8601199bd384af90988e7aba12c3f9232edd8958c23b103a123262cf29d6999ec0273101e8c3073b5e4d42db9d0834a8d53272b08b00000111001d30325100c40aa522096f38e9ac5735f09969a30006e0af0ce435ef8e8b2e738075c3000000e9b9c68afe2cbb41e12d0aeae13fc2b526ad1319df82a37d12116051bf8d487f5abc5e260386b3170ec1f52a5d257b920378f54570176f7c019499f39951b19541c6066b136d7c29f2fec951a55a83fc7ca9d266512677fede5e5e780e34c73d922d72029cd79e731eeb012f65d7abe44bd4f9f36faffdc7cc2afa87f8f0c9ed4de851445e73f2bceb4fa4d90ee3e33b5d17692c7fe500fa965e59a62288104c402e8e1e7a38f552e7cadd71c80d7a14f468501db4d321f0dde89968d8ea7739d3661a17b28fa184c5b7fe2c1b5991138a5019d1261f479510daa6fdd50c7bf73b8f65d06ccfe17863a50000016e000000b81b2e1a1b6b67331612557ea77f54564c0bf6a499fb88fa8087a76b936ba4e8500bd56d0600000090f70cde5bb951cae21ae68343f24097139b4cde3cd336281c6337e3cd58eb8e847565160a6e4b73f304a4964b0df6ee807ef3765c443a0c2591721e1e2178fd31a33fb658d24d5d4f0ab76478a41079f5e476e0808ed82e7640dacc96d168b465e31af599a45f44b4c2c7628391cfc6607d346a686d08e9cf9542f79319f009e9251201fa9704cf0318d6bc92c40bd4a2000000ae289e7951ab5706fd8a63ddbf72baeae3018f1ce6283a434752d4616fd8719b9677afd04f000000868d236f954fa975ea2b47fc374d2fae689989bc7393c6f8137a2887cf86b984796c55afbb3ef2ac354038f3b7e229d190e87b57e085947f8e86de6d48a900eb980dd9b5513e8493afae6fe37e57f979f34673b9994c8ba54797de1a8162bba20dab19463f980124a71d3ba17d5c23ed4749a29b4dd9728f50733c4d1f49797fe68d91fe07af820000018b0000008603b192b8cdd96185017de3883781f72b814aeadeef12edc328eaf95b41e546fb660568d70000005ef4238b17d2e8ba64a67ba304a8c1dbf7d6d4bd29c22ecf3868ccfd9ebbc655d188b2506b7c45a55ad0a0fa6ba70feb8331177acf902fcd25c8cb0dab71c4d9d14d0d358251b7b33c78894a25de165871b9eb66ffea3162062f6687a42921000000fd2ad7a6965277b4f5a3b699ff8a5b29ad2944aaa1c280dbaeb1f740073c424d297d21093c000000d5c6f23bcfa77b312f1a4ed9e1959fb478963a3012abded026c155f45e019abc5e8b4c9997602d653daaf1e58bd38969049113e9f7c293117eaac3dd4b9cee87cc60372e1530e15eb1d6595af4180762694b8de1d9c3b514e082dd3d33b2e45dc1b22b37c26a732d5d644774a0a689b1daf35222484deb6120f8e554d2fc68199e8cb337cbd2edda487db8aac3e71aab1d76f4e427f4ce20efafa49fedfa759e210f68f01c6b26cb5711ab7fbc61ceba3bf8ed755acf4c492264bc9d133d92030059dc78acc6bd095690861f82ea1f27aaf2861e68f3000001d7000000e4228a1360ba95c8c5a4c217ce95b4e4641da9d4469c238714b846e4ea01c467b01d00d9b3000000bce56c28e09208cc1ff61aae88d57e8922ff8d0dcf0328eb2420df09976f06e217a5b07930d3a8c10295896318872c71b0eba3e7b4530308aa7c00840365394aeca97e778070727afc1ed05cba4ef44a0c1bbbbe6aebaa95077a3d8a11a11e9a92b82c1d49e6a41a8b17a4060c385574e496b0d32cb2880eb1059dea11ba2a0376f703391ffd254d2b6194240eac03aa58aad80a1de8c55ffc850da9b497429b563428e4d0b9067727076cfb99cb6e3432b4981ec0ca66017b2349d902000000eb17b236895c2d610c235ef793bdaab50db11957e2ef4f47984233d536859373ffc8865976000000c3f0355874dd9452301aeecc656d3acae4bfb6fcd842876da6c76a90cf246f3260e50b7b87c3e5eae185bd205b24198924bc481a54f3b4f50765c7df7cb8599b9e0c1c6b3fcc06b4ab0ea35af130779f5480e3abe4b685c31fb362e8b0f2ee095f7fd29019ff46dde97067282ac2507e448f3efe5d25529d07b217288d2c4a1a7f01c65f43f859473d3d80e23f0c24f523415b6f85760559f4db2a8770040639dd36f4606b43fbfcb399e411c8af18fbef901280342be25332ff0df3b55de6d6efc80d4b00000212000000f61afa8bc9d9abe8c86162d84b4477a9e9559382155a375477c832cdf95df0b3de3b97a61d000000ceb49166afb9eeda17229b2d6a2825c370bf3686f9d004f9a9a7807ef8024900c67a13b62aabad9a0ba749458f412741aeb4f83e925def2c136efe4271ab65e3d01077574431d7909725904274611b922c4aa0a541d74c099e8108cdaffe9a5d08c8c76307fba3e917508964f041e329909f14639260a8c7910ecbb73f217cebcfb15756563e15b7465f0a109120f126514c817ec98bd90ef7eb3858b92040c1714bb349d8d9f7325d16e8a934f2293fa24f6bc372bf0332c27329e0d274469ba5df8fad1b7ba9bea8dbc63e5c7256000001142c81af7070047d781028f0bb753021a1c3846fd101cdc1709f26ff0a98551f361d50a996000000ec84d60d6887506f221e716d8d35ac3550ca5e4758a402de0ccafebb819af0da1ea54640769231dd4e9ed386b6e43b97fab716a830cffda3306a3f934a334c02ed97cd67acd1fb6a2d219465e4797c85131524ae384ee7fef8a08704b4ed825af022eb2c7544189667491dd4aca5862970f1c10cf96f5e7ece768d238bf21b5fe88239166c2038d94a036d28343c4c5a4c41c9181376a6cebb6e223b3adeb0b1a7d23a378508e5b4c1fcbaa0133fe435b8014f4d6b1b7cde4abb398172b629588d66c431d97f3f5227e2c4c5d85e5a1fda0bd581b4cfcc67f87921401650765af42434619c8d0ea17fc3ec998200000105000000aa1d54e58464d34f3d4f94a00b141257d940565aa6da79c538bd5285035930298f44ce66ec00000082615c8372b73086ef2d86942d1f1f77e79acb0f44476d048d5351c7db18ceb148add4271b6f1f0c124841316205e9c8f27907f0b115f2f2b936f3ab4564ce5d742da0a3e2039f5de760e0badb7359249b11c5400e6e192ea14878dfe2302b8b7db71b68f0ef3c8bc0ca9f8031753a3fd9ba76dfa800e393dfba6ba2d0ce9f3b1a20cb0000005308f37fff11b04849586a80a585e20355c71a49ba87229813d60de59923871b342200cc390000002b2742797a65c1d3e8daed93b6679480bb26374cd0c63711a60826d328ce6c9f3faac39db38f90419b0c55ce000001fb000001280d86a17bd5c00ce4418856a6e2e1a882df05d12e025b4a56d6b61ad2a71cb223b35b60d10000010090d363416e98c0f3144edf61679c13cd8894b682cc27312fff510b4c6a74e02a8589ed142ef5ffa5bdc2126151745dcd1d4432380e628a16c08cadf2a245bd30e0aee776594847ca8c333441ecff799b2f38e58b745161cbbeccd654393593abd747afdd7582a39606d88ba00217386fbfd717a301ab3d84802e8c164cb80bd27b8900422b519c4cad906411059185cd186030108770c0a4bf341a335901ddbbd6460006a9533a3c5b9fc193a1cf7e4ad7cf690397d9291f74b3f12a7176aca180b6bf8b44818cc6e6379459f9a484961a1c2dade7a6336b9ebd0ac4114fdc03d8477d4cb1776abaa855976fd84480321a170000617e0cb01cfa6eb18d360c6e000000cb200138c53fb6a085091681a1ac0765bbc2405a8b4c0a7ecd4df62986f1c7a4efdedcc86e000000a354998963cfb528b1a16c7d4b9807e3915a29c3c6bf262dd346e449d5165679bcb6f856dc3a235f0cce40cdb139bdaa93291f54d6019619191aac3523ea3d17b12cb21eb8b1b6b13c49fc2b380cd6a8ee95215cfaa8e9173bd9aef68539f724547e8692c6b76f48a6d92b79db1e0df4f6bff82f06e607294d84fcfa120217a88862b4c61209b16c7611668da0d50f895fa00aa1cf7ebbcab1382a98c198f786c195d11000000128000000450ee3fedb9bfc3f7e5672d4b6a499f53a1430ba6c75b1855d49ee227a111d7db0d7addddb0000001d6c4612bc58dcd95a945edfe26e25009fa7bd5833e71b03bbdb4075411c000000db0516bb73cf9fc13d9c94c8fef11cbd884d5ebe6e26a3e3046339fc16b3db3d90a22bd2f2000000b3dafdfbeda0f7b577be7f3a281a1800b36f28d85c7cef7b48ec06650f98aae8ae0ed0c1ed50b3987808c1758b8216ac3b704416b24fb325a33be81b35d1bd238ff6d96fcb379933c7bd359fe94ed826f9de106267557372ef29d47b67d4366fff022c01ddb3e786ceeaadcb85ff0975a6d882c5076f985fa2e19a4a0a5131bf07440550642284fe2d21fec2a7791ff5be3c24e4a0dfdbcadef77d4b94aaae078207ff16245b4d3ec687ec580fddbfefb07175f40000008c000000371dee4f7313fc8095bbde67d5d724dad5c5cb19c8dd0fb167219dfa7683b8128ed0a1227c0000000ff473012bc3b79d35492be90eacd9890000004d0967aa2dda64b5d952e840bf5f2afeb0f7d54ac6e690c2ff5cd00e83544818f3dad1694100000025eea73e9759bfd4358b339fb78cd118466f96892066dbbae1651c41d9db9b62ff4c9fba358a0000015f0000006a2b472edfc596b953d09761c7f5b5834f63c86bb4d1ad1a42afa788e0be854dd36cd51db3000000421ccd7c30b9ea1b1cedb8cc5b262899ba516ca51dc4e14f22519c42ced09f3888d2930d83a85cdc498031a222526ef7f4dbd27aac1266dea10467b54614194db12141000000ed263239846d27d442440d1f01e1934f130a33c005b66f4ba74475a0b523de87c22c54e7fa000000c55a3157d7c256da4ef5975df4d6c71999d0d8880526e4b8e9e6b48abea71f4a6d97cea5dd95fe79c5ffd3ebb843f1c9be98fa4564ff1aa53ad043ed297b53f4cfffce626784f5c4abb54437e9190a95e18258245426770cf95e4bed1dc604c9fb1f3535251b778df53e251da808bbecf3594b11c1be5140d198332974fb7d9c08d59af8491dede0b4464e5050a43487db00ae4ad11649b765b5faa4259f9402959c76cb5dc6156ff7d33ae01c5d4c70e25bcd13ec6933ec1bceeb6a4c544f87186d2b729035000000d9000000910139beb488d89a2d022e01bea52a5bbaf9298e524b502df6e13701a423a49a2d9eac4721000000698d6bca1a5666a6e1205f7f3372990be03e34ad260c7bd6ea2a48ea2e96b4a0ea3b15848f92e68fce61e61783b4beab1413b3a515a43b500fb3f569f1efae02c09a30ec8a9f7970d2a10d80d0ff8a6b8c0a8efa3346fbff968178155263683f681f3982079f4761290c00000040279c9e3bd13c318c18d9fa1b93842aa22edce489d7830de81839e806ab784c48b33988d8000000187dc10059e3b2905fcb0b2fa4b3eb8bf61e52656d0673585600380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00be084c540f6c3c3afac11447019011a6ef0aaf386781b7f649ae0771850de38b447eefd5f28eb7a316e19fd1c7547545933af457e48bb2be8116fe9a23c7447ae33f30031e2dd1b96ef1fb54a9dcf788946d3136c92f1f3e0b3625416cfa07d84507732d4569f2900e26d1388831db00d61bc869e16270301904532bacbe4037171491149242aa06446ba0fae6753312565eadc70b82384b8b0a8a0d194f3fd7ead40bab5534078c3be0935ee1ff01d000000b02fe6865ff5014f51a217e6625a0e5789f3f476ba3e410f75eeb35b946f6be8693a1fb7407684b05f390f4dc0596f97ccee2689b3aef29596d59f1121e2bd4f3db53041d6f3ee8fd4307eec7fca4c000b199adaca513f863bbcaa06df900a08b50992360a78088905b01ee1d48304a2cd084d7821a3c566833e40264b8a50a2f02cae2796cdb66185d61738dc03a70feb0e2ee07d2ed3c5e03b7dd4603f694d0b31687199bb1b9f4aecc2d52612a6725a000000b0063b07587fb70cf92c5208e2194f9a39589b6cc1f41dfdea58273cd9e79097ef1561efbfef40d0ca0e4aeb47a63e14972ed70028a6eec2131a4ae4d0a9a0a648b2a9c2f6995518e79db9d7b12f7f7c0959c9ec2a0e7d7d13ae282e396c62e7871cb9477dd5d0d75b7200c0866ca5388f286fe2f4ab4e5881b9aa6f0cd1fead205b5b8f71f5d04faf76a08f3e56c311b117c916f949eeb84ce71953faeb366f46bad63ea7ed19788d15d1442fb287ef730000021c000000b01932b75128880c533b21583555f9b347fc0e8daacf94cac9897e5b8aeda858681aad5f5e83c29cb2a00d823e90a6044345442ba25b9cc33f198e60cb7bcd87d2df6ba91d1ec2d347e70dccab21f2e77ab60968471bc5f8f89ac3278bb5af451826f4a9655036f7dfdfa85703b7ae9eeb2a3700f278bd27672a5657cef6374d25e8795c7b4630127d179f5dadda7392081f0fcee60d0ad43bd18437a2cb6422cb85117441198cd0509f3de96fe0f9bad3000000b0043f874c7a39c560b3b1c58df1b14a7c542a9956b78aa48a38a2d5204a977112640891a3447a83f34ee2a16ad59f6526b500e0c16900a0a1df4a57bc330f02f9692c1cc0d6af07b35ac0748ffeda9897de4368fb7bb4ea17facb14602b9482dc118621e324de3ebe741b30350eb489f2057cad9646d0e7a01c66a766622c54b0c643da0a7a45d086298ea832a76dc1730d4a7564dc792c4314ab4e05c4c2f14e6b93ec4ec2e47404c360cfab3b831cc1000000b022d10f2075754660ef9d99fd7ed485256b6cc4d2493dbae86584c2127f620883fd332c3e8ecfbea4104ec1e3b769914054fbcfdb5db46315ee71a0079325574e9f76d776695cfbc28548bc1ef50edb13163b375d415c806bfae4f14c56e38248b74a720320adf1e1cdb8690b939cf85b20224ad4602bd49812fffc1cdcfbe0bfc5bfaec2beca0a4422b76cac7ad174262fb4acfeaf56da31e71355b6fc8b27caeb5942a400fcfa7151577bcb3c54dd480000021c000000b01d625641dee974c06f1136252f45bf97c1bf401a73daccb2a49e430ef53a6b530daf63f658934c309a7c4dafda162f344af27e592e71b26478c51b490df3e0de3bdeb313a4dab4f95e9f1d89269cc3ad85865d79e50af7dc321bb4fbb314b48db5d0302a31bd04ccc033f8e6b1e2cc540d5dc0c8d0367a5f63495fba5135977163b552e26909471fae64213f1bd015b71b5159c42ea25e9c5bb53c1ad6d5bf7c71b97d8e0507e3edc992460a0be2d54f000000b01439f81bb8a6a440738035730a3b182cd0da419c38ad88e174665a7abba0bf5380d9049703aa7c822d77756a4d7cfef98c32e2fa52439fc0557b3bc94719b55b051e2122161890adb44475eabf6de17018d491099c23d8d934ede8b6a0cd59018673b1a30a458220722660dc66b156e521d63d927b24211b35afe00b71158c74e3cdc7adf36dfd88046aaf994187f2ce17af28df766afd967ab6a7ac4c41d68d2d6aacc18b069007f6a82e3dc69244bc000000b016d66a1f000da86713f5e08834e30550996c6db42237aac67e530e47de18764f867efaedd3d795df75a7a0de9067dd37e2ec3009f5cfac7e7d9f75e7f8a09845093bc077e873c5006070550ef566c6ece1623a68d0214c84ba44153d36dd4638caa2a6a89959b06b51644fa8632fa490102ee337ddf0af6e801ddc126cac433af4cfe5ee5c60cfccc2c5c92f66df341028493dda9effead5bf1f659583f63306cf3477a852cc060d109eb2f2965613490000021c000000b0028c812cdea2a5ac5d1c5067b3ffb73b427043c9a0786202adcb0e750808c102e3860cd235dbc519d9677492ce8288d0b34f25e596cd15be49c32f984f4dc70c1e2b1706ea8bde3e258eb6855bdf29dfd8936a8b0a3d10927e8afcad8e8095ed8efc6ef8d29eef85875c79e8224b4fa4140ac42a9ae8f6160e240db13b4a750dc82694733666a250a2d881b1c81f9426140b5ab7df1f88bbc6d5301a398d819e37fdc20e941c444191bb14ef000fed0c000000b011996d8a35435c2527289dcc9e0f2ab7156fbf2118fbef9a7259581f5ac756c4f8c98b57564bea3451a9b63cd4ca60c355ba9cd36c5dddcc8478da141bea514b07bfa2d18ec5145098529a42c44a86068b76255726a5678868430ec965f974986659f0467b61e3841326b2d2241148ff24a626214e700dda4c17607adfdcb17862deb3697473411673a52579af2d74b5111661af404e0901af5aca60c89d007004ae2bfdbb4492c1738041ea3a6f8c5c000000b026304d7c543dec309e2f4f1c75d7b4e1f21efd85b2de01977f9906e9c730c8faefd734d8a596b9c6246e5063ef4ef529566e0e8bafcfee0d4267dd4cea69f149dc8073a5e5e02d509c82c3d3c884e5379fc6a92c98ad0eaf9bf60f161e6df57700626be7547596dd67015995c9ee2c442be466843a1fa55851d5e54eda40a45235d6878e3f0009a5466369445d75e43f02c6a6f6be7da9614a92f53719ded8c3cd62d0c27e1cc65c36aac593f09c5a9d0000021c000000b01c7d0b2a71ec4ad23114b4ab4e21db16bc08ccf4e90fa0d9db306a8fb520a0c214ccad54433b4dde587e58e5b6e11926afa56f10ec3acd1cc5ffe8040f08807c2838716ff78709dd16afaa679944b54d05bc6e61f9f22c71a2103915d1e9061a8b8de2fcd96788eeb54f7df4e2dbd22e037b09943273475d7f8a9f3eaf4290774f2cd073673e3b764c78b640e88bffa7158acb28db09efa04a51b83282475460a18b8bd9cd80d60b79fab71540c19522000000b02157932c75ebaa581fd24e47ed586ffbafbaecd1b1e8cad71f31ecd8e7a5f0045e0ee612ee6c25d8426dc21863a8319337258482179d722a1fe96814300ab7aa80316945bc3d5b0b29da57afb625a8f8d0edfb953400a2da93b041e897dfd9b97abf8f7b514fef89e427dc648581e25d1e69a06617cddb127728d1c929f72b5988197e3be9ca57e223513010b72b0e5f273b619761252b241db97cf9b04166b0955ac052043d593c52e29325f8f9d88a000000b0128a9bc059acc688df860898ea6efbd9a0580b214d922aa7b0ba60bd79551bfa238c4fd2cc2882eb571271c93b5a363728f50675f24d7a45acd9294bffd802de96b88a3eef2fedbfd5af9efbe6d6844b81af219099b8fc2b7dfbfc9006aa20f4c9dfb26114f9b13b2bca31801be252611cad5fbf6d19389b89e07633f451191d71ab290e2eb7a223285374c480b66cf42abff38e5fb4bee6a847d01f4ae02630a2c788e2891d56b1f557af1309adac2e0000021c000000b01937666b31fc567edd26cdbabf17c2a684111245c43d1975a4f6cab00d36de61f82b9774e153db18bb3d21b6ac5617a4657d27f571e546afc29b5abbacd7d698d3e9b0113140036f0c6011900c562e2bb97abb204213ffaeddae514adfd23e9cdefd649cad4b89d634e34fc110493df3063406ef1addb0801bc9c5bdeab1f27160ec9503c3f8b5fc008c6fef45532f9c262c7e78ac43c716d00d4ee472c27d78a26dac527019d868c27d64529459106d000000b02a1af08ea7e13729f019a4b2bdcd87f175810059783cd59374ab4ac4068437086fd0fa7ce1655f3957a31af9b58b686bb77feaf9c06a9bead6077b87636e6a7acaa494f5f1f12684b5fae3739d7121a53ffb84ced2c488cf02fd972d64c25823441417249d8a9f51e77700584cb5aaea1f327093d929c56194adc4d67fbc88e0d238c2446f6caf0035dc0f346cdd15af17e168aa7adc85326333a4eca4c88194e03c09593041bb906252afd006d7bb17000000b014827815ae61d548a8c64d9eeadb2dfc1df0c13670b97a4e32002806ffb6fb1d58020877e6b04209a809bc2d61704a0917b52ecb6b6e8616146efcce4af7e5c8a924cd156d8d12946cc21378ae213c61f4e2b1e7dbaecd34002e8db7cd228043fa34750407cb65ba545f0c0d4ebf7d402b801a3391b1345363c102b3331632f2e6569f47fcd5954a127e3b27b01ab9ac1beec6c638680cfc68cb07a8c4be91afa9063af32c2db9ef948d34372837fcde0000021c000000b0111945a9944604150175593e52275a9537b5a85632e52a0f414ff2072ec7bebcb17cea36ada65ba9e68b0c02a5a4fd555e52eb64ee35b84e40de5a269aac7b84b932b73d5961d7a0a910a18502973f6ec6f802676242ca042ffdb8373ec59b8afc7bde5627d481439b67a615054106311a98f214b02dfc223e6e50d6d68b601ebfcdfd845a81a65900d9ecc335ad9752020144f7bf592c89b6116f4a8f6dfdd856c60b3422310943bf528fcdc8bf4306000000b02b2226265e2171eaad2eb9c16a849ad5e959ffd6f9845b3dfb61888aca6083f1c2dbc8378f86a95733d5935dac5af1cde6b21cdf6cd5a96f5b1c2a5615fa1d21d5220304896bace4dff32ca6304365b17634e7bffee7d96c0de65c38b85057aed0549b9d799fb74b490a371f5d17d4d12f147068820586e30b503a92a1303a8fef1c4d70c785d6c27bc9ee657ec436c72c2671151ec34473409ac458baf9fd19889435a56738999df1ee54c816ce6d42000000b018421c19b9eb7f3129db4cde29851264035b9838328233c56774783a6b75391053768f9c69fc7e1fb625403ba31e1f1baba988d9e16d478d568551678a78c22adcee1aaefdd0da7071d1bc3424ce514bee9db687fbde4a656f50bb83ac9c01f6ea319e03f9a563a9c82f0b8002c3f5fa0c2d5c8de822fc80187105bf126a640ea3425a92095a23e8b28e1a42dcaccdc32b97fa0c34121fbed96afa38cf924f096390c995304e5dc984f3a6cc015a02750000021c000000b012eaae0109f0c01636f10fbc77cb1b2b8f8cf0f23e63ddb7c9cb263810515aace00edd32c4635269f5ca7fefcc5c9e92ac1a24d68319d7c0a5a2b10a93308f6bfae3dbc785fa0c6d0c58b84b665aeb55f420e810c452ee6dc34ab59c22b6c44db877746c51bc6bcd6c5c099e02146b7624162dd6e6ee848e376d1c67ef5ae7dcc6e854bd29b0a4cad65961b1dacec2dd095493dffe848a6a98a70bc1ca4a27b7eb12db26f11d2423caa24cc06a2e015a000000b0103c8a3ab6a8a4e41dbec063f5b5600184600940054edc9acb357e217ee323f68f9d121ddab499ff1759e39e844fdc8b3f82e8a82ab8102d8e73cbc7a4df99ba1d1236b17e4dd08733155c31c157705b164a8b7e16c9971314779ada33b2bfc929342f0c47e514209253ace91281ef672e41b80d7a07bd647fdcf7de0acee5f35cb13d23bb731b30b64bb399863531a02a002224e5a52828c61a3065b3cd3afada15871ec2ef44ecfad5808a9dae515b000000b02dc2257556a830ee3c27b6f6e0eea40b4f2ec98a56e35ac0974ec17253230c9843bb8780af4844e4e2c188562004aeb56da44ff46b5d98f5762ee2efd4a1c5f2a1d0f6e5e87a4cf57de3b6378209b215ecaa2b6437bce7f641a41a9c3dd752dcb98ff200331032c4ad8aae77db3b1fcf07516003efefa9577593e306b38427122ea081afffcb5b4baf79165f3b2e55a72a3f399c6a402f886f430b3f3e80066501465bb507bb84cbb89754f0a36dcd6100000eff000001560000006201384644d824f1ada8e2b7ac98b353031431baa240856ef922864956e371bc4a1fc2a3290000003aff7638b05fb40fe5f423ea57f9d9beb991af192025df2aaae2f42b69031e6a70c5ecf926c69cf8c3c2fe33063963cd134d4929d31d65dec1799e000000ec285a9f20b0cea877b23ea852ddd40c12aa6e9cc881cc6aa43c51eb38047a01211f679228000000c485eaa325f808da4200da8d2eb88ff74941b1bd0b1454d8bdb9a99afc84f828a690a26627f87f81b88ab11c22ff712ef4554a6549f78e6ba7355fbe04d22a0744d0709808834a1dea3c2923a6f3941921952b497f8077088bf21530a0e0855278309ff4b0506fec5d408e51986c5a19d121e7987995e099fb3441807d8790252f1fe9c9813b00c715954c95db28d3faa19c71d45715bc44e0e58c768862af5ea7e944555ca687dadee0e7042347e939f3cc35c358550f57d5de7073c473029cb424b7a8020000009b00000037019841973483936097f73d0d8885e82133fc4712ea9a70b5912a9ab7e9f631f39e1e3cbf0000000f83dec94089ef54ad35f2f49f16e9350000005c1cc186ed43f7f5a005fcf2e475f3e9992f98e5cfe7eaae7342dc4f74f7b436f809ad8e4300000034194f31d10a1ea6952f4715813c4eea5bf0c61d2b379f01e2abae04c502a1555d58ec717f5cefb73cbd0fdd0f6480631ac719775f00000149000000e701a61235e0347af95fe3b72e7bd7cfd4dd6d93738ec44971380d081e18258b36f9943e46000000bf9353384caec0428a595d8c8c9b4d0ee9d68c2d755a6d0700ec2800445db50d0b7d1b7f0017011393fd08afd81e7a041550f80b2404416132eb09112af349b26a974f3d1af46bda7e860f6fea6d511c3349121668f6a80e1dcf074c267c3f13ff90c6e5966d1101bec33a524166dd474f8cabf1dcc266875696a54deab331d485ed19bb8ea364e279a996a2ae2b18b8a76acd014ef96e7b9e0a8ff489d7da8a90ed04e1b21d4e16e1fa0e70a0bf0cef42440ae38d2b1955c390c57df3235c660000005a15950933fb51a1255b60d25c05c2b502cc4d7a045d19f1085b48e9ed82cca6b455a9621700000032dd8bdc2af417e65ec65cb0036c31fbf4f87bff5af8c44fc11d4f41c20a3cd7f0c16674037d3386c6cbf451d3f731170dea2e0000017f000000a61def4f93c02617910a1e9655295b15997c3e5199aba9904879a37d35c08790cb5bf597540000007e1e04408818d56d75ee804cb71573a155823f4e729416e4b41a003166309dbe94b37243faaa71e768dd098dca8043c41d732fcb58bd23dacc0250081d65ca4b1e58a5c3d2073ee82d6549edb2e063927117dab8cd2944d69c8c1cee4dbe2ff851df73ec17b6cc78bc51d4a2fc0bcc123f98c00b59126d08070c6ca15c5f65000000d1043f6ffbe62ef61588e52ae82c8e60291410e657b6e48b4b49c31274770d6deaab8dcbe1000000a969097ee3e4c07914c71a1d1c4e5971943fff2791aa02a8b1b9080cf0a42bf3f41fbe0b96c4ae28e55d0ade99f7569fc97c88285f295683bde221c31ef625fd0fa904d6f3a00f6703bdef7180fff93913044b77b5377203578d0bf9cc3cb5e4af8ca77aca5bd0504e3ebf28d800c3bcd0d1b7a4d8c054c0eeba9b910da49ba40590e0f5602081013eba33d3a31f1bb7adf27b3549d7e8d50de03d5d8cbfa8d3d87925469f730fd5d220000000c300000073231944cbc824111414e0fd0e04511e52b01f8441659457bc2954f73ee870a70bc9a4c0370000004b26de706e4197eb7523ed738a8da7039dbefb8f88b551d3722e736c7ac00ae34d8575fc796ce86580d6af502b6f6fe9ed48e9527b10264f26e3aaddad537b967a99e6b34cb06a7d224f22e30000004810705767ec1a422631a898059c643fd54765b76f5c71df2693c371dfcab1816de7bbfbf000000020abaf14a480d15ad6e9d9f50e1e0bd937e4e70fd2060afda42767a0fc2fab5794000001a6000000a915eefdbbcb56cfa5a42b61a0bfe9b3581fce9b11d255402231951fee1c67bbcecbd281c7000000814eb7f2ffa1de47d109c1bb0ab46e4faa4ea843e9fc43a7c03672ec1be418bc1c1657c261712b324395b78fd275477cf61c7694c0ad9aa49d654a049256f4138ea0953963353c8e5fd4cc5d0e02e803acfc5f8178057798929f349129c8447a3cf01e952acfcf77fbcfd2346feaeec4247f12a3241f63a3efd6959954f926d078f6000000f50562b59c27993237b8129178b71166dabe10feba925b2ef0bc4a2647664ede533c6afe52000000cd1474623b981dd1ffc25f6820e181f7d26a52e249234a9b3dee86bf834cbb07a62daa01e59eab50f4e7c6a49a624036f1fd59c2b25abbbbe17cb5cfbcda935f7ca6136410823e47e95145ceedabe242e27fb4a77d7887672de97e7604bf51cc7dbf5bc5c23b235673cdd702fbdb8b62d04c764888ea6780fa16705c3db4d180c9f6f6d69704b0b3abe0ea1bcc19d54afebab1278fc57b79fc5732cccafae502974c5e57ea424aea8b3f93c8ce601e6b18eeea0ba5ddcfad5ecf0d625007c2b0fcfb96d98ee0374b9dbcb865b9e00000016b0000008f24d3dc626e2df668a688407523eaf90cb88c98f541a831ccfac166630d6db197d41eac8100000067ffd1159c3bc6e485ed4836452c48ff5872529ce3db7a4ec0c31d051275575447e5779260a151ef018015c8efd94f89141738efc4769f7f3ad36e4e0b5a3b638f19953daafac44e588548419df11d67d5d10b1427e89d45180d2926726f9f2e4c703726d574ed80000000d422f6f9d38ef52a58a4dc4db08862682114c6b852339196f6ea4113617e247bb0de4afa7e000000ac1a854bcf4896820bb6d71d54483b5bee7135edb0e2a2e5068aebaab2ca4e9535c4cb15ba88cdf2346cc3c714cf5d92315839b563f9b517fe2fa4331a84429f25f8f81e18c8d37e90e5870876ff5d1c8f8d0fe77db9ad6a413c11b8df6c64b17bd18704a0128e74bac396e731864a75976abd719f1e6e2bb7ad09a1952ad9be2e1c4d3afc102caff2f17c786d92df0b888e67cab538644ff977d40f915df97c4226d9f3c0bf05487c44cfbe14000001d4000000f41ea726ce9832a44ef581c707055f3e3eb078bd9ffc87a7986de2f78e808ed0c6281f7cab000000cc589403c03b0960a8bcf4a8572972b1282727202ec819d4822d69e5de2aa76d7f596313f89c5a4cdda52a3458e0cdcceb84667c6ad9c88b5358b326af16f67386baefe460f91b5775c26f7c7c66c48e60b7c01161eaa6382a3ec256fcfceb16fdd2efac1ed3e79624bb3b3631673fe732ba31ba2cc9b15c7e2528fc87010f8741dd7d0addfc577d74b0fe0faa6ff0cf68e99bae2054bb9462222531ea2f5fe8f2f38ffad40b7bbc00dedd6b2864990a45b2d7f806c05a34496af7a8fe32d90f4bf915b1bca0d6696b73d4bfc3000000d82e81144a1fb567afa20fcdcfe8fef115801905a5c1b21ad2a137777e9a9e02d225b1c9de000000b0368f4d181cf7dbd33868cec8e741fc4cd47d9d2749e6f2e4eb0b0466cc986d904451434e05a7ed9a09cace8aca220e2a0ac385ae5b26340be84444aedf2507727095632006984d8096f24402149ba26ee8baec701033e317bf794b139794d6436673a7fae033d407605f2fca9d7099491e9dc957cb7737bf4202f62d5ce49909e2dfd4d4438cd13a42a1bb290bfc5129445c4341cf51a51d070aa39debb2822267ba549e0f15571e21745d619e54b77000000190000000b429a0e4041fd4e7eb4375b506b6d7dea60f02e80dd02785ba95220b8f3fc2702c6c0dffa30000008c27cfbde2231a4f04ce1e1451d955eaf662d302c6dc0062565751d6534fbb966ad4b2621b465e698982f1d8df4339e84263dc8e26ef6c532c54a919c209778b61d3218ec8dcd4eafcf7cd04e1c6fd0f4e13712efc0fcae86732b2b995bcbf00eb0229b61d5e410ae84fe8874a5c05e96af66b4fe5de57746138a7dffd8c3eb3c6a05a265e1dead28d89f17e7d000000d41ddfd6bdf9b673f023f3988aad562675c6cab589ec985bea62b5efc6b64c44fbfb25023f000000acffdcd67414e00d2eb7b473345f54ffd3036088fcaa0a28d105441371bdb9141c2236451c4d9ed87804f047e1d3859635acc15822e2512ccef87a1aa72329b5bf591152a77db0265333f582ab56a074f8580742ff7c70e552546d356072d7667538f15a280dfbcb4ebc24fb517c09606c9670de2a1ed83b07daca2c47adc531dc5863e1bbd274e7db2cdb915f0d9c09b1a333842c3e95192709f6d5411a50cfa0f82697e5c189071c906d3fad000001b5000000ca13919e6f5d0a24616033dd5bb7881b7f69c49528a36143d09922ac9d0776e0e65efc1861000000a25f25f9d0a75e98e9a14b798dbecbc7459a947b23c821e3b1dcf8ab88339054bc28d03585895422c8470215d4c8b12dccb53b377278480cc9433f9ddc12ae3b5e0fcdc61d21290de0b4c8faae622d8345d7080aa738489d289c29f6f4263b146794fb5b45e3a33c3c2fdf765a7b241fd79f32ee4ac5bdb2bb538dd5c4ff932590d6b5fe1545bf40313a4fcf036de2ddd18209dcf4d2446bd1acdc770ab69ba7e42edd000000e30ced5dc180e58b77c6cd5cbc215960147b33bd8aab9fb9873deaa58571423ea46126aabb000000bbe31d7cfdd244f7bdeb5e14bf8442ef0100bc502f847f855649f30700ebef4bef48be92f8fbe25b96e6a9f4ec24049ad0cf57ad4fd59723900479294b69dcc32e5784937b62141341909dd4cb0fdd59f85eb65ce14f4602c5c51485b90b7b0c797d642934761e0aa963669f8730371699192416d0900f526282d85cf232ecfba77583ac61b1ca187da9d897d86f942e8bd4f1250c9ca927f08b8afe8b40a8535b95612dbf51229b504e58c5b5712cdd9bb8c96ee6de4625b33452870000012d000000d402749b1760cb3568dece46058737991153edad29ebc76bec33feb59f4cae84e55a89d0f7000000ac1605a1a532e7f12ba58cb06322750e43bc860833d36e60e53399b6b3959834e90b49ff69c9dc1e2c461554ebec04da63ccf82bfaf6dd0f3377054918f89be463496612ee7ee88f817efe9c6fa8e37f39d12ef9dae4a37916b4143317459534c0650a610747d7d250bb9ffb557a5284aeea720141e6c7f1490b195aef7b5aa01c47f70dcf30d8f14fc11c042a1c69d796fad970920b71bfae0694079cbd0e629741316a1a7f145962e4cba053000000512ec3b89cd20d2ff6732ab8b4705acfc7a716aadedd69c3bf8c0774f6ddb7e55d297b234800000029254955c18d205e56f688fff36f4f6fa6c8e8a0970b9d1e3af7be8c7cc18b6c53c6c0df35458f6dcbdb", "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925", ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, -<<<<<<< HEAD - "txsEffectsHash": "0x00543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a9" -======= "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, -<<<<<<< HEAD - "coinbase": "0x419f369eb60187f6f2c319ee70c886d95ef96899", - "feeRecipient": "0x0a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744" -======= "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -92,12 +77,7 @@ } } }, -<<<<<<< HEAD - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200543501516b9b92eb64f72b1b79753f63efa59d1079c63c5e0b19302afc88a900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000419f369eb60187f6f2c319ee70c886d95ef968990a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744", - "publicInputsHash": "0x005cba0a458c1d6c5afe34f54c5a23c3389383f855233cad294e3de5ea91e087" -======= "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba192500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", "publicInputsHash": "0x00efb18046515e61fe5ea99224aa9d9ef6b4330521cdcc698b4810c6a4167309" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index c3674eba5eb..fac2fac552a 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,39 +34,19 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x252dd49ff4754e960a4149cc1f13c8c376f41f79603f6ae4d712c97842b0ec01", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b02018103ead818b597dc0473454e0b5dd3bf92bedfbabaf26b902a88270d311502c825f2093a2b2f07c0928f3d8269da653adde9251b9415bf1c9159ffbb9b4dbef9c1b8cc701364f5a222e334eaf9b31bc7002664d998452b437141619b1461abfc963704b57c03a5efefddfa955824d27a992dec50b222069f1d2938f192afd925ae9975fffeb17fa9fd0185c5c66eb0dbf1a23938cb34ddc7d724282c36be968eb23ffecb5384fbb78c094de1725c1000000b02a32ee196ee84314ebc75031ee381b423eedfe0e3aca313558a1dc3a0c7acfbdabee8bff8a04787b111b7628c6c9ba5a3789c2d3dc52e6692ff5ba820eb7c58fa5ce8d4f8608e0aea5c1d6e7de4aae04acb6ab7b2707f4d0c460356b2b32a4be638a367004d9213ed1ef42fb3ea6462229111c75dacddbdd80f973aee46896710a5ce88f34a641f7369d375586b435682be20c4e247d918d4121c2f4b87068790f51b7979f047189918e0cd063027555000000b00a0c35fdad529d6d63c7280d8e2230f6120b63b154ba6d287dbea4addc79c3aaaddc466b243419a19989cb89675c535b2e4a1189fccd385ff04d1fd205639f26b06bbd60fbddac2d2cd233fbea79bc374334b8e6484343f693c64d9729fbaef4e7f0ed0a91a1843f6f30e0535a9527250cbfde975c664c0a2ce3882d48aa0e9cf2d6ad2d773ff4a9f308e84d9699092510f7cdd16928430cbedea61417fb8f12644800e024b558cea0977817211dd8300000021c000000b0237832cc0ff3294e6cace2fba52449382261d9480a9f94f2ac6cb32f63d8da031c985e18f3544870db2efd4a110d8751aae62555aaccfa728b3943274cf9d4dec14136ba292bc586aa9373ad42cfba9a93db5628d5a4c9d5e39d42ac9a349974664918a9f399de6e5f9d1b472c1f0b38066d3dcfeb23a46cdd4835a6ffbd37ac8d08a13703ad50a59e4ac6bae368cede2ae0e5afffd93eeb3a8545256de5209d0507b934d317db1e7de13cd98adeb58a000000b0100fc38243b3fb1168b5fd31e0042fdcee56fd4f2f2811972cdffb4a8733e092ff2fc16880a34dcc6e9f4df81369b9cfced535f978283dcf0c14a9b5476b2d69fb00431387845671ebc9caa525e163fe556fd57af852d7bbfacaa6ba6928344828fc6d08d77731800e38db8947b11b00052738d5fcde750e5432852a084e9c88ce8ab60dd832d9e965ee759380350509048de615db346929e6a859466989ed4f33cb7e6f6dd31d7b3fae0bd647a41868000000b008a6dfceca021d8ad44b17bc2574fa14842c97be3aad4a7d6f07d5b0f8a08ed05d2c4e3f5a72e40d85787758658db1bb652a3c913edc8c48d0ece3b6cba935d9b887386572d0661ece8f3193f6fcb9783ac656683c0aca51e2e9fe7749ea0ea6c8d5973b6b9f97161a090ac93f8b8f1d0d82445579030fc8e2e3074857d9711f5635f098d4decabd7e7d2b0725814dfd2a10edcdc80b88aa2162a1f0b602304f30c7857a7529c8bb09488ef2bb7a13590000021c000000b0294df9edc6a18cb848dfee189640058638253de1a105b84e9104248e0c4d73f823490a4d6719ccc53c286379d86265ac126b4c25675b44f448a06c6b5697e19a444786bc9ca84a22f2e75c263450ec9346ab2296352be1520e9f5805498aae65d4bf45a7922bfd20f04f0a7fdc062d6a08efa27480363f44d057a6101d2e8e6ac57c23e6ee04be4e9671af46d3c756972c89a6cdf93b2c5fda4d36bb1961b70835f52666acd510c96da7aac8dd3427e9000000b0165c935497f41281e397d741ece585dcfe629998453699911e7298623fb8034d6f1ca992bc6a67982566734d2b1b6f0647b14e33073ba87d0d2d488beaae5ab6896f808ba69260848525d6c77c92ac1966d9fa550c190eee89bd2a7bde3baa56896dad200e18e0b4a89376c88af6b677301e03852537c90d53c0e40869886eef2ca07de3a7b0018c376286e9fe0ecef22fddc9a0fc01e386ce9ff3469821e53e4713effddfddea329692ed5d1330a135000000b02d8b803af90f77237f99f14b09bf62cf7bbac2c2003359d1d5e6bcc421f999101421db38fe64e44125a241f6a36beaa435ec583319ca56b21acd9c6aceeef9d04a74b5eff711de8be3b83e0799c7c5c00e10b496d40addcb474e26d7c9069622e699a8b20d574814ea84c1cab0b2a1772c4b13729f56571249fe085fb7883fc2cebb5bc312d4ef4ab6569b37bcff13102e8eb238aa00dcbc64d37ba888da2cabcf860d10fff6caa0af1238ec55c83d390000021c000000b00d6e7984cff7badbd024966b435e045b0b849cbc558647fefdbd52365596eae601571dfd99f04cde65daaf1034c706a6551c59f62316d0b8c9537a70ba75311ff28c9b8d486d6735550de67461a4a4cc78eef97e18fbe8b0f7a504734bc7ce049f5223aee0d5f5d5eadd1d9a34eecef01a0d797e1bf0d00b838079403d071b69b78473c79b00e3e5cdec36aaa962924d2a9114834b45f417070631edf2a4efa5cb426503e5211601dd61012f95f22916000000b00333c453faeffa1641ed9a51cc086ab4a2ba12bb7892fb85962ad708ecebedf51ed3dafe5e81d45b210d427bd4e6e794266922c1d493e9119560418796a00688fe2b46e30c647c4988a82ed3244fff4873ca7a45380618ac8ba51178e9408bcdb833252f182cc9384ca2e22219dbdad212b3692d1c6655421c814dbeee0624a8ea94831b2b72468559917b043c90dfbd1aebc91afc4c125d8cc21c0d67d64983cda2e3f0df9608938e8d99c81fe9c4b1000000b00b06ffffe80510c5e16bc4994bae620dd123ecdb1ff4aefd055f4d73359b7f41834d7fc34d83ae7cf0e9f5b434750d1bc18e7f0047bd274965cf31b869220c1c749e28fee63df9bb4c933844e6f79e44673fa75e3c8624b36073151c1ffe642807b3ad1c7e92b860a590bd1d219ee6661ba1b87cb3fd794e43ee62324c10e1eaf0c850318423c86d90cc7b42ff72cdbb28abaae41504b669fc9598b791c319439bcfe9a75d95ab05af976d6095250d0b0000021c000000b00bbb4e13760919b12bafedbdecca67dd6a943f93ac7a05d76a9efc2fdeb1bcdfbd24bd2e045f3707e8f4de350b7510d139e13a3b2c04b99ba12ab7380d384599cb4e53b8d74f59a721fedf536b87346dec0134f00dfa79a3b6f56928553f49f33e62060b33de3733a3ae5dbb35bdd09c3003bf5e42375cbd8dfc9dc2f4dafe834bcd483f35603481cc057d818208fce703e00823378fb84b6764cb4b69871ba8d554f03091c9da55aaf63abe2b3caf12000000b010a23f67dc7bb57c681f613df0f3dec007f5f955b438cb8e528368e6b3a0a4b712421d317a75760dc6d5b33fbe475102a37f74e6c424e47c843fc782c1ede213febe085632c18cf2c62190f5aaee3fde9243d65c0076be75f554df56666d95aa037dc0998b0efdbad5bb644a556a8031194a61ee9d86a0ed45d4d926aa9e0eea3a7054920f0f08f68bd657cda8bbbdac2cee3cdceaab750237b4da8d34f4de945670986125db71be2d200807b6cd57e7000000b0023203e7c680b4e9cd431ed82343169ebc5fdf4f2eceb2035752c8fca5df6a1111bc6403242aac3f86de1cd6100ab7c844c7c1618e64d36873e659f8f0da888712e58458d94c8e9ac36a75598bf3cf2f91b4d47d0d968f29658095f6cd02a816125034c68dab4fe8394faef114375c020b40de84fb400477930869f8099b72ae3356afeef6d308a89d5924a8494741020bf93a79db46b534561013979b45db34e5c313a4da7905c99153a209d98d33090000021c000000b000f1f2565ad724f2579b214931275f92cd32f53cd5fb71f33d3f6eebb1a26d8a0e54b1038d70e6d7ef16e71fa6fc8d6df9717578aed34fb717f2de6ba5a8b483d22ae5743af84bfd83720e82c03cd9d015865ab39f29a9738cb58a013968416b7cb378ae77097b2a835e15680841a170193dc3f2fa9b60fec382c71fe3059dbfa71188af535a7ef41612809fb8142f7d172b2ca42462ea5d7e58361c21f4717bcb11bb72f69194101b3bcc23f3ab94e7000000b001367be00fec9a0225bb9632734f0b40efbc6eed47c2ef25053b444acde791feb2e341392ebb423a7fc6569c86d9c2d4bb9e6389c0d4e809d6050f19d624f522861e9d2f21b70b770b2d633bb0c7462f8d21a84263416a83b5cc720c7c667c686cea1d8b577fd4f15cfdb9401a187e3d06e5cc7ee3ef180bc3fe1ccbd9d7fd7f60b840ad1e8e78b752e78ca4924b198d224b969d5ac858b9fc73f3ed803a8049a348013318cf7f920e92b44f22734ee3000000b01f55af451020721c7b45bac7a233cdeb50e513dee5e5f4162c640d7dbf23366c3fb41891ca93f929ab58e52301336b9636be8bab5ef2d6b65bd9ac7326566f9130c879fa29511a0f11f07686964793efa6f7855a968debc3fdb0785ff939727a6ed9dd803179a5fc300e98cf6129718a16fd5d9ce3383af55a43b4473fae49522b0b8abd912a1839c1401fc68d4288da0a4cc119337dd9c18a35e334872a250aa06f07348e7293e52a5f085bd877854b0000021c000000b00bbb180b24b6b9a8cb0140eac38f08c3b1d474177aa88f82716251dea708ec787fd64da80bc67adb9edde8a10ddc0fc04ac35defdbdc1be3930df5ff5da5581c3ed2f5c2797c5798b5625e897ab9cf2be2131c1292e3b2e8d847285863ae231212418452983ac62468bb5a6b7bdf6f0d157c6990a001df5cda7098f63267f60eca0a267fb824f4a7a89e945b1d89f31c1b81d425002b8b857c772fe3e7866c899fbc22f2716c9e523edc7dee35978cea000000b004236537cbe45748f9b85f85b03126b1e1799c0a4554616219ec68c7ae41fb0cc472aa6c9aee717171858054728bfd1f56fab6e78afaed364bb5add1fbf986485563992e4d7081f889460ba5eb1e5bdace3bf89182b1292186cfa7d166e5524b3559c9b41c1522d18b7c59db905ddd910d1898bcdda8b735ca34a4c411eaf6abf12f440d71a84904e8f1cf6d77d73d1d2111374a14c15878c28e704051e80b2dfb7695f2e4dbb75567488890f1c541c6000000b01c72b2e6c86e8bf9708c81189f309ac1604871f2114511e15f68db386775bd9b33a49628373979499d77aa0353e2765f73d3318f02ff738baa1eb7080faac7430a81944424de81a9bbb5b201f233e7a45c6d5b2641207bed2f10ee68ca355f5c27e62754de5468c3577c5028ce16d874087d217f7df8b1cc05013d06b6434d13c4d8368ae1e8575eec065f74837e56d90919b0d7e7822dd26f1ae1d7ba77ce6dadaeef520b8761b60ce8f324db64f5250000021c000000b01d52a534f4a99a4095db8dd2c673ef8b118494cfb2e382e5790c899d2f5af14af07df5b46b24cc828c797a3bfa3c7a715594590bf45bad67b1357b440239a553034af2a1545e434b85848227935097018d57365c6fa63accb31175c66f1124f76720cf341a8695e157b2f0ff824ef1d81e667856d7e063bf98ffec1d6a7f9194eee5e612e106f7528ba1b71ebc97b70726ac35551ee56d683d5407e7ef164c08fbcb10d63c16cc97d3f84bb8799058e7000000b02f59334448da67ef7d3e6a5ae42ceba4989b030fce6ed4d3853f6fb6f9a5757cf6d972ddccf77854385d882b2f0ee15ace40901af8ed05684b1baeaf7868085145f7f263042d39d3fe22baf82d6b802f563015b628c30dd1cd39be22509f94bc98ede17e8439acf4c6f58e9c5b2d06922ee56f0d722a6b732be7a8adab05408c8326ce11d1b1371443d21869a3c791af09bb962155693ae2135747385c90254664eb4b569b36a32101a342839a6f5848000000b01ed5024ad44eb609041effd5a2f3a5f680ec29c0e5a478ab1d4aeadf7dc1db65fa1c132dd0c83a17269af4705636ce5e1006e3a33815ed59010207231e87d2c96f55c89d6fefdb32235a6722093cdb3c6461d4cb31ea75d510b19e6f3db6d3b1b7b1f50ee859e3e1033ecb3c2a144ab4020ca8389427b3649a4571b7c3850cbc38ee92efa37cebf9f0f8c525441ed9a302ec1ab130d7a4328a4005b7952a6d21e91e375bc3953fd41734d4b7b9c216e0000010ac00000180000000832b0803a539cd281064cf3d7aeb01ca55d82fdbbd3c6238ac75b38321066968aab0c6f5640000005b7a531096b90664eb9a4ec0f8afd0d3226f189e5863d1576b70f4e41c758914ff17d52837c741e11246c446e8305b92d3d302f06f101188a3b41a4d72a63c09e88c19225f91d2b294463f89f71828f125e4e674e6b2ae044b9cb15b000000f51d2da4a74155bab78dee663e88082feb987aa7f39b78e40dade41a80f80c8dc954f75df9000000cdb480a52d12f380ab1296d9118e7bf532f396e57839826f002eb74670997ced5fd2333f78369cc95d748b36e459027cfa5e29a7b6ee010f0d96cfaa2b6af7b608607a02c93a554acd16cba1a093f183275bff98d77e73ee400209657cdd52ba76545d3c0ead57accb59490c5a68867ca369bdbfa35bbab7439b42aaedc17314a0482808c2885fe07d2118bba0c4860e248f4f6ebfcd131ea713896eb832492fe19c4eeb76eaeead10a0f1baca6c64dabf6b3e24548a63b51cca92005f7173a0fdaae1d024f73dea06c02ac0f08200000165000000fa0a78807616f238fdb4798f1a43bb4827d8bb316b8ded85c2507b224cec03c0a6f609b28b000000d2f5a1fb9a7b14c868e40fea35835ea63c0bd8213817efa7d9f705171eb99bd582758f9f5a9e38f67e7a6c39ef10ba0d21c81647af8b1bf2f327e3645d27284f0ad30566caab7080ed1536b936cc68484a8e6618e2d2c01890cfd5ba6e9b48e2c9cafcff4ef0463f7900f0c6eaacaf25dbda71cdffafd370347fb64163830e91f29a94254e56d93783126edf40f1d56b241e2b893b62f95a7a04649049db62ed038d014b278b6675d73b6c26ed6f2da92625a90051601218d4f8fe03359060fe81b7139d8211a6083269e12f665524e61a298200000063288804b47aecb245769a58508c05e1242eb7c49f2853db5bbde842817b7b2c6e966cfd870000003b668ff1c5bc7a5dbf4d88ac8b08b1929b82f581f01faf076737ed78ad0cafb292df30217b17e509667a91748f12c8a48c7e3c6a8c17ef45023902e20000016f000000cd291fbd021cdd42134df58c49cf8419c7b74fdc61d925cdd45a22a78445c83c5e6afa0c2b000000a5fd68c1fa24e5e724daac41d8a20b63c4a61bc110ed7cc69d6eaf9eb16c4e5be136bfdb084c393b3eedfc8f7bd1d53ea3478178f91e86e86da781a00862c2a0d7ac322db1b81f72f89cc414109421f154440bb7e9e8ce55ba50bb461c231d4d36dade04a5bd4fc1fbb3f12633acd25d298d6abc82a8d6fd2595a20f387e6bc891634a7bf45f70cd11457cfaf40de159012142871430ff94e8da322dd2950e250bdd60a782350000009a0970d42a8fad6dad37a038eefdb74aa72fe3abe8d6ef8a9c098fd81e8cc5b975c0a1ef99000000726f1417a4d945af86709e4d2d2b0ea885fbf13e086772c9ba633530dbf93d6db47c93b6359e4a4acb770a7d8d3e1bf358e453c5a896bbca053ebfdd3cfbf1f6d2bd1a08077f865559e6c616063fdaf78687b4406136d3111f291bc966a94376888a5bab39703a65d8813c86963eb0a7fbacd8000001c9000000990db66a04287bb555b7056015bf52cdbeb73ad29755da46c0669463ba8e1ea31560dc7ef0000000711974e81a2e32653b2cb50d490e235abc817c6fecc17cea52cee4892eb3814952be23160b21420feafcd01daabde84884f1f99fe92a8e6326edc66711c59041165736b6f6d9753e267fbfbf684bdaa56684c7a0da7a8d733481cb562db72197847f2deda1b0d95a89a65c116be16f5e91dc000001281817a2d6d175952d0b1b4515e715771d2c3e861f6a070251cf696310d20570f24eb3809d00000100f32bcf10c1155801d1fe43f5b71e13db67de6bc08d1c019dac21c1d4f141abd3a365e051a90549cfd45bea5a49e544bb93c22437518a3c9e18e2e733edf48d7c473a3d21ee431074fb7351f406714f4539642b3e477719fdc28ca4c34601fc374b10ce8e92c8dc29652a7bca756894c9aae3aeb02885fb3329b9a3ce6ada3eac36c9d424c17ebe6dca7490c995d98f3336977258af6345eea63d91e0eeff14f0cd87f579054ed80b84e95a2dd38206851c964f1eced99f5ef974548bf48d3d26b8d337d8e55b7acd638e4789cf92cff5ee55182f2c349dcc17e5c70a8e5c7f7b0cb8e600ad84dec45fd66a46353026b34d09828abb26972f57375b6a8751e18300000132000000b129d649dadd64867279ddec45b7e4895084b0ee3aa8e7fbaaa91c4057083832fbe7eed39e00000089cc09cc38d8e09f2a4df927bdb5fb5076e5b0ae2abe65ad509d62657a1f14a2215635e27b950f70647f4e1d9b6ce807de33830e66cfacaa630d78b0560556b3d589fe3df016fdd693241f796a12bdee974c57f49033effacd8797160af4c2797fbac54e0929a321f561c2367399ef0057ccd03c205adce6d14b3dbc259d5f9917ed50a7f3797e0e75b3000000791f9e995a04246cef9666d6b0aa8671794aff2f1a6a504ab999cd7d65274b64555e9029110000005194e998f7e74762e8daa715444e107f1cffd12a54610ccdbdcf5e6f73b4bc8c7593935712814c80d9417f948f219ab022dfd7f6b86c9ad45b6c819d8364ef4d1bb115a0de93aa3838e85724467cfa56e682000001b10000007f0519094e31f9d4af168702458d72e5889a0c7e4ec2aaa650dcae46b5414d4258057a46320000005703c946aef56630f9adfc24ef4828ef8d67a0a4dccca467012c07d9a0dd849544cb0b1e07d673f9fd43cfe4239d7c27b736e295068b4aa15b48def540628c0ceb87b5fca9fc157a1e44f10c9967d383e79775a453ffeabe0000012a25afa10cb1aaf960dbe58c25ff1add0e8bd852ebc64b5a39bd09a22b5d4fc88f3371a85f00000102d32ee619d5a9dfda1ae47df9c71d122bdce30bd8ce9cd22aeb65f92f9e8cd99af15d483795a40576fcc816c4b5819fe5285a57286b1d86b4901c64bee4bb4d55b7fa31c988079244377bdf36ebe5f453fa2c623dcd18b6ba5263c1166338b0529902b50532a02a51a276067b5879f6b166cdb8d78ba4228f15d76101769aef92d45d12db29711ad0bc74ee6f95c6fd40eec90c3236341f6198c2a54180ba8924732938c05f8d24eb922dbaa47b4b5d6169cac9f3f2b215e6809622bb129353e09df2b65ed3f512e6bc643874848d0ed53051ae1165fb6814d9cf1abec9ccb6d1ca49ce84bc23e5718b92d5ef0e66681d2c2cace53c63e72fcd5b666f561738eabde8000001490000008b23676064b8490854d5b1c148ee39067e8dd81adb2c8bd7e8ac7ec8c6c27ae89d7a25651800000063af7850073f69f5e9ecff7d9e3e256edfb7f38112e3e70b41164fdb36d1a08ca18c78d438f2259889488c790cb651217b5723daae970aee7c383ec4a654b3239d2babe2337a9c059135fca72ebe24904e406999bc74cab6c4a595c57cd73f2c2ea4ee23000000b61c3d7bbe5132ef95832f984e2997144309fa0ae5672bca9c6a536ab4e162fe3ed403e3540000008e776e423046dc0f024ed144b239bb6fc12b2e5ccefd3c10216d29c1f4d7562a1f87972344baee5a00861ed3d8a1b1c7a5703196a9420730c3314ebfe1a6b14de0ceae2c026f2f5a2ef86eb7bf3121905cdf9117904f378d2c52c65a8cb2cbfcdcec51ff1aba6b4bdb213f4efa0ce00c431ad366fdeb101efdc5f250cb6860fee8247d0ad69e7b53617b288fe80197000001a10000009321ac06edd327ea7643be433293ccc5ddcd6408cc307c78ee59391ce8c6b56de9cec1f4ed0000006b972654d0ff02f91ba67860255a5a602bdcc82be17b9eb29473c9c16f26a8be38fc1e01fee9e1e5ca95480d83fdd28b8c4a3c47c01bc0e90e4aa46f90a1d3af100ba8bcef6c246e95b88c390ef7d7227f6a3eacbd05f4d8a9510a6bc42cc8355558d0acafb70bcb6489a9f4000001061c949ca30b1d1e1bf117d88642583c61ecfe654af067c9d00c29678afee0e699886035e2000000de79ec4101970c973e81e64c4095cb835105299af94f8a7844bc4f0ef8a9084cf7b5a7b0545a28a359b860f54f03d74f47e9e7b81ae9714a76d4ed34cf0205c1ea0f23f2488a9c8f6940c9b5afac88dfa96acadcc1a622a88d14e7c3af01d6991b86b13a8b88a9b774ab10d577c6e69edfd508fb04af17a4f295011d67c4a8dc3e439819d353e95e016bbe610372a2d565ba65ffd7471af05a3a31c4e71df59496223711c47992324079e4655397a7b73830e023ab80d07c36eb83acc432293ac4d4635c9889c95e269f21f31bf7618d2a2e109a7368ed25af0387d3a37dd4000001a5000000fc16b61707bed90a064e77bf95dc0cacedfcd5af91563ebdffdf6aaaac7d49b66daeafce79000000d4b07066112821db14e6559fc0f8af57f9065e69a5b41a29bb52bb86aa1c398ee8dbed87741d7606caf31da36b61c69d6f7e23188a24f57797e78d2e8716e9d3a3968363a0d30e35032ac33e44dcdbd02864a9df192cbbdacc8dd0edcc9b5db7bf1ca1f97d3eaa04d188ee79b54052d64f75cbb396e11e5adca1c8bb3e49f57d33415bbdeb2bc9ffdae657f8eb7dc73c41d1ecd001848c52eae5c3149874b7ef2acc979b277d389a7c272378a98a21ca81beeaa7fe34fc0f1bcb58a2639bf33f11ab2a88a76fd41de8ac59382c13883880c2e1d70a000000a112768a4d9f07ac413172be46d0e5f861554d65c7c22e007789b1c8d5812e0f4768a4ece800000079216119defe61bf4e0b43087fb513d94cc3effe79e2c1d08ebb972579d77114e459e2de2fa17e4a832a797d1d4efcb261d09721af723a68fa1a4ced9b8f3100afacdd3b8c9728ecf07a149fcb8ba29a81b3e3d1bc5fab08e475e5f916f0878576872f404dbf060b38b14b99b019442ab7928593163673a207260000013f0000003028f38f379de7eb1a6feff892291e2b275dfc393bf7c89b1bd41804db626a545d1861c62c000000082e32a12438552f900000010725a8831f2d27f7dac9eed50bb64205174d8cdb75d624611531fe4b40655918466083ae78000000df54b4db94773fe659cd802215995241bf4131c900c6b39156e02f1f9d2e48028d07ba1032e2e5848b2b7704735ddc12b413a2399dd13178598b7444841f7dc328a956f48e31d136d4f37842df7dde9449e59838a7ec9a7aa5579b6c99ff5561fe3c7cf9f75841955a58653fe826c2a4bba9fb541e946f432134226bcdd72642f2cbfb108b0e5a6ebd473ad22a756f37a1c269889591ba3c804d4d44251245998b94d1b1dbeeb19352bcd66f9d85f0eb3a18a698b5451376a95fafc32abad8026b098dfda55b0562e93c6353bc83e2f0648b743b3d8c48478b9cd2c6bcaef957000001b20000011104de00ab89e8eec541c75c30a52755ce797c57c59c673e3a26d1a80f0599617d55b7caf5000000e99704e728dcf388ecf08efbdd67bd5b64ae82671ae7f45e14ab60a7975563e9e9b3223b7858bacd0984ce7ac5e4e7d9a6ff2b9a682398f189a7bfa7e1e15c3343e53875461bd03f46d557f213f570238af1aed58406744df91edba0df91a779b84d0caa2035c784f5cf0563b2b3672ec72c04b7158d4253d688c370466814f4277b4492a741558db3a7691ea44fc60fd82145c20b83e5fd5b9456f3e89a1741dc0a89b611adab9ff17631abc7d1f2153f69cbe6d2bf8908fe14eab9ac9d88671f6c83331a2c1d1f3b7b5ec29d8f7c660ea831bfaa9bb6527ae3a917225b958970a29e3d2b9b6e17c82e0000009903564465c99e3d215396e086d745fc33f2c8de6fac1886935acf74174f492edb5d95bc6d00000071d1d4d319505c21aeb25538ed2e5e615514c5144ee480500ad1b73c49f20b30eb3ca9495fb31a65c3b1c48223e6d4b20a97040539b3cc90faa8415b1c0e71328dafed96b0e551454ad2060ae50eb453cbfccf2793538bc1fa5ed6c1766fe90d328989434bd56053bde4fa0a624091278ffc00380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b01b3feb407527ec22b25cbe3effb7fbe361de44f23829ff13e7321af463221ba326ced2dbed353737a49efe18ad082192f4e8c09536e89865a78cab54a133168a534c53e05ee7ffe2018e44c9ba533a26561bda6b1d3b85cf5fe859132d32bc0c802c8177dbfa635c578658040ec0ca2a11c4d51eb06d5c0ff0268ae623af885aaaed9c33c41df9c7cd3805cc7233ef4d12d5ab1dd88410c2499cee17e6cddf2e5e0a70b5de5a185314137166f3b9c6f4000000b021e108ebd549d6431e3ae490c9d19e407fb997421cec1fd1d78e4df896c9d54450ae30bb18f32c9821ffa78c06cf4955adfce9bfa79e5ea597f23a46c7e39a63b34c38c0f77fa172962cd6065092c47e26f5901f3d113b7ba38e3e12d78559b38d2d6d50bcd209056bf9b730c6821c1e16fbf3a94691b46ecd7e3d63cb01073b3bddf190a441580e59381deaa9b7ed0e0e7721ee1493d2c3a1b798f175e15903320e2a0349d988ed0ccf8109e3698b57000000b01798ba25aeb7d1c040a91fe24b9a126ae2282a9316bdffbbceb04a1dee624bb3502bcb6d276bfe63c5320666801760b918abe5b21d7abd63a95b54fd1123f6262218f3cf280a5fe49c97ab4acd67720e88a53ba796b30a162b06c742c308e6d1c2fb837b1773efc9713944681c07f3ef1912832c300741b935c48e2931af0b411114c0fb7152f0177bcd9e09dc0591ac1b93f7caed12f0cb7bd08c4a991269ab179e5255d6d4f594bbe8a15c431847850000021c000000b00565fd637bb1b99079f5585f24bf7ff47e4f99986e948492a93503e632991aeca4926120386a1e8465f64c833e52ec0e0b81446fdc126dccfb926c2e2ad6506be995b28a3767d76b6f470130c158b7ef1b456cc49a48cd833f203fbe31ece995c97d494f59826acbb56ca8732caa10201ac3a83eaabc55fd7e6640f2f30962e3b0b06e2ecacc295b8df676c3098f949d03534b0e38ee61d23fe7d20df2583da6617aeee735a3b489e3922b27e15f6320000000b01ac84a7600b0b98a291d6fcab640fcfb22545d966231e4f94544fd7b880cb80aa7e6f384aaf6127f4b926c71639e531921cfaff510a80df43e60e33ca5bcbf0046d8fd3fef168369b1035ac9de85b299b2df5f33aed7cdee7615ad7ed72b87972ab0b58529ca775d95c177228f9ee68c2c5c723e4ee29bbca51db1f6898bc41ff433abdb3ccc9990788258227346367d13fec5a4f03f9c14898483df85a4ce6b48e7476319946f1dbad0e5dfcd0ad76c000000b00da3e7c07dd8b16ed601e7089d7e08545cf78a3953a977d472fb3669e5702179d26a63648de6c0b67ce60a19f4e099c0d2acd5ef3fdca0969ca555a985b61253d322dce3ba93d566937570f65581e10be43ea374006a4ee8452f9c0558827236c2aaffd72243123d0b2ec823bc0e151f2a9c658e0be59f078781a94b046f01f6c323b3f108328840ddfafc8a6a3f85aa16722d19b3e7992dcc4dbaf8032a2f12f20ed6efc2700e895d54e23c4a4179360000021c000000b02a5a16fbe006c026202f8a1bcbad76dcbcfc5275c4a066c0d5d586c54a1ad1b0e539fe881f6a5bbdfe53a272240774fc85c27e53ee2db80e6431527ee3bc1ea9ec818d0af8d55beecbbcae8b1c12f41ed8abd624706ef16a4f5a9f6adab281ef04a9686a62fd161e855b2c76e33b30702fb47bdccc120906877ef14f25e7a7ef58ece5a5d0621934e0ab08436fcd32a5004dae5e430c69175e7b8b147b7ed8656131addfbc17371bbf4709dd242f2674000000b0194e1575a87eb7e23b494c79afe7afa4bc433c71436e20f628b3aebfc9f38d09a41b2dcc9a369893e2dee19a591f175c1575a9db1ffa9c8b72e06e4f5356fe6411f70c5ecfc38df3b84ab090c274962745c055e31da655460377ac3be4ebfcca34205332689bdfaa09ed1dda3e35c8181cadfe9e906c5685559529140d267b7328f21e289ddd22a7369b3ed3872552ad1d9a67d69481aabb94a14abc3ccb7638528214906ee2a955e8f080d05ea14f45000000b001d19f0c699a4275bb8fcce1f55ae5255f69aa8b45aee41ce479a65070a7f50857abab2976e0309c1229841ad05f7f1c8193104c47c66c838323ef52166857600d422841a58f971f29b61dfbbdca4731a10f57ffac4cdc0d67995dcb4c5fa7d2d17db1ee7537640c8d62dc424827b1a82a07713b225d3cc7ebda6a4ba0061a77d9bcf06b7689d119dc3673284ebf25742b24f24ef67fd5229da13d28ba910c634b3a83384ab57b88370ff16b75a104700000021c000000b00136635a654091a110b1b36bc89045fb7a91a06c8ffc3bcea669a4fbb7ee27e3e67da2a9a3ae0f212abfb6af37618b0e5b9eebb8b5895ff250b03e92f2e58d88a80c548efc911df66e1f0bdb022e03172583ed5cabb8246f44c2c4312082726d7711682e2495b34869978914e7ef4501271b3c023754c38903bf1c347861c8b5a0b6ecb2afbdc9130e2166547a6f12bf074c6c0322ac46dbe143c831cab71644b22108754063485d2d26baccd737fd9f000000b021b7fed947b09e5335a5f2091cca492211b03a496703cfae7b043800de39e36c6336aed4125cd0717c34f53dd1e935a446013df576a6f919ef5335577c6fb9961022b34a7b40815ce3857dd449cf59972a4a9536b47ac221fa5c2dc16d7b1963600d9ecf28df4110b084e77b579723ec24286a4b2eb2a78f1a2fef66ea5dba4615b372f6655eba1952437efe341c599f2f65123b812a7d53305f3fc60ac46ef6d44688c588b80a3bfb812d6a7cb6650f000000b0235b732d7744f70906ae9376cec9e3607dd0e3df289b724429ff8f20c57c684dc44f127dea8af35f377654d52dde20541de129c0a64cca038d3b3e8b6f3f68b83a866d31083b50943199ac9e4b31f89401dd7c8f76898e1796019f80c9c2b5b988d9a6c7e9e6b05571038bc3afd2af1928d3dde4c2c0ea1b1ad383dca99399fef6cf7087a051014de1986c1074791e9006aa890157106d01f2b44fc83110039ccbec4b2b222549de5804c70d3d3a6e600000021c000000b01bf8aea152ec6bb10a84ec6a43f016017faf0043269bf72a4055da914a3cc05cd0380d9a132863f7666224fb04167f2311e7355bb443eda7382fefd32741c316a15f7aca50e1b3c2512e99bb13050569fafaff1e164b555634fa77c8b253289a1e819d140b98c7dcc0df40ca0bd4ddb7174d9beef4478e802aa1816f0e5b0ecf453a53e72dfcfd0781fa42dd62d658d1035110003bd03a07b3c2967c54363baa2ecfa147b964580ee498cc528faf5356000000b02abe06b985797d61ec7f433f29fca21fbee5a52b4abfd4aa991a162a8c91cfd34a0d1e8c196cc45f4c044a58b974b3c2ff64feda4d22d97d0786026faa7e9df5862f251c8444ab7ed2c0ed0fcd3532383ac304db74fae26da836d5f3da005a8b062138edb3cf86f676f454922d3342a0156a2fdacd6a317d25e40563c3b3a7f3fd2031adb614b68ebd05e7353929a32213b90fbfd28604223de4b99b54c65be7cdc0d2081bd8483ef94090571d6d6722000000b008eb5b0b429beb3896fde069fcdda3adf1ff93f505438f4a514fdcd33d6263682b01201976630534e969961cc7587654cd47395be56901929a1f71ad9c5b08aef8c6dd5a95b702ba20a0107fec9aaa8fef449a9e357c0b3269ff5b1f24d073f0c20d0324984c027c37dd9728f442bc8e034add118ac6bea6d6a7a1333a0fb01f73312d4ef41e544ec3a3cbb8d862e7110be573165fa511cec2de1775d3d2347097aa6b62084f0b326038b22e4c0ad5390000021c000000b00797573405dc588d45a43f996741924b99506886944573c6deac66ca16dc8a741450414fa0875cf3e25e5abd6e57fc32cd412755f26f28b945fca03a7ce4f9bef095096dfd58f28182f90ff26ab19bbb73b82ab142827114f7dd81bb7b50aaf99a6dbfe5ea09c818e1eb286e43455ebc17e671da786dacb4cd172b9efdac4a61b32c222e9485f8d4512e015174be44dc0a986a05c85ac3bea240adf0d6a651a75363b891192cf07321a7f1663c77b97d000000b001b7c10ddd953170a87791a7034813f36fb68e1564a9c3885a5a91b9d913998fdce02e9d3bfe0d39c92719c49c35b3db4293706ec78d0eba8674fcf3ed950fe8b823c73bf4cd9d245f686e37771743d94ef2ca25f27b2322dc8966ad4eee48edd3d232a34c20f60ee2d23ca87e2bdb4423c8779aeff0bc18f5d008703b11e3ef906e01a7ca1ded632002a3e0fa34b22d12f85c573d3cea234f0ae2dc63e495fce3d85c8627773e520e496a204173688c000000b02eaf175ca8ac8d445a9734b58ebcdb0ced503dd3294d98e08b5da036ac45e4566105bf8d5002dd15e8f8cf44cf2e2efb38d60eff25043f4f91d894066a27e569a532c2adaeafc2858962509c13f167ff080b68a997e8c185f69b21feed30bc4134dd45544b254cf39483705c23a87b5d0161f9dc9374f0cdf1a76936a4e743770281400ccf72e19134a3b10079e9c696057efb3f9bcf00201accc7dfa6b340495b10fd07375c96ce2a0a02b81706bdb30000021c000000b0151b02a617d3d24391ddd1ffc6938794a3c2c7c33a11592d7d4b4a733463f376a8f46be1b06313fa7df7983d7c546ae6a9e8759dccc8978f38efca51fe6d3af126b45fbbd75f90f62968851c69b54500ff143dfc20a7bcac1502a06ebd3d148269880da7d55e3ec078de32d24eddad3411b72740ddeca15f3fa8cbd442a1cf500b9f320dc9c374669ed67eb414d744c02598ff0fcaae0cb7c42caf9211e51233274760c41a0df7e0c825e4c7178caf9b000000b01415c16316a47a60365bd28c3de45da22f4065b9b5837ead5c2fff022c788d2a4952cde11e2ed462205c355535f295a5f21619831b162648d1624444c17d1c954329bd2d7a5b35bf6b73ad691add43bf5b9561dbace533ee71c15943f3ec7b39c4e49670584f73299a450475395e052407f1439010805c66c0cfa1fad6fcadaefda2a8cebe664f980b734c5b536d4be72d7e12b7fe7f5c067d00f3704d4cc6018f36b00939767539db6cc9c611456cf0000000b00e48b39cfd858178fb956c1ab086ad3d5f84db22ec7978f65ae58bbbe6a8d3512dce510659a90f8fff7b828a58c75345364210a4faab573f833fe8050b4c3df3d487c334d58346e2a903785a5e008efd800dbb70a0c1bc36079c05adb0d747e91618266f4ab5bd633b29d79176b027b92e6c528a9c9ced8c7ab6cf4df92f57ec6872d44cdb1ff57cfaea7eabd348adf525f539525c1217a41c6f965871078cf80d0064a8a8122f228380f389cb6eddc00000021c000000b00bcb909ed306754fb6924cd00d2268f377c0add2c9959617c16d55140d9b7470d68577af3fd83048f3ad81892a61cf15fa99717eef48c40098f94b2247cd418ce4d43850597fd2a27bdee1a5bd7313bf2ff594cebb7ca400e47e1eb63ecad5f850b89a7d930a4c331e5261b7f0e26fed1f7cdb2256847b5ca4a776cf526d53c7bc64f11d9e18cde0804fc41c4006581c1743a96e0c6c988a92f24f41c0af42c3028cae64c39611b66dc517de7d1175ef000000b01baef94a391edc636afc8291e958b61aa1f6089d1aed148bbaac65faddb1d9e8f235ef383afa0f027ab200e2898aa9f9d272d2a756553414b7f27258593c765deeeb0dfec3493ff4d774ce8037e3c508149e49fd05e5798f065a6dd0eb7425bcb2c570af79f9b3c7ad1f58328b09d88e0bee116436b45a8dd7fccf413aad080c7eeb249e58ffb08fee661cf7a0af10d108fe75c1f210c93864c1cc4ddbc7239aa4f02649dcfd19e2288561ec7582d6d0000000b0292ff9c4b5ef4e429a79a1115997708837c148bc3255dffad5d80188d9f0b4dcd96ce53424f391f5f90566ab40f60dc83875a38b4b217d340aa6e4526377dbb20d679a95d3c83816d839c878e06fb2945bcabf3e974208f4cb0ec2ddbb99e2f7b1168e2b529e3639c052cdb09655af961751c603a7eb39f48689c3e70cfdd6a0ebfac53d227137cb922fff613d607b1802985f2be1c194b0c46c4e959093430e09d9d3f4b7982a561728c01bacc3ff2c00000ecc000001c10000011d2dd6eec19624738e7bd092e928d9a343545c6e2c0a9765fd7b0631a523b37edbac4b8402000000f5e558015f977aa31fdefd65bf208731340ef7d66577809269a405992306674c595e61f35c6bd876a555b92a25e0e5001836263bac06c7785b641f5589f6a9d7a330805fbe924012b70f836dc9faef2a7faa54e20ab9435b13c331edebb55610b88ee48b17141206e1692e3de7866c244fbb71951c4604f63d062f22b4bdbe8423fb6f753f68baaf02bde9384715a014db88b89d2616386533ce8bf309ccdecf783cd95a7c996bea99e4ab82a26600ce6e5ddf1e7b63a677f5f7776ce9f145be990fd8d7e47aff17a9a9d90c3a63ec69fb931daa96c32f7641c1012565152082cba6f2c62b371202d02079ee767f9b0338365d66a7200000009c05f4f8ec661990606061f07f37f5aace4417d7d47b769fc8913b89ee38e47f0d265bf2f50000007494bc1e14f8f47949d29ec898b0fe66f700df7a7ee7ca90e53c12fae7b7de73ad420f1eb01e8177fbcee02607c26dab112333b8078a808857b0ef3288dca358194e55dc6e718351d5db78bfcb9b232aca9144d38c37d5850df52c447dd6589b4facef5e95c3655c7a318cac4601f24382463f05560000014c0000008f10cb60f7cda3e14a7274f7c1246a9e22c3fa7227ea01957a8414fd1ce8c6a8e79edf6d60000000671b6835e821ce1c0b584b6d88256194906d41127297038139e896c0b901c4da2876d33f0dd9a73576a9a65d2e95d423802bb6e01ebd8fdb63aa8fe6c719d390ffe9a60d5743cea1ef782e2056d454f81ed57fc07b923f3c465d8bb80889502c13e3dee183cdf2dc000000b5294e8e602dd6f03d078cb6574e51a657b09042d0bb55c0fbce1a6aa4dd6e11cfecdac27a0000008da177260cc41bef6566d537283cfc1b34c19def4e3b447d9263e6ba970017c4afeb123e208e120941c9e651a35f048c78f2c39500485217d1b23b1b54d0884fed1d90e8d626fa61d6b9b7ca226c392eeb446bf6f54a85b56eabdb6d5fe67bfef25588c1d583fc1ad619efe0b34a239d113e414f369d8c57c1f0d5a40789be8c8d3435a8707c85edc239071916380000012a0000007509a23baa628f748b28ab75d31563b3413b60b9eed263d4fbe34b187eea376ac6d1b424150000004db190dbda2a5d146d273d8275ffa99ce2383b1042ea372b8f758bcae7294de549a0f32d87882b859c7b24c40ffb6b0cae9f09d3f44e272a13a4a3a6473d8038a78453030768aff9fdd4a410a5e7000000ad031806da48fd4b11cc0e83081e145e401d216a5e956f647abbd0907f565be7ef9063a03f000000851616169816807e657423194f9533e5fc597879fe406a984a29e3fd35b53daf07f610c3fac34e8b529515097314eb9dd3ec3a2971d354593a927eee6ee712eab8981e1ad5fa1f0974df6bb87b7092c6e9de7ce6ebeb8400c7d5eabc24e249a0a850dbca0b5f51351772154ea67ff8ac5dba59b18fd6579652185f1ab9fd351adac27343c304000001c7000000f80a4af45590ee6c2bb4d413533175249036eb1ff34dd4ca899c3abb73271375e4b1ba0f56000000d02e17acaf734e40c220d047aa0b7c12b20954eb6fe5992b05a42fdcfc5c3a78efeda41165a59e6910a4a11cabe9979bf875b2d235c41fb02508f54d9d2962b671d7781d658a066fbbb9bfee52f656237e7a873a9f846fe4a7117525b470dc1a50c747101320be83592d8e4bc2b63145febf1935426c35abebe3fbb810123d6063be633e3c9f075b4733246a878583e557d4150e0de7458e2cafb798616b2d0ae3b6c76e65841eed84535abc7cfb857988aaf57e03c52ea6aa32161cd34595ed93fd716c3b8401f7a4548dbac2b121c66c000000c700ea13d68bfc000866fe2fb84991b4d771d4d79ae3f0afcee93c694be52b51f3b48148950000009f1e0b1c26e95bc7cecffc3822df6cd2de43e4d8245d67422f77f9f79e8c085d3a71273e0e50951c4f0dc1995c3061141811ff1c936f9ef86cd5f4cd0e2eac573931d40a8a4be37824f7d260b55fadb94d0db63768916fc320855ad1d8f27945ce683d53d84c6ef3f1433d6b5d836e3a7cba88f6d4ea158fca1a3d35d9387c25109aea34059d509ffcfd7db945509ab9e76a638feb4c8bb95a6754ea6fc9f26e00000189000000f9085890dcd49c23b24be80660df1b838cb4c1d9855f0d61302b00e30fa09303883b841ff5000000d10b1d619c966f9b187a87267f0e64e8bedafe67fc3b53960bae428ca81018c3ae1bd752f3c298ed7955a108541689d6978faf036faabfba7cdd4e5f9bf26f731fd8f9926ed8ec15ff1f0e371a6b669796066955ef363591b744032f217844de1aea658014047896dd427c0bac1dea723c2c9d176e9aec2aa95300dbcc17a21f84d770c5c46f68ef67ee6de49313f5da2c0b91e7bc230c87dfbe5353e23ca364f2d2f140d1461f59a305e4cc5821c49195a0a0e60c5fd1175f22aa107e0e3930544aa97fd897ca89e6b2f01eabbc1187bfec000000880f8c75005c725ba8dd3fe1a25f199e1ebdb8685ed12bcc54521a8b5c207f48835fe29c38000000600f8a15bfd076caba290c114fd0e31251dd4fd600117623794e8bb995d083f93fc5467c61ab462f113d9059841f48555e5018a03c0c039635b1947baa6202c97348a9da7f845af179a5d950bb9931f33c89f67228a7902d323da48e01e98c9d790000009e0000004d266fd188afcc97ca1cfea31b2ffda55299d83370bdcf0db8ac73f71509adff820c23f4e50000002504bf192883ac625b43799e7159d82fa834335b120dcbe3aec9359743515e62d929ac67aaa50000004906856cca916fc48a3c9fc2969079ad19e0f2f553846525fb941e2b9b45bb97355c251039000000210a709028fe903afbbefeab52422959fcd7cba6ac5822cfe8e12a4f7714b36b500d000001a80000012b2124809c07d0ae909a4ad977cd2d8366056448f6930fad75062e9f5aa4c87e7660c911a600000103217a37d8c5c985226ffb400187ff459d77baa02aba1c349094992966d03e5a9aaeeee8ac12772ac96d45110813f4b57b65cd8ec2d8cb5d59b3b578ceaa64d47dbef2369fe27e4a94e093f6d15b6063a71f6781f9a13266ceb60f7e872f9094b1651b34998060ff7cf9726bfb4dc50c00dd0544be6781899510fb0fb5ab28080356b73e632765a4db02595e7b4d7b61585d70b5b73c2df41cc428c7d641ba733d885c96ac0813d6b141fc501d5f24d3864ffeef6e8ad3a32a502661535fda897041d7ed02f074bb7c15f16b32dd342a10b1f00bbbc02d2832c8561806b1c01217d58b1c2dba0e1da5afd3c20d7362df8f6299bbad0ced8c60a0516488b1f80c104b325a00000075032c220fd5a62d17c724bf286156790b141a2ea2707397be0c91955b9edbb6687a583be30000004d7730e31bb8aa2b346e391f28bdc6502dab2325712a6510935fd385ab5ebdf1193002a606f874a3ac342b24a851669a1db65ea3d4fd66849f90052e45a80d6c00007dbd435dced946062d4dfcd90000017f000000d417171e1746547c59114b15ec2b4544f198bf8b440539a187b22d92ddb50146eea8ef9b6f000000ac0010762b517e190f2c264c7bd13013d1c1eabf291a542c0afafd3fad71721e7f683637485771ee8733bb7c79009cd67e08566aab4a5db9465ba27d6dcd67fa7348f7e3de22fbf20076a6f91bb0c55339d8dca5077d8109d9d59df72f34285a3f2620ede0f7f1d63a915e56aa6b75f153ae747a35f00764542f3cd9b404964bf5599c5c635d1f2f57aa52d0d75edb71b651a0db92fa2132c2b8d7188bcd447375fe15fefd6f26af67fefb5779000000a310adbe2fef26227a3fb6fff631970ea3636c8bc7a026b684dd499d2c59b5a35ae898ac130000007b222e2bba567cd7bc16e145383e44216138853a00b2abe41994c5f0a1e4cb18136da8810329ca4d2e55a651c488971440203fb6ac050928f6887b2874bd3d19c3d04cbff4421126ea45e98fdacdd5a4b8acc083d498d25a54475a2041621720c33fdacdf288b3f65334eac6a50a8c5c72637a61bf852fd4d672c1a7000001a50000007f05b885ac5ba27d92da2a796239906dfac70c333ce690f136eba573e96167e7e1d7e93c1200000057a97c34bcc52515fdbaee2253fb223c2c78c59cf5e7b94c1ef43282cda92f1d622a46641c0a6f9202a83c005134ccb786deeb94738d03ab85f65b6af1d8f168efd69b9d87fd44d3747c8901c3d62bbba705b969b465e84a0000011e1b20d305cc82e86e0ae67ca3e24fe9d233ea78fb6421c9b25443d23a16824397737aa41d000000f6dfa1f525f89e9474603cebe0efadcbea055267cd4d7d9b747440c52852dd3735c0a40a32005df45ae59b4d78a7b2b32133eb0fbf1d43f473a0fe17d0541b07659bbf846293b9a4d927c565fa60e4e6c2cc7501004431f9dbdb2976d4bd53b6c78646a62e7c8c41b83b9872a3d75e865c2f9378b1d0ec06cd97bec93506ef9f16c84d5c0581535ae50dca7805c84cef0432e0be8dcea13052638940e1cba3003b259b88cdf30d56af9aa1cbf54923f95cfbe0c78ba1bcafecfef4ba1098406e08e9dd5bc2e21abd51fcb74ee218b066138610dacb3529bf9ca2adf2de82492bf6ce3c7c15e46b6655a758ea28792634fff885409b6e46000000d7000000531489f3af471f3343e88dda61f4eb9c6703360c4a1ceb624b3115e0b613e6f872e2055d7b0000002ba94c6ec7b2a995253655081c83d93bbcc7082b853d3a6f456d8bb63d1f6ad180c9a5bc00fd90cc58f5d0690000007c14c0803a4db1d4ffffb25f40be3db6a8a25e968ac9ab5729b248943402f0ff22c59fc4b40000005424b7d5c5c2e1af251873c45b1be9717509a5b2b16900c0efc6206ae40b93aa02cdcf4a7b4c9e423c0c13200a0d2aa99f5d4347da788b72a3e1db22e9e1df70ab5a2521fda3ec30d786cc58068664a662671ff282000000d80000003019fe86b535d5ba957495140f5900d94cd291d555848a751badb45364d111d64a3fc34e54000000084f90273f585dab55000000a011135a580a1823f1ba378be18cdbf681344e88a61151bdaad4054bc5de11c3feb0278ab400000078ebf554a8edd1cbff36798fc84380dbae74eb5084e858a5a6eda1ff8c7665b3a8e03ae2b7ad1d20c10e381f0df79b73e6f44dc343567442042e2ab83f7531c318d6f08247c5e8b70eeedf0cb5154dd80c821b78a7708b697405338214352125635674153c8a98bf0827d9bef2b0beb6a57053e64ead16dae5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b009ce0736a33b46462c1e6c5572632c1d58b815b4a26d81226aea5beccf7afb9c689faad8a427e95f1525dd3a5e0155292280071669404455802701045604ef6279935d8f7e3a7875ffff0d614e31ce9a64d948bb2653179b48f184d3bbcdfbeacee602cd33b4b28c9e6d102919af8ba90a876fc29ea228f6159a73d2ac27fa2b4fcf6db352025268129aacdfc305be5f0e02d1d2cf2d36b0701ce988068f79f669e7c6b517973208b00c6f2721ecddc7000000b02a0c0624a34d31f085f632fdfff903ec0346f4217f8a304e47bb68937e6a358f953fba170a4f091cf8234aa92f46f732e064c5716d07c1393eb712475b1290a8be24dc7947a2e2bd47cdb1f133bf359ec1f7e4f0b534f7466cdb00a2a95e1b2bd7a498b4663bf929e3c5732bc66cfa882051b9421b1631b83fe8b8d830cb9c48945278a556fb9b98f8ffe107159d1b951f29ebe9e7e908f387c667558e50528c779a1918c7e4777f25b33d5166b9eb0b000000b01e5c61c1bfbd269afc6813338978d9d0ce106a81c15a921e340ca36c05c6e72a211db4915aebd45ca739bad3a21b36d871e117092d48e417258501ff384396f986a1569cb7047fa227486096ee006dd30fcdf6592b67e87e7a06bd26857771dc1fecb23519d42c21bc354ce923c28f0f2c51513a9c512c33d2301dc8d2269d51f5fbb6f4eabfd43d31a18b2a8d198d081f72cbc9fe329e55b688a599b976a631b6b9d013cb7559aa42efeea7a309499d0000021c000000b02d9f446895f9b372c9f12211fc98efcc37726347d3e2a6fb5872c7a23d51b90ccda244ba59f18e2a35a31cd3fd705cf168fd113be4736bccdf1d2783dae6338d4ef62de3c691ab9199360418caff1776f1aa2f244cdb8584ca9330a79251338b471bed998f8b3ff3b28d2f397aebdf8c0a47c75f730c27b3dc00a3c203037eba686fa13b4b9467a1e2c3e9c1bd7a3d05216dcda5256a7aba62fe39bd3bacf95415bc03f4788f5b1fd648391760a4f6f6000000b00f3f988f926fd552f2c4bc1cbdf9c2dca5da8e1c75a73592581887e6fa12cd2b16ce403287b5e86d876229596a3b33e1e6670ff8ec51284c049c5afd4549f9086125cfc0cad7f07ff4b0e3d82c18885e9df5a5fd29d06709fce25a7cb5f7948740689462d8ab0429965d870ce6e8aeb0284ef68db45c5f273857d62b3726d6d5c4965e51b383c092f46d18fce543bc88246bd8c6596bb60286ea36d202326bc64ab9c4fe0abf9624b1a254da5f3f248f000000b0277d1ef895778634227e379aab14298410708ef1c946c0a2e08a722a78fd9e89127a783c63dcb0cf0ff9c032840227768a2d84af456b091506f11598a1d4cdc058e890a5c1113ed5e4776e9f76326a9ec91bb00a0617cd066b7798fe3ee74a188b1ba2f396aa275b06c8c5fcb8a437610bff96db6b742d1b43c79f1a8d25d77352e54f055814266ac81b3faece62269a1a34b8c608e8db3eb2bc4586f3a4d221d52e620eb2648d4128ec633fa213870e0000021c000000b012f31bab459b66891b06bdf43f3f3b2cb67f59405cf117403aca8740f66b3a1ecc7fa1b7b5773f8168574e5e7ba4aaa07ffc44327e79f3ab8de296b449eb265e96215fec5c996f5d79209827444fa6e688444ac7ffdf26ae5db57ba5afb20eab9e8e415f57e24e415f256168f1b8bcd8227935e56fd746893ebda6af39e9e1a2956409c62752a8dbd490839fd4955d182e8b121c4411c21d2f79c2a7a29cf82d22f776e46cb73351313c57a6a063cc36000000b017a6090b620a3fe2884119b6617949477a35771fc290b6e038768065f2c56b72cf19f142aa85623b8677ba38fbb944ffd8509e58f31cb1f0d5d66d98a5f1d15aa76db0a699e5d65516e778e8caa93df2ddbab612fff8c57008be8a0eb4a556483e919c8eec439b03030ecd12445c7251268f4859993ecb0290a449ae54b4616941e1bcd9a6690c778d952cf985fd31290d45ab2eb61c4fa5e075c4dc15bc934f727feb7bba0434fb4e5972e1b20bb14c000000b025fc2f03b8f9b2cf4b3447862ba233018cf1e9305286873d3fe7ba0bf82c9590c6a957d308e79c0f67f074fffb14b5a969ab7510a3bbd2bba62976ee567b459eee45810a407b52bcee526a92ba5eb8b8febe775ee46ac6d26c59dfeafb6f8eb9a9aac320cd6629ef79d07194a6289c8a2a0125f7c4525d4b91955997ab6cdd16900f8bed55217dcaf02eb85ebe79b899154b89e50602e80634ad46749367df944fef020f6ad5f58d99f15c2c3d1a207a0000021c000000b009f081552076a07dd95b4085eaf202611b5a4292c008eb203c5736583c9a820aac2fe9b2ba4a992ffc98a16f81b78c21dc0f2001e74754c5b4f98ccee84d40dc649365cfeffff14b1f9a3c15c817cd26807b21ee86421e7539adb8c91351e71af7e11b454bbf331a2323516d3e11a03310f492e878637ab4ec589a75161b2420b9a819a44b0ff0a889523d1810d4a2df0a2d79f12943293d238b1678a16f0e78cad59049fee60611d1d63f8bcbc58647000000b012308581c5e96d0fef892a642f757265fd56db634abe5e196bf7ca4c7a2f712dcfbb048924d52fdfc2520b7b96c3b26cf37488b4685f20051765329d60a63c224320516238f778494dc900bee10f965bbd0c4e93023c12264af459d56c3d4ccfdbddc8084d7280da42a05569176d6ae10245e740ad63d61c0f30658f750c855df9b0082ed4c17b322a770a4f6eccd1de06ec5ef67b3076aa56ea442184806a34459a8bc2be0504e84d9fb0208c37da8d000000b00c2d97aff1ea4706a95c1594fda2672728e56aa10a4d4239e2a136f8e9690bcb2fe412868e4041de303042dfbe8502123a9f617b8de1ce384fbc88e9d069db91c38c78ae17805d1506a3c79136c5fda599d862f69fb92b8a87245fdf5578f91930762b68c8fd35ace5b7105357d689a613909be07810818e27ef34451fdad499fb86864679bb925b37bde376ade66d3b176045792ad082261c3113319a1e2124770b51379610e756c382d3c95f7db3710000021c000000b013f8b85894b6f325c24462669db38ac4349cdde52ca65eefeeea67f67b17d6386264e1a908e24f964094a1aa11c433af10a505f6618ff2128c06e49a60e248988b0cb2e2db9d6ba12411a2ee17ba133edad347377f91ebcd6fb237b00bc77f8135a2443c700fc05f39b2d57515f311e30089f046395c384c89ea0444bd60a45e00670fbede8ca64428b8da3aeaae093c182830a9ecb595556646a39237fbf601ec8e95a16cac81f9a57c21780949b63e000000b01fee83f9dbd5dfada59b2be89a5eaf231cfff662fd03437bac5de3ec39858c1fa4e9f06421baf58aac072b4e402647200b4ae9d00bf4e63d8e7268fef4d468443f38bcc2380dd9e9db8a7f038f2c4582f434ac04ffa05395eab78fbc5c71b9d492d5ba1d3257d211064ff0e902d7f28c1c96d4869e20f25155b6ad0f107c47df9a4eca7f41a3c1c9b4ec970832eb0db2012da753465918ac5e9ea58f275a1ff2fc598c4a23c6b1b3532e7ff0c1d62bf5000000b004ded3a838713f0e8e409cb36a1ed212d78af940371698a1d549516331bdb223d7784a76f635b2ed8f612a9d218d06ff48f147aace89a3cffc09de795f9a94e181af3603cee4b840b52fe47e42786a1633a9ba0268a34812956c5aac05c3e7a173e48b7b8d307613f34f9b61aafea6f300e306c7c1a965e0b5da5609123c729dabd605c3f7a428538f28ab6c13bd2f740b973b80fa25df98af8ef7dd9281474ea5cbedda9fce0dd048d55fb3fc8a125c0000021c000000b02a382e3faa75354e0990f53735303fff0fff8d473264bd49611dba22cb9f6e5602d1a6e2bbdaf21290f7b88823fb0060adf6adad04a270f234847574f478fdc2f7b343dc92bc88db805de668eee4f0e1f15124c73873438bada196f3aa038cf9811342597f94ed6cb383e33b7dc5727019cafae8a42619a55781422fd575dbe57871e3a466d6c7607ca04ccb94a42ddf1babc1188881bca24f9c6d7a0ca9e6316a265513662380aa33cb1f9014754cf2000000b019d20bc59862b5d3f8345ac39cbf62a35409f0f3eabf22475bd6d0c9439621b51e91a4242153d0d559e0faf67b779c098198059eedfa2d64e9ec1869fafd558281fcdf00c54cfe34b27f6c8acc7eb4e8a8e59f352f7243e7b9c60d078c1f87c063bf05d0b87972702d2566307c7d0617029ea0c8949cedb67d68ecc10c6c1b56c8746c93b588a5a6780a36996e580d1b16de2e1d69765ccaadc6992c03a93f233c90697850f598260d7a4f176ffac541000000b01094282f79ae2e7ed88164b272f6150530a4a308b68e53ee8ef9f4d9f3e04a243acb97fc3d3a159884c710b4948e24f091e46322420b196d692f74c4473b7c311dc4fe84a4377cb31f6ecf520526858f7f0051120b733e25bf99338f7eb20def5e913d5f25499a2d47e4970a3b8ec90a0b0c36e4c41858956adb6745eaac52748c1f75eea54a5364b2fbbd1073f2e7c316b0e6b604c1d9af649daec739b6c6d76166385e77e8a120e3b9f8c12f559e610000021c000000b01f4307cd36186985f43cd0add0241fe46c9d93562f5fcf54f97f79fa0a02d7ed819bd5c155a0404df3da5f86cecdf4e59d1cdf2558779242f1c19e258d59ad1a9a1e365faca7b04589288af306af4df3a6c09330a4e2838dfbf044450703638c22f9902345f41422e112a7911b818ce122e1017f4321443a101e92136e726db28b4db8e75565c81de66348fe6d8298d723531f07fb1abf31d6f4dcb013b02304dda48de9b0061699dee0df3a8f074001000000b012eac6f80b87b5c5f3724381e73b80f874e72177d420cfead3d33adac08727b4e9239ffb80a823ed80edebe9e157cd374f0d015f847876f5eaa0c6466992dff97321cbcf6aad774b821d2b0258bdee72e341a9338c475aeb91e9fa3f67df9540b836168b33b091627d640df206e5f41c230c00fe6d3ac862f4c9e623b54d686d419da9f779e57fd103a8b372f51a661611af81d38a2916f9f1bec54fe6d8ca0adf8462dc6cba8f84f24bf369efa34d64000000b01aeac4b8d4ba876103631e646c9873d6d182948b3b31167e1bc268c8ee74737d76071605b740148022b3820d90b2a8efbe5274a030f7b41ca69dcbfefd5a828e5f35c68a65e151d0a8e07accbc3547daed22af761c255fa02dc603981feeb2e6213552e9e228b0b1705f7dc9a3e9c122032fc1bc349f544ee98e6d139ffdfb70d2c66d7b0750382a78ff88a6c60a40e50e2d332582a755cf21d3dda4addd490bdc8bcfa7308ce85b48e5c5b7ad69e76c0000021c000000b02bf963394f85c28bdd76836479c99f92c27ac155cf3ab4c248770cc360efd98d08f86b72bc86c81871001d26668a951949be44fa8544f7b10fd055f8edbbd7a8c598315c44e2b96d899fdb1641d93e0416ca01bb4b8b7697b764e1d35c852bf965490649259028823e58634d343fc65e2083530aacaab61992e02584e02b0077eb023c1cbce42a77ca97a2129321d94d11b7bea230e33b150e6690e5ef1706de5a9989a1190a81d11aad30375b85ed35000000b0177ada0c8b190beba1e0bc62a031cd0107feb2e34ccfc49388e76220f596bd27d2b29f9a22c2107844c4e16d7ab166b7dab9c99884fef0a0cd6ed5989e9081c134b001592d25723bc6d9e81fe7839d17481e163609aa469097e02f231932b0a422f26fc793741df941d2f1bddc3242b81c416c273f29e9a4acbbb81ca024f538bda509b4111a548e911ed71f7ded8e1102895a9d6399e66c2bdedb72f75af9c8cf901cadd5dee6374c6d225580253763000000b019366afdfd0ce9517227581e88b9cd8a7bc88859b12ed78882caf7ab2fc3d8af4931a93cae3ccaead97afc0a240c3c682d1cca17b57ece889d4bc6fa79c27620dcacfa58c9fd9d7f94a93c6e08b063e19554aed21740f1c19c042de06c93b7aec05283fcfd97c63a40ce1ec07755351f16c54c4ef11b8871c71d502da16ff1eaef0d61c44266796110a16aa428d8e1402ea3da379293b65e7a1d348d3d94644ee7b2c6bae584a987997d9a4b53a5326400000f8500000128000000551f6db9f65c171250e8f690a8841021c83c9702072f4c33454adb5fb162b9b52dfb1e1f6a0000002d1ee46089993771b94c6bb4a885917c219c6e2af43783cff4e748f82fc10f17afc4c1c3a4460c93c99010daf440000000cb2b13d1f7c1825c8ba1cd2efd275d7fd38c85744e39149f9393805837385b27b2db56fbb7000000a3cd0c725b70b25cf2d56b807dcf1846fdd1ce1debff8a83b57798ef1ee740c75702061eedb22311f0bce3163a0b562a40eeb1e596791b5181fcf2f97aa24d88672170df80a7293348701944dfff08d30707c71819aa6bffbd74723494801fbb16e2c3648f844f9a7ca67dc76fb0da7dbed94ca0efaffec874f679299ff94449f5be8dbf68a1688b06e603d88c5f2f68d712ccd8fb672b124713d11505570da469241a4c0000019d0000011320d4c50bb418b15ca96ceb236a9ed4de0ca6c9aa6e224cc7a91bac47d1d01a3ae4d7ea53000000eb5860631dd8b58348e9e762cfb0ab036db758b16f9e5d21ce10c9d0c0c70bd8fdcd7fd1158c748c478dc265a1850a028ce87709ec79d7f4e106f2c09555e80058975b98ac22b4c9c796c78ab11443989ffef57bad64137bec9448b4975cac6cbc415d5cb10774825e28f2388de1db98274b3516819cebd5b5b6a5be68c66b6c0595d3786a1be569778ec6af9c49abfb5d6f10f1871a56a4e80701cb0595a4805e388640d2076c31c2bacc81d4ea122707527ae4074b0d8f5c7fd3f6cc647cd26026a4ef987fcab5303aa1c6d0370861c5ed25877e4e48c50c6134fb76a288693771d638ef4d5ae20f8c6b60000000823017986e8bd6a9f012e6f85a54f5dcf1fb3a22fcc84b38acd741de89b72580d1df9990cb0000005a6fcc9f27dbee1e80be176f6352cda8c4923a86bfeb03f9e95ef93f528bb9aa914691d229906685507a6aa49849dd892ed7c7cf73d3207d24021c5c30f573b7414c6124f7ea6b28c17ee9f795dda3119d924db92ca16599d98ddf000001a4000000ca0ca88f409dc142b9cc53db5c65ee5018a6d4484c4de55dd9c04bf5ab7e383c4e70eb4aa9000000a2a68cd949a2a30e78c003856315fa5ab9876888cbe8c38d1c17462d8c957bda71b488767b3dc179def494e57aa26f28f0a4d65d1e89800f076f481b0e22e604b1e27749e9bda0011740918138722b0522766d91142cf1543b4b1d0bbaa433e57acf70c825f36d97f3c374ef5b85f2f2ff2df65ce6ace9b12050e098fa33d01074458384c9bdee3e60802935c86c54a47b4f44f3bd3118c6c5b7af9a431a79a18ad931000000d2109269a2ae1b5277311a8b96524333813e933ed341521c84de360687b41c231994e4693a000000aaea3cf03182aa20fe230bd2d55743b46b7ee5aadc6131f56c798345018da7d084565f1188cd9bf0d19e9ea67537e684963b334e0107cc4dc20323eb29bde7d3e04dab09ad27720d2caf0a52307e63e3e8f790ac09a2b5b65aa9c7d46af14a4af5769603f121cddfa2099c8e031e46856ee8957f70d5d3ab6dbf22bcf05c67d691cdd3abc4ccc415dbffee289b96b87653bc32df7c395a52c46d7105f6c1e546f39524f4a746056d7f8905000001450000008208ad37d138be898db5ef75ee8352c5f6ee7c71a8577580c2f6dcb971ed401505aabcd4300000005a954f503ffb7ba3ba3654c152aa7bf4835f78b03e2d17f442295833af2e26880c612867763564e44862c39298bd899981a47baa28adba18533e5bdad7289544e576226423a3596c241522b02cebf495aeabe9baa94cc8f7ab0357000000bb22eef01398b277bc47571f92ac0cb1943bcb6af18edcb38ec5b3f5e6f5caf0cfa2ca4c2b0000009368c96ccbcbe8ff5aed58a50a66e33ebc7a17fbbdf31f5fed48ca64f7b2b83f0c3a100ac1ceeeb4501ed33f87680e84d1ea416d5c890a66d3ba9d2dd2dcb306871fcc3e4e8cf51cc0ab148eceeef371fa85351b78904ff69c13c67bd1d77aa799dfe6765f77c5c8676ce6df769b128456864272d26bd7b2aa0dbf8aaa9617d30901716a7080950477c0f6a2468db15b5b14ee9100000189000000b4033783a124a82fd5a00873b81610c24ce2e74938cf5be86c2f727e96347225a7af5e06fb0000008cea7616b70382e7b91d004788645bccf0e75a404c705f5c1b361ccd296228786679fb9f556d9b31eaec516dbbb7ec725d85b7f1ca7444b59d1141237a53d3424f3511828dd4653a73392ed47d8720b9eaa8acf407d675059a09628ce55eba574b21daf1f356adf69b919b9c70083440a63822a3ddf74b32fc2010d37169d1a61672d4a3024ffe13d188423821000000cd08d2ad638392c811a4f0e43ab0d2f10c5ff4611da8c3dc3fadc2247ef6f8ecd973ffef26000000a5d3d28680089bb077c20283f2a04f7be1d3e9d34e04d4ca76b0903754b795977e46e441159cfe2fc5e816dcec5619653855e519e943fe2cdb4c70836ff5f7aa019a3447273640ca893b5764b657b17de52fb9cab88371c5c26e7a0894cbb6202f13af63fdae58f50b42ea7f6156ac68c96a62af465508b9eda16116a5d1df4e64b0ad5f5f74323ac64329906232c1226756fba15a0512b621d48104ef00a9b8609861465a640000015d0000007d0806d81bc873238993590d4f575cb41746dc614456d5b3b734f07f4935802599d94bdd7c00000055009faf44cc2f0eb83f6cdc635b16b1b1a8720ff8520083221c0a42141238bdca8c66782a35b3f8a07ff7e1e630572a643df654527e5e3e0d850e0bd95fb2be5df67e9f8d98aa92f20673969a5ffddedabcd8c0d34c000000d83020b5338b9626643a4e9789f95dc8f73a7567c96c317121ee3939ca2a621e75a8fa6a73000000b020f17cf4ed28658879b0ac99eec28e89d02f25af40732f24c19d497a2950beb25400c81d23f506e12cc0909d4b477ee4bed70e5283cbe3655e8a781fec18d46b06cb3b12e85a8b428756803898ef81cefe042bff57517b6f3a16b484578be851c919e3f76e00e750c926ba574b7b5ebd1d49cf295b1334b9e20297dffed97771e102f53fb06dab97b5f09eed6450e3d292a412bcaa9b9c7702e5cace743d2b2c6577b08a2c282f874e604b5f63f7e557000001b4000000f90715d7b2c6a4ee955382e109df3b6933c00a811dc35f89ef7c05c30131e526ed74f0b238000000d1c681d7bd1ac50f6e8e401952ebce5e20324e41a77d3df607dcbd80eb540a3ffcb8b7957a3c2af4eaf7b2970742863eece0d42753e41f3bfbcd5c83461c49be5f09c087fa9c849360d9bd91dc3c23e5f62664b2a9410f2d23b9fafc83a7c6f21bf0e8feda81bf59416172abe70a6ba920fa2cbd1a3c055b93836dad8dbe21f61eaa963c77b7d53355035a7887500795e0b53b93e9ae83244d2a6a9a0f9af26ffbcee90464e58fdb7d22a3ba696be8b9ff315b343222864a2082d4d4c1363172410682368d4f9ae2ccf580d770b7c206c6d2000000b322b76bde23cc57bffe5881022835874bbd8d5cf2d53f667109521ccd66affc063a8e25740000008bffb7a050889e7f91d9cc5528d649d8edf28fbfe2632bff093c8a829e0eb059e10117118f9a1d4d031d614e27acd3fcf56dc194849768f09247dd6860c0ced2fd307332b98ff5a50d44e331e3cb6e2af71590b1567626dfb3130b90a31720289a909a1610e21c46100a58d75707611abe0779e0edff7d75ed9c08f555306e9068751540ffa94ac5c7985f580000015b000000c72255d9927e4f125726e4f952d55cb435b963fb1d119275dab2e22cf5e660f99a2b771d580000009f8cf667d4d8aba57b0da33eb040653fac7bfe17f10d572e61ef29084a82ac3308044a8bd03ed0e6bb3b9bb2e331a6af57e1b24668e206ce0b5d6fd73714620b8fe3a6d36e9074b437b2460bfeadf58f839bac8b1842f18985aa610bdddba767e87436466a0174e631b8bd97c6ad1bb5fca20e1537d7d65bd19e89a19fe1c133d8b3b46e49dbdf231f057593e254b3685729db851c4f37e8aaa0899c6ed0808e0000008c1e3ae982ce832a3c9b8bd36351b8eed474e7de767ef8f0867320af56bbace737867d998800000064b097d309a4ca1cb540a338216fe8880e7dc5d383ba604485bc73e0881fa16286c5397ff57a197d182ff96d25338a05626e0b9551c14d9381061209114462c43be74748f62d8834177059e28b1d4ae1d42a774d495a4ccac471a81b29d6016e4af3995589000001d80000010627d89d8e845c7ee10b0ea652a646acf5152c44c6edc275d6089827d65f04575ae102786f000000def78cf1d18a57ef66bd0a7deb405eb1ab5a5cc856e45623831558ac5b85a06fb3026d9090527bca9704909109757a068d6675dc9e55defbceb788eb799a5e8fa0e265d597e7f023c71bb5773a1683cd5c45040571469c3da055a48c31ae7cc16142963729d48627e4a52fe045da51b87761a2aaa1b5904744b0eb9d1b353c84fbed0921446787b0e6bff9392312cb02c626d160774adf115f42b6fa5d43bf1016885b5d50df8aff764e7950b879d35da316610b51567937b3c2063f04374038702f6189f94d2ac0c7f2507dd7139559b93921c8d79c8b25d95dcc65a08720000000ca25cf90dd9bdd31fed39ded91f03f5cdb9573676c4f5634de67362e072b31a2fde3d7bae9000000a2ce86213c3fc16a9287443ef4ab3e39df9e11ee7aa09d51d32b54184d491ecddc3c478731113fb1aec4749617803ee30c3cfad2f41cc6cf01225976db02678c21ef8911c73dbc37b6299ee63764381b5fd3ad7633911a72d28d165109a1a92a61e158e335bbbc975ad6b13bae3306d619a5660d074c121e0005e7b1a58ed13a5f4fd3638ac59fbaeba82234fcf57a65fe83ac8b2da270a1b047ea76dad4272c66adc9000000dd000000511a3da94aac371e7ad864eff5ef21ffba8e6f78ad8db8355fafee419ad8b098b16b4cbad3000000295c8ab05cecab5263a3af91df736429d46dd028b345c7d58e148360230c3ac4cd535c1e20cecd17ef9600000084302bcc304d6b9b7c045faca1f9813ae8623d890e3df5884b39fb05c3c21a7e3de2ef1b730000005cc0a6a9df4eb106f676a91d904247f93f513e13eee7a9a9e4404452b3aae0207fa22581444099f864db350fde8dffceb22f06b9a4736fe14c0b598fd63546ddb37b849a13d3e51b7d593ba460040fe67087ff78e3dd971599fb1397eb00000101000000912801055ccba867bdb0e274012464db6a8fcac777d3b92441d37eaf0981541ec8b53b305c00000069602ae73d1097718f78f455b49672d0613133e89994e5d4b9b173ca1d688268f9a90840d780c84f96e1c2e193186a78cafec29f8d45942d8f9a63935e9630bb503831fd6ef5403fb30b8550df05d920653f42a7d0c3edb296d7a03fe105e30c2c818f03afc4de53c45d0000006802973e750e273d9b4c4e06007cb0fa4178c5c184f1517c29ed4381314bbf363a6231a32500000040eb5232c8240c43ca427c298fff3a43bdfdbef14e2822a3edaf952bb846eb85454490834996d73fe685e54b6ca8bbcc6884e57c0a03de447fd04f86328247952500380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b029da61367a5736f47c3c75f46262e0c04da8f231b8afc579b16eff96c52d47e2cead7613bdb50605fe629974896fd2d26267a139cd3544eb27d0879fdea5d16548f847d9781c6557eb90b64124f6f909b91195c53e23b4132d243483ad3e9d0f6ae246cf199dea3c88cb11a0f31c017323b0ac536551862d9580a8a6d7b8efad435ecdb782f717f4b0dc7642236af8101a35bcb16d7391fe7662b4b6a210c8a8ab7ccc4a98f6f5e755bcbdea42cdda94000000b024f0d809e8ae3b6e5df9605b509ac55ef0c363eb6d34c4d21ada2098776cd01a9b41921cd9301a40785564662908aefbbdcd841ad903f725e0d6fd0827806a97e7d80daa0a13d71127d16f693f450085438339b5fc307511a7fe971f57edcc2befb8b9698e0027310eb3f094864bdb1c087c81a1b1aa34c46422cf3a6ec528bdb02f59b0814e19506e7397137262734d1f76f4ec27f3158e15603ef6ace05bd89aa4d12fcd5e12b087660d116220b7a1000000b001efb89566014842b9d81da2fcf56ea5f6f8b4a35bfbb3ea6cb80bf0376b0adf98a95088dca937b83ccf19fa080d45c9a3d1cdc4fc889125044f5ce33cc55b5a4d2c03b93c1bdd06bc0b086af01e60cee62ce831e940af4be4136bfb31a68e5216482c65bd0ab7bf5ca7b48838541f261a04428dfa8dfdeeaab52fe6d291cc7e025703082449032cb828fce23543a5f81a8b1dd4aacf8814c8a9ae0b507a55e37d70c8b0372e3b10b768fa9fbde375480000021c000000b0144e3f9f51f29cde4590548382e364d4200bf58f44bc1bd04b4bb3732e274a5832005a6e6a779780bea43aaef1af71d8886ea589f97de1b6af24c6e505688ae2325ab2bc195fc5a7b6b4ecf92522253db0c101f4cbf99e1b60aa59c5818f0e8e3fb7a3f67738c833f4b5694946cf9f67209dc037850fa8162fd0821fad82d251bb8961100847db23c9659155180e42cd0323c2f8960ecf6a472107a4fd962f9fc354ff7879126dd13ca82215e800541d000000b014c6512c8cfc0aa6e85f084f0dba1b1f5ac6b0cd812fbc25f73fdbc3efde66e005b9d5b70f8bba081363d190047d50d0cd1532e2a271673c202a5128523d21fcc833f8323220762a5629595160f7b4db81e33d4019cafc24f5899ae2e50c6c6991c2b5bb5f9c6ba67b8a1a71ed58033f2d04051e5cb15b516a97f3f8f68b0b5d96659729d3635da6e2973e60678e200708505cc0c09cb2634484e35fb8ae4170ec033c48a4013f08c0514dbfa48870c3000000b007db6eb75c0e688b86671eeb2974174fd3724352ac0c5f2552c72971b541bcd62590737acd56864958b43728206247c224aec1b773adbdee7e75ccbd314f65667ab732b263356c3c554cec3dafd1c6b3bf9dd75a8b55dbec50da553e16d58a178fbfa3b25aa82ebf9d2c17d9f9fb5b0118ca3cd021f3c29fc1576268c2f55a3dd15dddc5d0eccd3268da18c95101699b04dd878b42b227ea0e9dced0bee4f986c509f5be1fb5303ea732692bbd08a71c0000021c000000b0234054ad119ae088da2ee870ec8fa416402395feea2fe5ae53aa353c8655ed0d1e95133aa41d92ed05482c46c3d24513f9347bd43d9cb63f509d0e3211209c6fb80776a9e665b480ac13361296ceb6c832fe3fb5504ad45e4eb938073908cea01db37033674fdb27b0f4d60ce1d6ae1915054265685468195daaf38eeab445472686c1504ea7f1579f48e64f37ef1339300682d042e339c955e1045855f480f35423aa5e9bf6f325199f22eb027a7740000000b0269b87be2c41a727be5a6b95199935450a23d51c811211a2a62ca8aec8e077f654ed369a33f9e69427c0726f0c239b91c102131b3b920a5c5fe446604e289f332ce6b3ca277e7ac2e1ae5e9e022d73c4a3b8e841c3fc851ae2c943ffaa959619f048c4f2b8bc3e4b267b35d2955add231c50272dcc8973cdd8ca41ed1beab019bbc67dad04223779702d5d14183296220f2eafa12d3dcb83a471d37d127086315ade911d30a8795714a59b9132606a99000000b01ffe6ea8d935be29e72ad3268a23a1ac5149599356705a4113d665816803816ffcf929a17c54937ee929e3d29877ac4a6700b7189e8b3939b5fef94095d3880cad34a03ac39e74f621a6e55b2450ac177505fa02515a87fe6aa291de00379cde088c57e1facabc3d32c246b10480fc891e8f2a7661a7908351b981ee7d19f06a6f67ebff86801049ba83f9bae6dcd7e42b61c4ec782c3e8a44490640710fea21d8d45bf62a1decc56fe64390510598f80000021c000000b027e84e499b709fe5027ff3e71524b49bc19344599eb9ed1365c8e7f57ea3c38a7aa2760f3e279b463422fbeb2b7e4a7c5eb46afbe3987daa14272aa41bea558128d08d4c7f34e9a93bec834987a71e99a19c9de6df6ee78f7902e21e837caec43753f7d8d529a4861d67aaf0ffb2fa641a2e800ef8f7c698d370c87a984b5f69993ab7b5568224751434d98f0d2897cb2798decf0bfb5d5589c6623a2fa7dade02c0b9abe1a7f28f7cd6320dc2d1060c000000b01ad1bac75e95128a08cb5d3e7e1fe0d6c08bc01e602aaaba1d28cbc5212cb170fc07d0313e7f4bbde3356eaac87311046b3995bafdc67c25f6c7c928eb64dedda42e743dc29391da97ad8701b303060d9ac8fa49da81203dc7004e9c2e8510815c1a4838dade1a42ea61fcc05fb5b1ae2df31c6fe0f16278fc009ca914141989074774dbe8d5b75432b04c8029db69091fc1ac09e483c79c25c535a9b61ca5ded7906a8878aa749db60c0a8b1249fd3b000000b0136f209f5564f4e283d45564e32e5158a874ae97f3173246b5b2d39df2700b24c41466a18a5a039c9ef5336863a76f9b7f2f6038c88b73b633583d721eb427d61ed2641d3cb462cc44376f135b4b45dc7827a57597ef6c7e8864b15642009ca45f2f58af54504f1570e841980965461a2809e65d34915b66a4ba9743c3a24d50f77190508a70be71adb1221af56de37f0cb1efbf6d6bcaed18e9747da6a31bea2580ebb985a12c9e12fa97951f2886850000021c000000b00ed8dabfa26dd1fd4dba20c6793ae42d63d43b3b5f896ddddff9c93f3c405145cdb9fa4053696363c0f06e1be62f9799bf66a73019c4add128c5ecf0471eb99371a5d4c44001e2d2a112e11361cf61d32d44ca98407256a9dedc460963e7af65148a91d68c0ae3524fd4720dbb02f018163d22be92fd81366661f949289bb5ac2ec033b445bc62454b3ffbfdf94d80282593585b9d30f6c2c8029c366ae34ddefa65ac3ac1824f0929d9cbf41495a4e4000000b02befb78102822ff1a0338a290e0c563cd17a63fcc627d470c5e718828e7e138e591fe547fa0caa16fdca47f913c9c2be0a5a74dbeab87ec6f7c91e0273a0059070c7af5f497a220428fe8f159c5677f270b15062a6166c8631c489b6d7b47555204e7e5a913380473e4ed37a890e45d12c2d955f20bd7c08f0ea060c47f77d212052445d01dd45477d0411bfe34b4a1c0be48dc56b673404a1d9dc2bcbbfe434f69993c2d759cb9c41276322b388b2a0000000b0108c2ca7f3f632447879c1d87d1230f2ca1453768c90b7ca3720c27cce8ce430a212c869a9d5c6e86583bdecabb6ff9e925edd6ba06c0b283249b889981408b7a895d73929ade4c1323f6b37ebcef3a38edf3eabe563ca9410ab7b8c639b42397d2c5fb9482badfec1e1437a8fc1e16c0b271143b4683d15acea6d945590b256d22b45dd828e3b291af8281afae7ae152c7d20decd42594f26fc7efc8105d7b25c7b997b44bc687ef9a5434fb8b5654c0000021c000000b01a24a367710bf00cb8d352696595b1d44816609da1f606e2bbe6fbce1e8b5ce96ad9277acd6fb202c11052ddfc70d4bb5412f2cb8df61908b2bbd3e6128b2c5b861c7b616d8db8dde2d2b6e490f5c6ef65673e432eac454a8fc1819c9888c5774ce087772cafae1ef607dd325be1d10f0943f20bceecb60b686a76ade2ea5e97301688914def54769d48d9ae12988042036018835e63eb95918be4bbae0f210333cb0fe78be044ee8797f42494ff3809000000b02d964c915d78bca220aa47ccf5f040ac6903f315a405b7595770d1387ee44bddd211ed03b8fb5345db5de53a35d1c51f6feccad6e38acd2eb5902667f9b70679c7ef049bd864076c022eb6033fa555156373bc9e5199ba9fee4b9af9e079aa35f417c0787fe62dfe3bf7f2887dd6e50f1da0a4e71137ce7dea51fae5f02888779dc6caadb1e268aec4cd3056f723d0471cab1e54d6335c15819dc67e995d2324bf6606b61c7b4d5b6656f1a3cb8319ce000000b02e61cf9ca39f00e42b0eba8ca65c56250c6ef8a7ffe8faec2e9940177c48afaecb1366e46df6cd4bab64ab049bd9f4ea5b0e0ebe9db7f3b9143d3fbea7bc4d9ed533c56d789dad4c6452ddf524c7f7313239f1acd7027afeb7a7fbc5dbe729e777e80b294460d26d6b437a1d370d4c7007f8b50665d945c491cdc63ddc9c140524a4394520e49477908b12167f248610045308cb53f122ad28f718e887e1e64be5f8462f148003f445e134e06daef7f00000021c000000b02ae5e80b86337eb23a091b1542add8799e5669cbe71347f9e5f1ca44c68db24c34eda1d7882d6222994a8d4b5df8fb78006e7099861d66b37d5af97ba2947af46a51c4fb03f6192fb5252c18dbf15d68ca0a7d19b0e7abb19ce864f240d063dc34361259aceac01eb5dcb75a7bc6888a1f65c1bf6bc63a2ec6b991fe6fa6da59b6af53ab097403c7209908c8bdf4cdce11775caf1f7f21b312111c35d7ae663589d81bd88dc04d6db5a857e350cb1d04000000b00ae3acbfd84b7ee1d0f384d52da2007422ea4b7e0dfef7bca4614c6cccfc218e2dbbeae8be85b17ba6b79481d3a2f8b598ddb9e8a2d67609f3055b1953d256db9c7c6e6fbe0008ab006c90431e9d323538d318ff296ece7fc0bd4a8b47ac3d7e55512cb2fbb6a2ae6bae8bb7b208801c2949c7c6ccd1d9411f7c824b718acca0dd4ec12a8d2c625301538b3ef2725f8d2eca717ec832936e7ac7e523c33c817125b144a823e3c38780248dca3fea0a27000000b02a6b124e55cedd05d119af78d4bbbf130863b941adfbdc16963eea39293df707c57f6eb14644c40a6990a26c59e60966d474c6a6326ee46a213f1ba47f83690ea3203bb3f994b7851364d2a4b7a26773f930c1af5f3fc8559983bfeaf26e09fe0fafe279512d429947906d634660eae3298b8001fd47c076af3b0652669fe19c83c2efd5a346de2a7eb38014f61b6a213005f306f95214a30aac397c3bcd4f0aac384c6ff9a4e29a63c72a61dcfe79b50000021c000000b027d5477e59c8df1b0e4155cbf4e1370fffc4b2ae63ee0e09d08333f7e19e21fdcd41a03fcbbf777b8d0d9035a22a71fa21e86b4f829af710032cc253b38ba341fefa2e30ea17296b9f44237629be7518f7991b06a562038db11bfa362c24c5e4471d02fcae8fe837470dad850f25b05c09a2bf6227a4ff82a29784867dc88fe4588abb5d67ae6cb7a3d44068185134ee1d4c2dddb6e48146a8d33c1d2a5368aa8337bcf4e951dc8628bfbcd9d7bb0cf3000000b0061bfc4dc70a85091dc28b43b693163a6282fbd82a9c1f872f43c6ecdd816d41ac025471f9709bf750c5693a0d7b54a043b42ae5a90b1801391694165075bab3c289af237088ac3cb7a0a37f348c25a5b924f60868da7d0c3f5e5d40793335f8a720445a7f94f6049fbfd1df97d906131260ce682f151e29f400dd14463991163cae08e3abb05012935b70659d265cd91f4661618f645bf5d3c6ef611e03666f773cb3d8e3aa192d5c147df98a82fffd000000b02174ae48b3b861f2fb074ebc8db243d247feaad1f19624e99ef326895147229d0d0ce505e960f8112ffc04418455533db251d51f9695fae93650046accb7538cd61a4539d7ce485899ffddb8cdcf298f5f9475760bc068e270dec9f33a764da795dd76ffb053d39cea28e7753bc81a042e42e35310ade8bca3ae9fa5b178ad0419c96e6614149afd07c47dbd056f9ea62fe66b60cfc160b4685a0799bddabe276ca1d92dd0ef09f12ca3634564dace280000114e00000206000001022166534198038e812b91b4c5811520d32088f7d279beb098e408897512b3d24d3f4a12c0000000da1c811e378ffedb9e3aa6e0b6acbbd723c7ce1343dbee6b41342f73bbb66ff0602e146e223065603b5f319e0e6a9647311d54060b4018632d2d6b7326e3e63a9ede39eaa209ae605dcadf1bf732a36c44a26937ec1a04a105c28fc96f83fe34b69a5f1a06ef3aaddb0bb4504acdcf6378985ef0b42330e6616f24e90a514e341f6ad59165f43d855f603710fd10611249beffb7ca28197b3ec0f495f512df67281aa012e28a889c83a57b09047a114351477b57d91c147aff266fd5a214210d823e8ff1cd93ce7ccb2fe60cb4aa4511f3642bd062c7251622fbce000000fc14db1e744b5ae7b8c0071bbefe80aa361a2e6be9eae505a0ef787308d7e7000a41372eee000000d4e4aba298bc5a8a3a08a66bedf90926b8701ec34116a66938818bf5365cd011f22463ca51c1f4ba5520bdbdd337a6dcb09b4c1087b9eea55546906c6bbdb086baa2a9cc3864a5c92705889e813c73f73370582199753da4a9af4fc84f793ab4568742158ebd37996525f42be24e5c733bd22b7ded3f8a33797d9d7002eaa23b60f252c403b911983861587116c9e081ea46d9e1cf77a5773f1576b9bfcaa7f294ff503c14f83d2f954353e3bf91c634ddcc4e90d3f817ffd060a808aae7bcb603702ea84147b60d575783c850d316352e998d7136000001860000011313cf26a3399d2a011ba5cadb8e6fabf2dc9ebe4792bfb719f443038efa9416ea95171ae0000000eb8bfd47f58d2a355c8b64de8942be75bb8caa93515e92f12e354da947f19aec9f784072bffb8804fdebac9be4f362b235a84518e9d86d9507084d7b27ca50d3751b2e252b5469a05e943515a056f26712fc2bf3f6ae68a2e3acac8ff69a4d968e8790a0f8afc991cb39a07c1e57a9e62b1e1bd025cc4ec31da8fd6fd46aae41bd29a953189811c2e6c6e5a7efa14d3a39793e572dbd7a0969d16fc059bb139faf206e0572b64edc5f6b139fe3535aadcb909400bff9eea1bb72d97601a3d6b52be0c19a16b99afd7a0e3ac08d1bd9c173aab9b186cd46128d4cf1e40b738595a6e414a2d8154beecb2fbb360000006b0bb674df96e68b1f997aa78178efe9626f875a068643ae6f24f23bfc6fd467069b0aaa3e0000004381e842040c3ac299d44fe44d75e8044ce84e712dd60a4c2027ae769e84a757158b5671595f45b29b5fe24a7174fdef3bf0ec09275bfedd5259ad4e55e78c38ceca337c0000015c0000008b1d2c267d1af4d541a6eb5fee87f6356b4d28a12d7abf9d30adf55958114ad1bd3590357600000063b02bbc92d70481b0d2bf035cdedae00e2917ce0c38a6f58aaa12b1c489a0cbaff26514a7d74e4535b3b1c708585f1b4ecbd327c3282afd775976a26e7198322e5015b156f1c8609a4e1e0dd48a11c245a7fa31dff1729c69fb00a075ebec36861b594c000000c92de9cac555a06430405822eee23e31227770b50faae9459bb8b2c41e727bd342e93397cb000000a14ccc19030133341c2e9ae532101b3d45b4ab9ad7522a85062799ac1553d20547d613c55e0811dc7c40baf58238a9fb9fc38cdbbf98428cbb8202533e5050ba6cadbfacb6015dae922be9453741ba077e3a0b5616e548104adc3eedff4b1039fc719186cbcab49b31dd815205f9379075e692726f1428e45c5cc48bff6f0179cbe884dfab39584a72b34c2addf6a836560baee31ee06c352cca4ef2eb70e030f6520000017d000000722df0c4bf69ac25b6de3e2c02bd8adedff4aa40656ee32a341da13d3730d0ca8ba38a4d150000004a333af1958d9741c61dac1675a6791cae9f2ecd2c27a9fdf8f7f37c0bdf1ab418966201ec841acd4c49d25aa25062fd215f54c66d48424dd2ca58c569c17b2cb8c5ce16149da8b36f5429000001030c2ca3efa7e07703f5ab0088e5130d008f4bce8155b03360569e3a6bc29cc63d330f17d8000000db9a2b3e23ec943cc0163a0e035a291f9f0aa31e483af8d488eb640b66afbfa3a9f6bedcfd64e461eb76f56c2c580dbaf23538970add420068d012d6b4b95b5c7f42c0d5e828ce81dadb5b2fec60f0339f9f0a67436b8de37839b26f3063306ed3b244e98ac82bccbc95b713a3a7a9a6848bad8b149dcfe69032f585973a6a9fb170580178ec792b05a1f76145159532c3a7a1b1f3dfff980e859b9ddf69d73224e739d4cc04f3e6f885aa58b52a31bf75bfb482625d4b64dd3218a3327874e5e227fa8cc7d16f66d141f045efe74c401d77a10649349447338ad18e000001a80000009629eb223cf6ed817aa8f2720e64179dbd03bee892eed1dcc2612cd26f85a3ddb3b22093670000006e73391d7f754b209b7d603fa7928f05e505a536c62aeb99290b7fff680c375b83019e7f236f1a54dd44dd0f86d0c81355ef1d69b192fd208f99920e1af3bc34651a98b7371665f95333bdcb3e7f8612e5f17ee0a8e8455b95cf13c25fd1110275e947d77fc8d2d76932aaedf310da0000010a1dd295b039a7cb6042d69d3a1bcb33eb2944a17590f8e9a7440d2e4978ba1b6a0a535f75000000e2b3175439cef42a79b23193649a1b2ac31602f327b676842b7f717f32c5ebb7dc6ab9512bf339691e6d2fb7a072e6763f89e0a9017130278100ece04cea93f694028942eff97d80dabc8bb1da9e449b879c3e70803d3bc5f8b0946d36277ebb116e731dde933a852a9aca92f58beac77b84af243ac22b4580b13912b925efd9942d3e2b90f024d3901f8c81dc0c79637ec9c21ef997bde9804e0d0f671f7f27245a1f058513cd430d6e66fda102568a69f75360afbf6bbb720e607f6e4a3414f45109b1490bcdb9e2bef92b7ac0aec216249c7a837147c0df7f10f16af4cb82315dfb00000188000000fc2bfcad9251501ea2a27349528e81d4de5db3eb5819d26f6dd997936c31870008f51b50e0000000d4b1ce1cbed91442145d210d9e04e1271822085064f0511dd0a06b65363de42d00a78b4be7372dc8cde6670e8d10bc5180149eff83095aaa2dd164d194244d476f7623d3ef9d8d5431b0958939ef9d22615bb16409197d762252b0c92e0bb5c3578b91e959837a90b76ee81195951edbc74279b63fc808f0c3c4be679de8e8cb2d66e1a16195449cf052c1cc238ed3646302855bbc4411f29f9555c35c1e24130a3154416ace5b02fa6c03753afef00408cdbe1b3c02233e71d672ee06277fcd02460fe351693f68ba9aed945d7bbef4589d08f967000000842ad0d1c689bffa958d7593cc4d48878192ea935745abbffcd4aeef89dc80e84fb48906fd0000005cdd00a166d9ca6db94b025637a2ea8102f2db04b1e7ecd1a6c35af0d3ac0e260d5e259217b766e85e65ff5fb2ba50b6d50bd7ff2be0abaa39c65149c7df1066c70d3c5c6d6e6dab5c8a872da32b188a84a20ca043b0d53a4901cae460000001c00000011a0fd247974937545f27c25c6eba750c9db9d5323b358ead8891a091fdb7402d1e9d5d386f000000f2c23795cde3c49937a74e21a1b9cdcf64343757b38b3682fe6ae2f6e1cc624afeb27f2eca784125c5c25224b09f8a0c89b5061fb7c011e0d1aba1ad4ba6e977424cd00ef4445a2d84651e95b90cf14399f16aa3a52674e7129689494317d19100215b93a82a55565b07064f155f43eb93a1cc6d5116501fc77a4ca2066596058e339d92276781826d095fd7b2a15dd8e1717bec856b5d5d6e3369d5bff908955ddc909f3791d4d03fe09cb01c66e2530569c0eca9af1fc433a7cc9ab0415c0006af4891c9ee2393a989b4461ffc1c5914207993e5be9aeeb5227659dd73141660f931f4bcbb1dd9c3315a35efea6d9137f7990000009e1e29a8099658f0c92e67c52fb8e447fb0d8fd97b8370eee97d5ef17f32931f8a246f6a3700000076401899084da14109e011714333c1dd3497c85dd5cd8bec3726456282b12d15b3ffb3afd0a96db606d534f2275de86b919412907d2a592cd80dba134097f0764130c7a790aabc23d6c1509be6f5b82ae3e2642a80df11d35dbf6e7bf339b7b96c290bf3cedf72ca7d296128312134655c582926d7b84c000001450000004d137757466ddec9e9b0f0d60b8da77c6f509bf8eb5dfcfeb5b92a9c35cad821b19f10fda600000025381a9bf5351ce3a8a28ddd37adebe8eeb2c3a3685aaee006020acf3ee928e76f69784d5fd9000000f01b5c745955f4c87a38406d175f07e58fb76ba97431af304bd65cf988533282810f68ad7f000000c804bebfa785b036f5d6d893c1e6b77891f34eb9cf69a9ef4bd2c298561b09b2c388d64ef967e308d4e53939192873578da05ae3bd1d5a1bccd6ef96e3433a65273356b9d958099dc3ae1d59508e8fd6186394a1f2a386e0c0efd1c0a5683f61cc35f6567ba39853c3082255c5924f3635a50cf759c7f5f3c0184753bc20a2f1862a301dfba780f64b35abeceed817f1590bf89c601b48b693af9f36ba9b99c7fb9dc268b727eaddffb293d9a578c1dfe2b13699b7edd097f3412d4baa2456a6c5e11032ecbf70fb9e000000ff000000680d360870153247d054b37f16e975315eacd3206f40b8e54dea0937ff7944e6062dd48393000000408e0958f0c285f912da7afea99f48442730b2e2a557a678eb5c7ecd64039e457c0d469240952b334c8e99fe89c7f33c6a0fdf08ee925e772af3b80c08c25e10e60000008f06c8cd3a5db1a9d304c16f662b863228e2aa09cf609b4ff98a161171c8b501c74a18f5970000006710ac9463e8b0dc14d97d4dbca1ff47c3af5a3b0ac1713a75a9f1c51d6af7e01781528328ec83e70a61aaede32ce967ff98ea51cd7e1fef21923e323db527aa280f1abe625c6a1fc7c22d06521ae7156b4e7c1182fee014e6e1a51692d4f7a6fa50c5b1ff1a604200000200000000d319c8de78a28fe0a2313ce5f7464deda38c9f331cd1dda981b95eaabaa654a75931e91c86000000ab71da85aa1a931281e67b51e5e4b63a6c1095f79ad3709dfc6480a51f83e300137baf0e7bd0473d2b641c8de7174805e624c969b69a3e8c82b959cd6af3352f50e247b93a7e055549cc82abdbec414681eef96cc725a2ac0971edb748132b42a0c7f0b0f85755a8259a6942a7cc124f98e3bad96577a2347d61c4f535de5a20b6ca78be5e33391fc618c1af102b41e0932858e84a5136b3a44b56bd5b804058653800ab7d800649bcef88cf00000125175dbb6f28b506b9a6294d068dc7f8ddb7d04639c48e1318a4ae01935e5a05c6c433e159000000fd0eb4f924b5bb852746b99301bfb28862c44e275bd7f15987403ddf513e17fe83aa26f2ec0f42aff4931fe66e432214049aafe243d6f3f3865e350c522b959b3f4ea432a9c269eae9be461c1ecd859fbc521f402e15be36c0ff9771100865d1752fe072d0860854d566281a9eaf271adff36298158b5da72fc355669e37791ba05b469be66b753753f4853066c58a2a179385147d67fe10fe47735bd6cb4a4f99f6191033090a0bd9088f9f1c404988e09151e2d373a74ce60a51fb74411a403d4bb5b1350891565bc3a11d8fa62f65c2fc8cdbceadacd10a45ea63e308945a06303a9771d7775eab61e6a5e992fafa611137905a2c887f444c4517fc1d00000189000000931342857d03df6c8b60e4f33e4f53daf8aeb8d175a5a3a83be4a4b4d14bbb96fcf59697db0000006b48a5948409bdb2fc8a93c2921abe1fbb3222fba8f200a4b187068469d96216e1297790a123d4cd1a078e18f484460a44487142b7d580119dbc55dde4d4717c867dc84363c5399e30630f5e67f268ffe9e0be6ba2311cfb35d44a8275a5a7c61eec53f75084921bcb9e5834000000ee0e4d78b42133731a781f6fc2bbdce2852125bdba50f9fad6c05325002b866ecf11bdbef0000000c66a0c8ffb4db34bb5062bc2d576f551e6d292c6375c2e58410f2941919e6f4ab6ad3db7cca2c58b9e56a0441bff6e8829e3f571e88667812d591a4a9c8489a2888a51b37dc56dfb4b2113a98444cdc801b1e227761dd680a59a3d1585ef0d913993d72b38de131a766dfb8b91394f7bd63bd1bb598d6824834ab319a12cf10eb1e418446de5f6cf29e11ab03a7d43eb79ac9cf9ce747b702de966c87914ea7647b9c0d83597ef0af37c2338dadabaa64c0c3ef1e342290c96cbf77a0417c2fbd77a844bf66d69", - "txsEffectsHash": "0x00435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb981", -======= "archive": "0x069b6a34faca1d26293c7b2180bb3ab11288ff97ea64341639d846e2e16fe21b", "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b01cccdfa409e3e14d1a02be06528e7e9a1ba8c822e7b4702d6f83bfff18eca561e25bbf87b7949778eb323576264464cff4897322d6ea9954e20963cf5c2ca4532a221d05feb30ebeae425190a4a30bb85706d49e102146104b237861b801b98ec8237294c89ea946354bc2a0800107d82c61d6958fd67b75f885db8a9d7e4171cde0ecc8b2cfa7818b28282bfcf5eaad2121baf3606c6522616ea96d73105d9f57ea7744ba44fe10659b2f6c07ff459d000000b00b6d781981b272e312a56e4470ab4f546e355c8d5adbc0d9c20e449a71e02fbcc1caadd4794f476b4907601e64c6a5ba935d02cfaf4ffdbd3f577d592ad3cb6133d1d5f8fb7b5c13da6cef9206fbf6e8f062e2660e06782b2559d569a7ef645690663080fe6e637c6a1b6ad4b5dd34161914b8bb8e9d47673cb4b0df16c510d238afb5fb90c6cd851096bd84deb227582292a2e0742a94c9a262c2f903e020e7a52418a23912a6a1254a0659b860e3c2000000b00dadf5ef1869c869c14d46bcc3bcb6650ae555a77e74797c9c89a6f9d54f8a8c292c408e8b844e49cf6cd8a7f77c542cf4aa2985ccf6509619db87c7d2999d0d5a4ac9899e78ffd7b203dbc82c3d7de123220ad8bc6d492de3d37c880ff9de082c884f9c789437eeac9a0863588e78d40643141a95366542c203c94ff6c5303e49f5a784f5dc5e546791ecc5a69276d81657ad82a5c4d592586328904111afc95c9edf9290ed02cb2e03b398c6e87f650000021c000000b014b0571f7527574e32dc1a104c2da8b1d0cdf7ab040b52690efc4aff99235840ba8ad70743428f4a8031537f0c3dbaaad3fa7683c268a107c4ac818b138c1d3935b5ce5c0b8ab947d114a4a430dd0af62b0817f2b7e4c8d180a68f0765bbb1ee6d991609b1d2ff3e3a475878ea44804925a07be18c7485977db7ec5d2aa9a12bbda8c7aa803e0b59eefee7f34b4330f41f6d12daf1fcbd49c0c100f91090e65ccff5d9d83425d19133bb4d37b71a2db4000000b005f4a5e38030e4e0d457ccdf030b91984d62260af471fa1acb938d4994e78f15107c5ffeb82be04ac0505f0005e38f4f823db2275c2fc048df75a7fc27d7a429d52c4c58f28944f58bfee88b744caf4a7a7b1d204c2b8f2a1b7f9a13b5f9415870a3bc95f5b83914e465f6b26a1166970db39039e33b8579d15ca81b3b4bb274671348c374aa01b81bb0422cbbba09b017758604899d1cce743b8d907bdbd0f652efce605d1c8c4fa7ad9fbf4c90941f000000b01ba2ff8c40759d6f152f9263f3768c930c1efc6af0c3915df1814ccdf47c14880bff5a2b5296c61708eb8d3dafbf9d52203abbe57289c434790d23cfb11014823d20385ecbfc3cc5cd767df7877399420dab13828efa3a0a7cd46214b001cce340087239d68b8a6370202cc0070b8bec1e2ce89bd452081f0857c77e47394ea9081235ea65a75d8dddff1a77410833472b059f47021a71f1af462a63af445f290aa5644051f565613cf47ef766232aed0000021c000000b007a5abe5d5c17b682619b68ec470b2ca1c09532f6407ae7e407505ae760c8f4abe8d2023b68f4bdfb2df44cf7cd6a27b9b677e61f8966fa6239e035d0c8d910cc3a2ec5dff26d8e23f065e447753ad2706ec21e7544786f8c2b3f0763c69b955f1b59c50d14647103e156a28d5c93d402b962165ac1fc769866dca38d31529e18cc793cf289a17abaf1a914079302e911a003396bf0179fd26004da3e6861aa9d5862f9ea50d8386d055c65c013dc159000000b0272d22c9320210d7ee823c7ffd20235fd9c33e99f103903f65d08c9e960618c6adf96f9cb0f73e1d01d133c2b0b5117e3e0b450bbb9d54bdc8b4b7ffa7df4ca8224a2d5a9a428bb56edba175a678afa78d9e108dac2ec27df14a92cdf808a80a642f8c4c39e84471ccf428ad2f19bff422ee4d5fe484a732d11b3e969ac97c1f7b0a5123457d80db58403877b8b8bc680cc8ce1806869a0fca21a2afbebc81ba22ebf4b52456df67b01bd6d7bd7ba900000000b00fe0b1b55f950413528b351ad5af93f13c667f01b10c62bfaa83555e00e6f0851e668c967dfbdee3dad61fad6dae1231b53251a5acf6889fdd2f90a95c5dd0c0473e6b34f35dea0d3e0e3ca22c3ed25137b97cc8b2df5230e8893f5379756adb3e4d44576911524ddc0b84fbe1118b080eea14f88cc6881654b1d88d02711b491f436c7069e21332c7008df05454811b16a2e323bfc8facb305e47ed3420e1c2e0d157ddb2762fd8946d8ff3833decae0000021c000000b02bb35afe2bbbe7d4b83e3d056972a8d3d652edaad506941f87f76211f19ffeee03ae3bd84d5590fe69385ceeffbef9638eeddedddc88ea6e2f2fbddae258b13724ec33c4df23db53758beb0b48bcdf72d8594ab2ce907aeb36ad29ebd9d7c299e95a470e8f9ed8f2bb29271571f701421c28a41125202e211ab2f95eee4ae034d9c977da10f5d95f44d396d86aeba00e2259a7f0cfb3f16add3187c1d0d4d5fb6c09f56ab2c14a0e110c515b64e26323000000b025a6bafd1ba17ae5d1e6d091fcbe083e40239f465c27ff61aae10b708a08d4e8161111d59e2cfba652e099e00c1670c25c7fa6949d156816724b8ce1889225ec820598b36040f41e799c54648aaaaa27d5ec64e7c63b1b46ce595e67246faaa69a01da8ec71c145aafab26e7d5c9627e194d3e85b2e65f80624c81f874cceef400d1a0e16fd49dd8a3bf1ff04cf408cc2c2855bf2fa7b8f260e7e7809c77278481bc64a172d9b720c718f41fa8227020000000b0166e0658c80af6cfffb0638f75897ac5162d510c1168ca0da1cf4fc34e0b6db08e7998cdd268eb55636854947c37e4cb50333456fa5cdc212e79859d9dc161c18704b51e02872f57b44d3c18b595a8e5f3aaacd6b64e8f8382af61435414797afe4d09a17ca2782d83ca41fcd01a8ea22e599e2b78c80b4ef4009ae580d4222d121d7748d2cdef2506c0971fec142375289309533ad9b5660798ce5b501b0e86aacd7c6fc150e5b957753d52520ffadd0000021c000000b01c65b3b8d35f7bbb20df800d30e76bd0133f10900fa3a5fccf860449f231f047014068c1c8aa1c1eb24c813239bace6a9a0dc31e49046189faaf1f71ba87d74a0dd421d32c045e85f18abd3a0a6bc33c70acd2b95718172e9dbda833c3a0a32f892f902a52c17b08cbbd786edd582748210e00c94645571863ee6f8bff96b9dd8751ada89928b581736f95da5eba8f3103c7d2fcd20628cc9b154225f07b49f4e57b98925ff433ceb4c6f232902941dd000000b02c7b6569a613950dbbfbb5348d8bcbea68ec09834613fb7070352a9b82dfdcbe99f1766eff480cf0307f54e4f0f869748719835f316dae3d23aa15a089d07a109c6afd8292e2917add56cb3ce01fe6082964d38b82800ef38616999233216f91968d068b1bfdcc266b13f4fc8607e3d02bb653bfa0d20adcdf21de48e71cf634115524592a670e8dff95078077b488800d0f8e9b7bcc3a9d2339462817a5eb0b094155d8f9cff233dd719a36b7159947000000b01c4031657961b27709eca65b4a09b7daa002825cc779cf5c14e5de45e657a55aa07fe3e033222256c28170584b1e4f9676b3f45f4e45435d6b27db3dde81f99723d57e63fba10d6955928f4b880dd0ed948f922143302fd23f0dcf4bbd59cb889e34c5b0be0b8723d11d3bbefc2d28b02fb7d1ac0f6691de9dbc893c6b6b87db58c63df7439f4c089042ce23f50f9c7706e1334ba997de6a76e924f3e968239d1010f8186b6cccfbad9457047cbdfa9c0000021c000000b016a1af708c1576469e24c7ece11249803b791a08ded47deba60c81e201eb0ee5e96ab380a93dcf92c1509c112e2fd114df29b41eb6724cb2e5ad409e7191047301742c64d6ca1a603146569e9c2a6d244e027abdba57e35284141a93b760a07ba11dd384c58f8849cb3dba9981bf95012cb2e806206d060cabbe8507716ca805f6182f56c027aeaebf4cd6df9881f82b2727482ddf6e6449374787434e31654d01899bc79f29c9be27081fbf96dcdcaf000000b00378e2be7ed2d6e36f199630071ff360d880f5810647d05c9530b4b9b2bfa6382d82f9cf6d094b533aca287f0e5de21d43fc45d7c60b25a5010b90ebbe7aba46003b7265059449bd55b2819b031753a6c2c75e012f5d3ac9fb4f5b31a5f05fde78c1d38f57aba1fb920852f3fefad26a13d161ecff81e55508e845f5c10782d66dac94dabf72760eb99c69a3f94ec8f5199682bda062b3632a192bdcd9f46d87df7fb18cc1625eb51007976bd752dcb1000000b01d75b72ac48a40e2219493c807857cfa0a3c3ce8ce1720cad88ee781cc3db7ba8c59baffa46d963f9fa4da0c2fb7e3c6cd73607c557be4efb125cafa9340948b8b664741adb8f5fee38d1a309505a524dd525e959ba1839a9d8728b00853a25dc02b900506ae603b25e9aa3de9a15b6311d56f9e0849d4573e1b3fabbf4f7801dfaf50007c6679bf061e60a11634033e2a126a529c16a2b38c2d5fab70d9cacb4618353d5a9857564193bc81b25f90bb0000021c000000b02102a1e2a0991bba7d3e3ee30658257b4b1dca5b0f00447b05411f77d57403a9d0d410a61703fcafd1caa57da058ac59f4fe8e4fdcfd03fe5c1289a2889c7f539a4abb3efebd0654fdb2fdffc363dceb528bc1f0f13cf7b8d609376f78b0ce2982e2ce53f32d984438638f70859c187b2c024960edb9ea00faf43d95eb224ab964271d8d30fefc92c5df36cb2c5bafc3056edacaf783acd0c3f66344a9e6a72fcff421a68f6e6b0c6e5e6c022fd0df96000000b00cad9cbdaec7af0e7cd968d1420847f45401be9ad9296c30826e9e309266dff8f8974221f0723d93485ea05f853ae84504a3416c61a72acfa7bf541d68f647110859e7b55d6191aaf90eb19f7a510a005ed18482997483e22f420248b22f1fba77e439d13020091bd9942964bb5665b5199b7b06a24d8115cfca5e042a216ab0fa84d733590f9d60820822405902579414f90967eabd0eb9864b010da5b424a1d92aacd19ab7757c572a380c4693f615000000b0151a0fa9f0a9d6a74db6afc20a180635ba6a4ad5232d055797ec55432b69b5fd32b9d97da4657424c7fa05dd0eb847406b1313f47232a19fd600930c736b9c73ff2903198e48408639709e76e74e96347bf254ac95325fef3278c9c6dbb866ffaaeee058893f56cba9e7746f4d9846432f44d79665258385fc13da84fd8e6504833cc26ded42e5fccc3e3021e7359cff0e5b3645213b41588f5343acc140edd01ee9985c029a9093a88b434b1aabe5b50000021c000000b00481da8fbeb92f3f955d1de236681fdd1b436dd955b18df77e0a0ace915e3d5d2438e38cb8f170ae5818a394e2e15dd87957a060199a377b16c9f2075699922afb3583221ef4f2f95fa67c88654451efc1e9c9bda6decef0fe94bcd838e3f1b674be82bc9c800cd72f0a95a65770fd8f2b917df09a9e843b6bc2b7361e52bed42ee00ec0dea4e342a59fbc252ced75b829758c47d0be99bea5ada45847f32aadaa563c278887c7ce37b44eb586ca2c54000000b02ac772336dc581e6729d096ef8cd26c8a107b44ffc7a5ff3b5803ad8ea0341f4471541f8ee48170c4486c41146bbc6c1536b51a14aba71750b524e451b83405cb5bb7a6c64379e3094807352e36a8384167fc399ea939537eee7cb25bb0bf90f58e70c2c0c9b7083a4a3b31c61bd39a10d427205c49d534685498325dd1bde0db60ff0acd080d624d26fc98a835804170ea1e5667c92ff6735eb4aabfc32f05d5dddae5f7139a51f0d8c546c8350be9a000000b01c41c407509c96a1ff0d703deb373e51274ae4356575ae35f96d73db174c1c1cd0cc431ed51dfb072600f810467cfb76e34feda5d2de2c3bd8584f64644fa29d6686f6ab85999e1f783f20cc4df97d7f9bd6a8637160d5fb4e296ed441ffa0d158a2d23814c124a7604c61e5c210051b278f287ecdf93c3e870a0e0a60e0c2f8f4b3de785d239997eddcbca46211026c0f04e180cc13435f710e7b3534c16c780f8fdc8d0f1512f60e6b2896a5d07adb00000de3000000d50000009b2e4f97d93db50f74fc69189a5e26b799510243dbe244dcbb44967aa88656da1c48120616000000738b812b2a894b7a041f4e64eb90eb036b6b313837fab63019dffd18d228eaeb2339362bc050d2fdc9d74a5aa679301f6352f34df8e6eb14626d1adf0f6189df161a93703f0b94eedd57c79dc26ee45095557e120b1164040c649df6e9faafd9ea478f6970a67ffb551ca2a61f4b3dd0cdee3a4f00000032118f11670223ee4c0f789d0bc948f9429499679acc98402255f3b7ebda50b7096f07cd020000000a4c387693c78b8330df2b00000194000001282f80912c099d4e3d750334ccdd6715173d17840aa200fcc15ee91c6fed4ccdaa3ae268730000010051a214c092e29d9de3b199c52d81733b911044214ac8dd34dd58d43f64fc0f9171a7fa241af5e3b4c1b3d387586e65df994a647f134b8c66217263823e8d1c006a8a562b88bdbf1a291aa4124907bcaae6d60ddd472e1240adc6813126dea5dfcff57f881127ab5c6775335a6bb84d2deb8712632bd735a7e207c98a4e5b4e75e5c474f5c80743fbfed4889ee8e956156e8bab7f88a635c28355a0665b641e8eda59d42f6bbe125f8f7eda9099f3e503b57b8fd725770312df952ec5aebfff65c6c7db74fbc62af070ee02fbff719d330b08fa941abea737f693a9a5bc31c588167816995c9fc78fa6e2d2e9b62ec0dc74810ada723a1a1a888b93d8befaacfc0000006413f0e872373f0a05a333932be7481450ed99cc8bb946dad2095ef0bc3d36a1beec7fb8590000003cf09a5fff9775bba30cb6ae4d57a9bdab795e6d71ce13552d7a5c3ec83b1127f1ee9ba21543e335453ad888b42605bca2748045d40780adc9f0b71f4c000001650000006d01a0dfb030d5d45eead1e9aca6c28ab592623d752b9aba59560b247b676620d21dcb7f6700000045dd60f8bb788b861b651c0e29859ccc5e52852a7a7f3b437eb86d2a97703b57860da3dd28a042e941f7078ee53570fa5868b1fb28d410229a1a724383e0b8e5aeafca1564fe000000f0222b9969378dbfd4e287d09e00fa2306287855f50665795f5967bd5635fcb66d242301bd000000c80e904f491366eb592189b815cf906f09187d13b7cedceba2d1b3a4e901b232e1ba54320206e9a1b74150c5619f6115cc2045c929db39dfaee8857fe946b29a9867f84944e0679a46a67b8fba76281e241c8375a020c05c4c00885d11f941616d610b2780d24358657adfde07b43fb267991239f15b0dc3d7008b29724c982cd21942a826f3452462a4143e586b99d1e66bba7aa92769d6add1f8fb898be59360103b24f4ec45e623cd1a3750bae1db2c33528277ddfe374a5ef31d37ca67a2e88aa88542b4cbe4da000001c7000000a80a98bd98eff03d49246c898e20a8c08f24a3d228d2786a22e0d494d0c22e32820c939caf0000008039f93f100b58dd0b801d2b7be8a64f3759d7798d8bba6f5679ef91d42057b8d459449c799eaa9b5b8c191cd4e8a207eb7ba51266650f90c2f8dfed258d1e8bebe1b4104138b42cb391fc14510195ed659b0bcbd11160a2efbe35f0870f51c9c1e5698c31c4e69e135a3b309c63d49ed09873f1bf0dac63eb7ca3af14d3cfc59f000001172249ba38eb3735939c2e61cc026438386ad8983b207c9804caca99af3fa5bdbed0577e2d000000ef300c240dc5cffa6ddf8605080ceb719fc22f526b455ee006061582a032080d53df8bb27daf1b8fc5c5a25b2e9755a4af319e62eb62c58828744cbe8295fd1fa35141991069070fe15f412a256a060b9106b0915e7a51a744ed836ea103c1eb94c67a44857b3ab13ba433b5ead0e4b8e5aebf07bb52bab76d0a0524293c4ce1055bec5c5c264ce8a3c3449611a8df668bbd386073cd79c92c5243be5751374c2b41ecdb4bdee00726b8316df2b508fa6d20ec0e1e256b073ec0a179ae35197ce51189f7c8c2e2067eec20f1389d35582f02dbd70607c6f4f1c33df710ff4f984da41e8a6b095b60efa66146d6781da900000180000000b41fb23fe3cb799b468d43176b118694a984232731981b6076bc1c2a4cb61f41faff82a05e0000008c41644fe8d4771a6d1cdb22b2f57d330ca0e86e002f9274875f668f8232ff74edd74b2d8b95d47f8ca39a3a5da8e1c7f110a4d72592e51d7663619ae84a5511a22a85f8205a4dd6f8d9b8b6158fb6b312204e3fce0a6061770f294083988b5df9633ec034c9e734a9fe6ace25a5f9df09f2aa099222ffca3033a9e972eab906250f5ca43ded2cb85a868f75f5000000c40b628d5dcfd23e3dad47f64a87a243c7fc1f7731ce3d6057078a488f5554df298ad232770000009c3599a096ad019f2903d6634573293b7fb88ba4034506dddd538fdcefd30fad3514e7f21c1bd8c9ce411b37be709505d7546fabc0db27aca6a0cb4b3fda21ee3498919f0946e8205f20f2ad8ddf1602ca41da42db96e661cdfdfc458a4368571e07fa0d7be2936c0a977731c58e8b1ccd1ce459d15ff4340532633b7ee24eb7a8e35cf808c1e2a42eb30c427cba0cbbe2142955acf06115994319c80300000123000000311606efa9cfd20ed91cca9e235f580523d5f688f8c5bd7a77100753f30a527c25cf37abf3000000098fa3449e18495ff602000000ea0abff8101380cb7f2088ca38a028672ac02ecba172d4ea76a2a54938cf20e7cb181af093000000c2d8150b34763f7fdb00164344294543ae357ba387f0f3281e3c26ef1d2cae588b0ca69e619bff5e406abe9df4377ea421c62a13259fc49a098964bc128d6f29390c69dc1eb524df2b07cfc115cab26b494bee13a6c348b8bdca248420ef8e2bbb5b172d71f67c1b1dfa60dae4faf4536b437c036fafff99fcc260f718bfe407ddd2397a50d2bf41da4ad916f4aba4eeb8f4fa548fee97247a74be476ba95973a7ea7059a2bc1a7af577359eebac6fb04a0603bfbd04f17fc70b1e8eef821b2d355658000001a70000007b0958e3b34f839790d42385d30cc4e76350e55cfcc2b869cadd88f74a6720f5514af243ae00000053a0d934fe40922b10bc58006ab871ec42789b6b6ae4a3cbc80e3778b2c4870e69710058c8362a4182c1f01bc2b1bafa5716aa8a9ab0dd1dd3447393cebae338d486145cb3531ae4b2f54568f840c41c130e54800000012422e40a9405841ba87eb94ab888332a1c1fa95bea47d672b5171c255ef4ebf9d763afa19e000000fcb1ff0efda2f1bba8f64569b3c07303adc88a6592935bac39bdeb3be9b9eb3978ce13b15be0f2fbe157cb8ecb618c3b231f4f1961521d476c6384371222a8de40fc580d6cbc35d4043cdb842b7b8f74bc7864b849ed5e75d0d81217db8937837c3add7cf7720471ad30303ea7cf26c44f2cab9907bf3e0434917b5905bd17720f1a81a8b96a063221234d18aa0d9d9d700f0dfb5d229171a34cdf5a8bd4cc0b0e8537d5188be1b53e8839a4f09e249dff35f9f68514ef9fc3a25606d08f5f06162a356cea54847454734c82a102b5a96b261415cc06ae8f9cd40782f5db460c0632fee0294a9b68aa0b231bdb9bf641c11ffbb277001d6f0a1789aa6e0000009f0000005f23d5ab95807762ebce1fde33b83bded8251ee6f3ef81fe0176107d520add2ad50f045a8f000000374a65349448438a651831277798edccb13b33cbdebd0956a2c44376626ed825b87e78ea8098758296d6a5616de77cf25160162157c361a200000038207c2a9878a818da875db212624be3bc457853969e58ef8ccc5eed8fdfd856c2988d7dd300000010eef4ded52fa70de2c8d475312dcb48c900000103000000ad2663696aa826277ff4591cb8eebfc3f4294d3bfe682cc0e3f67eb3711e7ca7738e7bc793000000850a889f968e38232b5e26d158aae10328231d03a3cac72ca51a9d2f68d46b6243e6e29a4588e5a644db4be38988b245f14f1d0ea4ceb91272f5d7c6acb2a4b39ed6d18b704a55addb2f00f1c4c6bee12f4fae4282847add62b1ae229f613098a8ca155e74322d1629e28f39b58485aacc331f7b9a8e6355f95f8c74c9c0686fabdc00cbb8280000004e0732d1e5a52368eb98a0cf4b7e6ea0a405272d3326301509b94a706c9d4cd341329a1f0500000026dee3ef2608c07830c5be2fcc972bdf5407d70201f7926ffa9322d16153c645c39f4166e5e99000000123000000360bb42afdbc6eb6e73f1d19ed5ef0d509efbfcd13edfbe1d99a0c430a439a99095ec8a2ba0000000ed9e77826e9971e62ab45bee72a01000000e50f6eb42c6eb91935993e3ee929ef6e3e6a6e412b0e99fe237f689e53981293e65848ff50000000bd6212a6de88e2a6c109833e9c377915acbda2338876f8c3bbf74a845797587d8ad5d7975c9311b590deb07be644047f0ee92866b195ff58fcde99255417d9b3257806eddc4752a60761c1054c34b5732f3f3e7c51a545cea98d06e6952173a60238714a138154e3b1264b12a9a34ed31ecfd6757d9c3eac373d4af975e7474baaa76de3bdf0aac9b119e29527ce5fa499719b6cd7590cc6047efdf4293390fb73af2ae91068fdbbf42c75665cff5735983c86f1144ea38d23dbcb4f42bc00000113000000a800c7d142f82bbfa67f1a6491909ff7232e6a64b3d40d117482a37dc29629055f59752e3300000080ba4ba559520b295908c8fb35c27a871b5f5a6b197b55f3dc60c896019297c1e9d8f641e6654b4d3026f0b2b232d7dd4253c3d2168bf372744d195b8e62029a5db788b9d811fac55ddf2e244853d90e21b979ab46b9aa89c408f796d67792453353e5e2dde554220a2d728f24b55ce796883529ff119796e59d3b4bb6fa13dacf00000063260e879899ff5b18f539c8c37d10e815c7fe8cba209e846c8763af3b93717c2d3d247c280000003bc7345ad89e0cf0e6c48cc65f16ffe90965a1fc55216b03d0855dcc33683388cde4367f0cdb2d0187411dc121c65e47aa6861608c8bdd2b3e02e2c100380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b002d138300338fff5b1653e32c746ea38073699f4ef36b2a21d544285079e89de39db6178a794f5845798821ad7f8f14dd60dd8cb9614160e9405a64d4dfeec5cea589d74d3c9c9317399fa1fae51ec10361e5f543fd00f08e2ae3f9402dae18ef8284aa8c5701af8d4de603b1d99f11b218730859b17a392b5e1d7e369234026b760af3967cea8ccd9a91c86f2126605003ce399337dbb636cc26f2bf7c03bd041476ab3b8967c77a72062da0a6e60a3000000b024f0b88c631a7e3df2ce8cf5f0c2e7a0d8b17c9e3e9f9af854e2c2b631ff8a43b33fbec6d3736d3ca80fd714cbd7f7b6ec31fc7656a18a4075f0c14b906b4989234ebcd779ceda1f565713a9638fb2d58c5025384fe7afcf25a0a582ef98f34b4f83c3929a6cccd67a2a039d6aaff8e71dbda080c43590f7bc2b714ce2bda41190201ab88b57a008dba39bcb6bf822a20ed738cb8cd9daa9bd682e13ea2509871736e790a8e151c9f6ae7f95d8be60f5000000b000386259a10d7a31659529e4be89565f21880c6d3ba12d7244c10417fb5e96e9a362d14ec37e81299d7e3ba40dc6f7af50c76243c8a6fdd2982b943ba5d7028ce7ec344af7594d31b48844cd83837144565750a3ea49d72cf56a30ba5e2d99bd6989b80a571b5edf243535c1181cd90c1d4aa93a5cddf369e6ae2f64fec586cf2105b2a268a93fe97c2c7e9e771c32c42f87391eca587989303592a89fc680edf7977b77bd0dd714ca588b6c0a544bfe0000021c000000b01234b682808dd749488ca128a9e76a02a8400856f51ddd96acbe4d8e0b3c794fa2cea7b6f1db493eded35742434709d9a520218e5373491ed76b45d3a717260256bb5b50c9ef75a24a3cde435609f2390cdb42c1d5abe896e5325e911fe7a5eb738841aeade8ec5f890c62c1f195b1db0a724b659935175e15ba2628dc73479b6381f8a5e00d4b08e5dcf92097564dfb24a6d53ba73c39194ed975268a26e4c1b7b7fbd7facb7a0c57ea5f6a7170fc93000000b0146ea07b5dcfeeb9d06d7fd14d26de1af602bef14033c1fffe24ab22326acfe59a03b99f82d2794779594162b1874fc7dd839c6be40c7b20e076f15184f49adcb343fb0aed4c49e05299ed9de33f60853d4abf346429c4414cb6e4a0351a5f049daf8f60645e304a1e29260b5b96e72326f06940f5577aa2a2cb89ec88228cc4621953a2ca8ba4b0ef096a9e814bdc8a01c01762ee8cc425d3f8dfbe799fc3da781bd578025356ddb74ec5d6fa77ea97000000b00996217a379524f28a6765d437185e898801a0cf8113fbd093c920b783c7e4f231ec155ad7254a8646868749f5cd89e5ea80b676668f870110f04b26fd0d6447df541c566e441d347d681bd6fe86b987012083fab5455a8d3085135488285906bd85322d34c50b1401e97d20fbc40cb1262c95bb37e84055e5b7211cf5b384ec5ca9bd67f36b96cba45c3110a89b01ac0612197fefb167923856b3f335e8bfc5dd05efbd7536d80a1649882e1f17db5c0000021c000000b005102fdb9f5901e8533c03d9584de61486060ab0fc485fb4574159c8f190474e72ee4cbac06f9970901957326ef1d7470e19dd696c402a3a0b57f80839fbb28509b44fece2f8a40aedb0d06998d6fdce266f2b9c12bc842a6bb8aa7aba0514f90f1e9389bed6e157b7517afc8a0ed7461a93179d5b9ca381e91cc7f1455d2d52d26524b0c2789e83010e92ba7711b6c606705bf746ddd988d1c5ae2541993de61c07d46c91e9e427220509e8396b35e5000000b027e413fb264edb09d066a05e3cbc3543c6197a9fbc8ca0c322dd81a5dd16b1800ea842326d6ee9df71111f880bbdf96dc6e90c7a3b889f21926f3879a28063129fe264b0d442664883c3f85ffc26da1a1623996d985b5350c7dae81f09faab39eb347547305a3fa724f41880b8c1fded04ef041be8d2913543dcf303c2cf1753cfa12f470b91a09baf2658262c2440b8285b26c4f97280a9b5477706fdef3fe0237dd83b3e5bdd926cee40ee9dea1705000000b01d9dfb90f09a1b71185761de45cc865cb54c2b6aac6ae76183edd2c35031738d05be9f773bddc6b7339f2739a16c707ab48e23f028c6f324d7e93d9291f671aad09f27680a9bec589d0605f5e10c4bb8b43a7e435d215a49cc1098e1dae496e9526cb585dafbe19ba7c066da5be254ec2c1b780b2fe6b7c30a3bf0eaacb20402d37ef413f32c5aee48d71429b64da1502cc15bf075781178084724f59bb8dea6cc6d6c01626a0a8f383fdfaec67f6a3f0000021c000000b02aa0f1e2fd4f68edf4b95fa0d068d06fdca5f70fa42520b7085ad3ba58876cc5e0944849fb175d764f6fff08005ebdd9dfb2ee60a88c9e89de20d5472bd4e8cf000d1719ca5ad0e4645eb19f5e2e4bc3b2b62c417c5d2f2f1dcc28dc3b1f351305888b57e69d8cb4c4a83214136a7a180f91b5938a9b0e13ceb8e4ee2349ec8b907a9b83091140e835ebbd10bb7a0a171e4b73bfa6a3eb5b5efeb096bc4c0383f2dc3130fb9498e99c79f77f7359b64c000000b003cc88f0da61273dbd7242f21dbfdb54690b8b7c659dd3d8079e804bc2f43e25d2cc928917bc8f94d27206c002678424ac1b84181e81b02776ea2f859d087ae049aeddae848311781df981a4a3433b11983788dc2f1aa585386741939e8e8042c8e1dcda7e5cf459a87ab4831e5148ef2af66f23029b2d69779eb0ad35ff914ed1cfe3a861e198d1eee547eac6e99daa2046573c681a1fa29b3a3f41ccbc102c5861b507bbd2caa203d4929849128df2000000b01c68d36e5cf3f902614fb0b121ecb10082e8f1dc3f1276f8ee0c9893a41ae203e54c9e346c62943e371e975d6df1502c811c812a96b395738526a391f2e313b8c8d56ef6b66ad663ccad684ece91c2f35339a8bab06dfecb430cbfdfd298382d5a1c61c9d7f06a6ec753783a304f72ae0bb462bbb93764d5f203e7d93e8f33803651164dfe3692f69faf03976e2c9ac103ae845f41a49079465c79c48bbb86fa4a34e8a3541933c22f6edeb2814d31770000021c000000b00e6fced82f8ee7992c83ad30f647aca340a48b9d451a5582f2097eda8adc8449d548a635a81ed3161c39a947bdd1a8cfe87309457be5378e4eea667f7ccad139820b4dd04f9b4aad9c504f7616c3da49c41d2cd93153a416f8d991cd9242566f4fcc190d363a812ce0a9a0dc033f22fc1650c90786bb579795957ef69a1d7887b5c04a0fcd5a2e9f2c7003f94656d5dc13ad9891206f48a941fba5aad1c37aed6686f4b711dc86708cc351a836a54a77000000b000f888ee79ce01d4fda2e83d1b3af3262cd146e5cd7daffd8e0e1eb172d5333ed54d3905659efe44f113ebce9813e3fd390aaa1714eda14d6ee9f84fe2090d71e8bfe4d7ba04169013613dd473aa895a51db6be8bfea959e367b21192c307f18557f02030d33a398a7ddd983aa98ebd62ac0e9ac9ddf5d8b738f958ecaadee1ae28fa8928b809d98b972e1c2e8235aa10e9574153a328e59b8e9a89d4161d47da551d83447573d2b9a2ce1164744c651000000b00f093c45aa424186d3c06f5b9588c1d916e4650bfd71e67a557630c0d64e6202300d8966b6a7a121c69876c09a32746277fc7345b627352446de8d6bad366e45829aa749fbfcae203fdf3772658a04679123d3886d2e61a87fac646a8053c59b2ec75d115e7dd32093ee47e467a1fdf5066fe007a5c9b03484c53958c0fa87ed4a174ef1ce0990cd368a6c6b9a72b771073bc5092c8be169452e9fe454e7ee7b3be310dd6f83926299ead0fac4dbb1400000021c000000b02b10e168ef98c93fea1c8a5bdd82100c08bc7de4ecaabadf0f3da6e8cc6a8f643573544fdd3ad9cece0707e1a364453ef6ef0fa5da539b47927bd4652c03b03fa750cf9ab7d10fdfbfabbe5fe9745288dee4620290b0248401ab7b383f6e218e650e5431d7a66ca601ff57ce7e5cc35f0da5eeba849497ea3a2ff814629b65661498c05b3233f2290368bf3f6d988b9a0cf4707a83d21f57c2187b2c7aaeefd775430c2ccf680e55f963401877ac4922000000b01fd699509ef4c41d19765e5d0215df1de62745265a1d9e1ff49ee4c1ae8afc43da19530020e159aa277212b66f6e79541c853d74586df22b80f8d1d08fed8bdc2cedd081786926686a620dcf249f09cc81bf3965a0def2e7833c475ba23a1edce325c15a6e1ae85689e93c50510a18f31927c5528ce6e0d4f1f56c6274869caef378c0c75615841200a0e6f54a7deccc0211c02b197178e7bb50d19f19c41c9b0c473d46be326505923003978ad334a0000000b01b0ab0a7187b2fa3c616ce04cfcd9034aeebcb71a9c664baf679166240952bf3068ce1e523d48ebb34219b2d3e6c1bf49992fb027809570f883ed562ddab5a7524b118db714510f7c94a1ba361b1b35bae5e9c75195d883185da3339fd133390b4a2ce917d0bfec800be68396f904b4c25f8f21f39ac043bbcd9913626879d46f9ec4a2ae0a6d9c1beef149005a7a1782c2dbe04b713e1160cc59606f7a2fb44b84b57851b59b4e973f2501c1e65d0900000021c000000b00fb61a07c968a73ab9dd7bca90e7b1504d4edd28aaca0658c4268718ca3c26a2ffb9c70a49c7b6844d47dce80246cfa480851a4c07dfcfe42062cbc46493dab5fa06aa85afaf8e5d4b90ce2b9b4dcb05dd80b2c207befb067fa9c31241897d1bc52aba64034200e5a0b5b5b09e07670b2a4660dbcc40d954ccbe16703f868dc5bbf80905e4804b015db9048aa9c4890012c5a39e2439b5ed3f518517193ba3f97f5698e4fb4fb988eb19ae122f9b2493000000b02351f4a26cf29d1c8dd03c70d98279f1cb0da27bdf17069307ca797ea057313afdabe2af76ad7c3c22fcc3ff932e63be29ca771836517c2e9a27e9a4841df11165f0535294f35bc5e8ae1b90236c4ad5c676306e31ab751043d3d6cb4c646c9739a7c142e8197a840dc77e42f9eea2230eea1bc00343bf9d4475f8bb68a6e9c1ae99a935d97e6c9db24a6692d909be1a11981a0d252f5c6f4d4a1e663a12811a5b3ab613ba6b3a7cffcfb1a2f6aed03d000000b01af70b0cd480b355656fb77756020148b6f7d55b8b19b842253467ecefa98ccd8699c69916688002a7990f3c4e473563c6ac9cc8bb61cdc6fdef7b8a93d56b31d4da866aa8b377ac3ce483620c1d458784a1d9622f4bdcc4c690596f0cc866d66c63ebc4c52bca9c553628cfa0f9d2df2d01bc243405773fe443c716376a9ce2959fb4603c55c2739a751f5d3efe5ec6215092edcd13b4009f7c5af7a1d3e03f1a68f0454bc396f28b38d6d84cf29de40000021c000000b02b163d735ec236543998d9474caa706fe1b0042b46e4cc5353399d40d4d30f07fb66297a71b9cf1b3baa1b90bb8721e03c2db26f608754cee24769c864ee02246285ea896639546396d4a745ddbf1de7a7e376f9e3e7298eff823c51b5184ff11584219ead441328088c2a0ec618b4232871565ee6b842979b45aeea7b1509e68e685c7d20a79b9abed89d1cbe26dfaa1ea038c2fa2905f5046fe7a209d50dd4173b5a7b5db9cb8ad437bf38541d89c8000000b01d0c0ffcd5b00be3ecb12fb048d4f883ceb8c50616583503a2e337a63100f11f73682eacd16716ffa106bb86d5e213b2918f7a419798c9b24f0f9f781ae6772d36d53711446985f77a27dab840515ec0b6212169b68b00b72d849d821b1d7ac11e606f28800a443954298ce750408c2024bb9c3bd1273a3ff0a77f636b551a0969476fead710d56bed356f59e3d4df4909f05dbbb28a995ce35276dc9f5afc5cc2d8e37998fe87eb3e91f7190721c22b000000b02afa426bd8e9101af41eed38bae0a85229be42ee8df899e7f3cbc07fd92d5bf94dde99f6dea56e5dc8a1826f120e16e44badcee18194ff0a7d4c74e51c1e075d5d8a94bff1820d00f6a645a2f0251f24bbbe764379451cabd25df7ad9a220c1de42718fa47b7af5ea4ff34027055cd070f263f74b5e9bd5e1fa07bd3d6cb00b24292b350e8f7692ab8bc70b7d9eeebf805b3d5892e1a11cb3b75295a447346ee97cbc4d8ea18d01a0bf4bc7d4b88a90600000e91000001d3000000b013a42923f5b03d3ede2b2fd2510bcba6ac256d21a7334d63a5ae9d9ec85367f28f8ecf0b00000088befec593f5a3c9e715bb9651cab46fd76a7b4c510a2a1e7041e7f3207b48a6efc38e753688b29348b9741bc34dc3a2c3b843cb4c9aaa9791151990f097bb4bfcfe8b25081259f94040fd1f334f8a4dcb772cf6ffd183d1b73fa3654c485774164b40e633ce88a53ebeeb24520bff790ff22295ac8f7b04911139c0c300f2d9082a553397129c04050000011b25e64a494ff9f9b3c735160565feb34c2b1e0516a05cfb07d290fa5afebd12388ed19d42000000f3dad49af3d60c5df20186090c582de8b40bcbd8836638accd1f0bdd42075dfe00931d6da54b2024f8a95f534c27bd8387daa2331bce2309b9070a0867fedce763957bb20a0e312bbc2991ee7645041e30b9e9b20778b5bf4c1afff4882d214f146b8e56f41acb18125ede8e1245ee32ca2724fd48714e5d487f1fa68da328f7504872e3dcd504ae15abb027d6da31d266a75e4c3fc22567b0f39edeb04bf9fcd02803e190b694f35bb3769e97e76e964eea85fff90da99d511c755a1d61cedc2f6e2bf170b4a652f87619daad6f6fe4cecfbc36d4fac222a3fa0fcaa7ab63951cf67afb9db8f659bb6f16a60a118c6d72d211300000009c0000003a1f6195a09471343198b23d748383316da63e00d27e4effcc00e9a83fd1f2ca461b880d9e00000012a447a201a852f05be7211028cd24f3483df70000005a230d26c308ea38272218752855b0f15b165c1cc43c9564060c099466a21345ee9268d7e000000032467f0a48843735afc54e569cd2aea9172905fd0b2aedb9e6ee3445799a0bec5452db346211afbb742de696e7e79ac2f5aeba000001c6000000c816fbdc3297a99ae6b1db1a03ee51af8d8cb20d675f190485e7b310174a149521ba851dfd000000a09c7e6183ba63e024e6d14f83efb6b26dcee834b83d21f21074d6c9d495417d3788cf9bea259f3f0c3067cc7708bc68abe58435b32d2e72ba67b107bc389c65105b604282cdeeb720a632fd30e2c6cf78d2b1664d84288aab4580054b7d2e3ad11ff082b67701e8d458b66da10006f5c9b7b7e258b36ee2fefafcb5b1caea706b2b24e7266b779a2ee8d475874d742220c4089bea742a0601fb9d9ea541a5136e000000f622e7942f7513801020f84585c9d76b890f01b72f9d51821731d01b024eb39714ca54d2b9000000cef2a4a7fd5f5e062cc5407c27a3937ba2f534681ff399b8f6246de9d6163e3f9481ddddb09035ac4e9f3ba5a820ba3b9e3afdb130b7a49da329c1101e5536e6bfe9d89cac52f6e96737d38262ea5b61a263d582b3852914e64ca731a3656a98941843ddc0487ec723ada9c87b9582e34eab9851349b95f011784ddc61f1ddae0252f8642f7eb44c8a82f0caef56a7d54bfa3221cc9518d67550a844da240cf2686f3bd159b83c0d5a8ff46501b86f103dca7a81d71c75970e6dfd12fb800ca1f2868eb13d63718d4d53491fdef15d000001830000012417fb3c79a590567e0f0d634f1927282ab7fa052bdb699e4f1e2470a5cbba70621d681d44000000fcf3f6088d01382f03e100756b18f23902cf3df58f43009558bb42fcedd429d0d3706680f9a08278385efd5c9a9781ee22423deeee5c6a3fc83cacd3f7961205855e3a0b6bd1307519f20ce7996af086acf1046fec667bdee3a2102cf90bed3d1cd066f3df1b75b26ca6c5b96a346eab80099860535826aee5b0a2363473658fd478dd17ebf143063102480089e6dffe059990d822d6c12ac858b58dcd1e1bb0d8c47f93c1313bf99129263246cb6794aec95afdec7f95e10b1009c52cf71ad12be436c584df1d0823f6c9f4942b0ea69e6bc120eacf9a256cf6bc72ccbc58a5b00976ca2d544b3789c2ee97f50990d5ebdf600b13045017b112cb969b000000571d7258a70c3b346e4d801b03d5cbedf75a02cc73c183c765363f9173440bfd1b3d6debcc0000002f9d59915a834468f453abcec3fa7434c6f558619920542e65a56ecf584c433b967b7a2041207af80f63e6ef977aea77000000f900000082245d10104259594383fab7c3af8bc14b0a7237712579d6a1c0ae634aefe63185889041930000005abc1a0ae2555535fc871343ccb992c97227de4647adef85aa61ec1d4dad0c8bc794bf9ff66c7eddd829ad1bd14859bacc90e4a70f16dff95fe0ab4b4d333834633e040405d0d17836a80034bde42717944cccd32244b10fa44f1b0000006f1cddb454ccdeb8b43e9e34020a20bdb4b45b68a9ce0b2550f66332ff2c581e837da6b1b500000047cc8488d3c323dd0086b9fa0dadb7218989dd430c68ea47c145bc0a79f2bdbac8fd6ffb9494b3ddf1a11bfc73940c93cc3e60ad702758097308228e3799375d5ef9f650d31a74f1000001160000005a2f29cdcfac0380774e7e187a8f94977c3e325f42a03acf7f3967395a2afd8ff6233ad431000000323c8836a04313f74cb629b3d54c73f5da57ab4922facd0692d734c21b5e6a481c2fa192c45f92cf594eecbc2771f9cd4be510000000b420f21243ca51873a32d0e0226aeb03fc4ce2d170ae81ff95ea4c66f617e897fcd3017ca70000008ce87cef36a8c6711aabb16c17ef90e176c9eae684f4b8541c1ce12c345ab5b11c986f9a1c535da67f5c5d44dd51ce14d788958ae75fc9c10b0c07e71c6554196aea7bd7e9ca7a28e39febfd90aa967dae8f58ba7fef8722f2363800271a6188718180b88403857c67c15561c298146c6a849fe1850ee63c74157a3605ac515d7bd65bad911236e0f4357a30ba000000e80000003c212f3623cc8cdc74dccfd3f6dfaa1ecc05c2e53648146ead3d744480c9dd040f00050ea2000000147569a0974428f2882959eebab9409ed0bb66438f000000a423a3685c0a3f63acff002700b41285495664c5a5b9cc4a52d48aaf79949fb022d0c3adde0000007cf0a6c74eb735a06ca74f406449b33ca072c30a7d9098ce4635453971559b470d50ebb7fd88d55bdd3657cb12392a2ad40b40836d31b6a048ce725b37d1943a68c58f2cdc385c6cb3f3c4d583763949082fd948e3e6f301a743cea76cc8f58583a57bb8d21ac679395101b6c64146ea06fed81744f8e5cc61720d878b000001440000007a1fe214dac2ca2d148fd63702c5a5934b234ead0fd67dc7d4a338e717131f86b0ff1d0a7000000052b8bd812dc1446ef298121153db53c3583473bb0696c84ae6b1ad6a9451e2ca20dd0e0efb8cc855c174786b9c6c8d97ba6de8c9952b76c150fa51ae55a627f29b61df4265181580681395924ef0e308cc0ecb000000c2155809b85c0a0123154af087ac094898f1a321db717523db34012822c91a666e2329e6ac0000009a1c944e7af5fb6560a5a551e1982456408806d99fe052b12bb177cffb17dd958b84891cde3577f2b570d8686b0684c9ec23609bd871c7c0bf24b17e739be1328a19d92334320f8244ec86444d10b5ab6bbc60db29ebdb67f620721962bd018fccba0f723d86853bd6f16a22eedae6f238c4686b232c629908dbaeac5bdd1f0fc0caf4037f98e0ff1d39a67a2abad0e33238067fe3ea16c79204200000015a000000d811b05ee9a1070ed352e02f5f5271a59377ef551be432409839c1ed17b9c64decff32c766000000b0450d2ba78ec6f2b72d426dc24a4fa91dbc52aceb9995ceed6d9d7c59d92238e7d9ca68405e206b740aa5c7d04a7ef13439c11ede22d16c2aa7af4df6245e969eb463e7fb6474a09067f3014647258ca5d6a95cb887e2fa6062b6791dbca74b63e3c40ff290f14b028be7449a25435b12fea5c6aa1351e406d32b9e417c9fac568e2868112190163e16900f8b38883a1b0b28b2c023d46dd8759e4a063d82954c9419fdad6f4649aa69b8422ef096d5b10000007a13018d350406e32d12023bde818416c1ba1d837e22df68e6cc4dda833b872521d7292b5c00000052b94f0c41b5ea84e799623440374f8a5d447ee6d2b7c3055fc32a5f75562ea4e9d1127581b551eae06c6accaa99cdf5d280217fad02d2cdec4842ee2e51790406d3cb82bbbca57781cd57259d8d87f78693e9000001600000006a142a679ab6e1bc1bfa39e11523e7c55498f1b20791ad60456253870357dd86c444531d74000000426ba9b970504f6df1ff25ff894542cd8a764b01d6174f849e2f0f44d8c020b0ed0d75fcf8f59a88bc3bbc9c63832a37eb2b44a2e6d19a28b811b81a6516792e58b341000000ee1ea2fd1d20c6664d10bc28cab6b2ccc9649733ab8e159fc26ed67ce6f1ebbaeec0ca086d000000c6a91b3b3708fea3f43a74aa4f330e2612af26ff587998ea92b55a6db0911c98c0aeede0f5808d5c8dd9fe4f1b40813a2c811b2d85d06e59962c3b852b387b95e73329e791e02ac6ff35cd89e0534053880e52b1fce1f4b9e43f2299278211b2d0996d953c2ee6ac388a874b095b9b7afbb34cf5ed29dfa0ddb3ecb94cfa879d159eaa538488a0a0eeb1a2109eb0473d0379d102d0163eced465899199116588d75203e375940e42705cba51b3a5d7ca039114f9e20aa85b1dcda0df8da5f3edc179b2a035d1e6000001b8000000e426237a4f60473d3ff7ccc6a6cb5f1d794ac968c30ea8ecb26419a0db2bc3cae2f1e2af24000000bcb062fdbdc63bec9e9328402d76e8e26b27bd0b885ee44af51e2090dc3ef36f360af1e7adacf7e964b6262bcf327bfcdcb7ddefcda009bc6093844002551a33a47fa21924d7f348cc5966bd3eabb900b1c216f61380a26a5f249731131a7d479a72b18eda2cfe10d2f4f4dca587608f473c218d20f344749046c96433b1a175af4b07a87d069ce4638eecb069cc13ad52c5083aacdeb2de1f40b75b1a207962c0a5080564a640b063ae2138f8a94f84300e694ff3ddfc30ea29da22eb000000cc123b0ec16fa2c2fe7534f44a7c1f1f6c5b78f7a98bdb1809e5369ef5a3830368359a5c30000000a4541fcfb226e5ef28532ea338155975a7e36fbe38795fdec2998fd58a215319fa4cc77dd97b5dfa9d84c18804c0ece9cee0e4069edc29df32678681d36cea25593ec8879f46330bc71467f4f8c017c1b013a40bf92255dd65d18a08ca91b656cd8336d335e91bbe2934cfb843616e6f029cd2311165ad2522395f127a09dbfdc88028de578af77d2df9134a3edc31c6c3cf9f1c985c810224b9b8d85b25ad76bd42316ca5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a2570e1e3701f4d2fe25ae5dc1c68c960df9114392e97487d3cd12dd9b5d317f8baa024fb9b9fa92b2291538a539d311e2585fb32278edcf24d900c7789269a09549a2b5ea3527c3edd26d632894512d8503c778dc6a490c288d0ced6d8efd6f44f1473c786a373f470906cf87673807d796af040f695add3afd32e9207859b9d49e803e4149e6c2948eae1b5a50972eebc13a7c0a687e5749a9cca918a1615e68915bdd5858fe89cd05b0d49b726b000000b018de35857e0f419d1a3ead4b465117ba3c890c59c1ed9191c9c3291003f56697bb1d96f953684f32e52e429ed7e1afcd7abf9aa818ae1c2d692fb202b859706f14b3dba6c60108ba78d0d70027faae12575e948cc8760e0a9049e60bf99205dfb4413f1dc90d93be810962074d1e61f52d11cf11a1b63c3c58a43900d0a71c2678211f4e69a764a981b21f804a77b2df02f13500e13c72045d0f43feccf6a159222b7837f9bdfb722340169601814205000000b00e198c9cff8f270d1d60932deca0e07926026cd0b04c0903487b295bf7809df255b48ca5650727265293d1e0765f692e64aa52d28a17cdc8ced83fbebb96cfb477869f99dfec107b25e75b3c95608ac843f28c8e075f43b49fdeebb80b1981cb2d1f631399987e6562a8817591314a8c085f6bedcf2f2896b6bb03ed9a97e58a85c7eb4a1c444ac455c8b391990fec08267c4ba97af12c7e966cc7f9b975a9bff138fcb75ff26f0e1059198b6af305f80000021c000000b0023951f9f22b58e56d3f93898fd27b2c841b8f1b057c2d79bb465ccb17aaf405ab960e09a74c49627cb5616fd3eb72799f318591515a8f89c96e2b217d48fab693cb7b2f398e424d04afb1218e73632039113a5b40947ebb6a099ef5af7fb8759150de1ca2c1e97af9ddb7c269a546e123ae06f4b4f7febcf17da94ccc54f56c596aa67df2482a744a3138450b33c0931bccf55b2590d689b7522c9ba0f166f4471e4d047966983861a54801f1137b6b000000b00efdf77bc3d3a494eaad31b66218f73698d242e16082f30bb8d18d5bc25bf2847991824de3fc4640a1c1b49a2b67b7308446dde2110bec701662e096780ee0bed90d5c798b573c3a98f120413f68b35d25041ff9e454aa137de31e67ea1f290e073ee8f6441478f89cf80cac66a310941db9f2c7d6a531cdbd2a772e0b7faba6de775aada1149c48c7d8c49dc0bfd3351b6646d3f3b2ca6d769c149fce2595cf2af9188cf4108141c096cd57badace19000000b026050c122d1e4ae2bc25b049dfc65038d7456aa4de1f37ee0f00834b503ecc959fbb0f84e8dcbe88355c055aec73719ed67b244f8bd91dd41c754ab3107e647c0a711d05b34d6376f66e8ea61a7036d44fa56c5a84c803d47c921ecfb126cf3e5bd79459bafa51ddc5eecfadd1b6a160284ec0f2badfd197059e33cd2779e5d8ea5e545c9bc9c70ac6f167b2cc12ba2519222b34dd5009ba90f9a62db3d28fe0a20b29a455e80f0803362ea93e374a010000021c000000b023f9b29b67de5928b813626dd3839543d23bfd90fc546c1b2b94c47cac98e7a91f670d0e3b0f38228e30d147c0f4f33a7d70a7814adf43df4b511dce47d7cbd6ad892ea9e34720a7aa1e972ad8809255fa8640fc1b3865397f44bd1d21165ea8e0e87b266693e4e5dacdf55a92b5c1451637cb08f6e763b742547902112dd3e1835c7e48981fd47c0a0c26fec1f08f9115877a0f42066212aeb9ea1734056dad89c73f4af1ee4eb4a19745f4b614ccd3000000b004466a6318698635afd6e60c19b8148091f34082022b366dc642707e0ad8df4a99ebf72b82f7dbdec1cc2382132ec761feda380d9ab3e3de2cc078ec966716b506fdbc981b6de8bcf73b67d5617cc282d7f8d51c9b85cfaeb715b72c42040292526d904ef1ac8ef654a75fb07524052e1202a30ba2f297885fc7612c75d474b3afbb82499d2f3b5de80eec8daa8ba3222f5751ba5a0e413089392aa0614c9e501aafc0a06473ecb5af8e13925be362f4000000b0064cd1c3b8e8b0d15e6265705ba11690f2480d89d298dbf93b6b2e045094c8c08305d48af50e34a4f6ec1a941fdd6ca1b666151965618a8776361f56bf7d08ca1d87b49a5da3edb8c80c6e4320e470a8e0a8815a7ab1784f44bee758363c02dc9e572a21ecd1b9ae8458ceb377007d711908105dbf2d659d83b1b6327447b81907ece0707484ee0ecead9927b00cc8330d9f03b283932c94c105a2db5d3a9445cfc55a9035c1e1a8ae8d0237f642c89c0000021c000000b0044c5b764cbba19ea45e17804cef8516b4a2d1dfb659782c5f734f9947334e7f25309cf99656aa2d36c787bec6e406df1b5be655ef6de066e5b23789eda4f9471b8443f0177bf42ba3743ce8db190a1c585ade1016cd0c8d59c028f9823cfbbff664ece3a6af269adb4343f566e93269044efc214928cb5e25c7135a12cbb541a3d824d857dced82d76c76ec1b7a63ce27ee659a45e94d8cef8700e31ca29631b85b77e7b3da94540c6d9adcdb52aa9d000000b01954e5333fa8e85b0ca6766884b963e085c131545839261f67444737bbed9cabe16bde89f434a283ddec0840a6329c9a951a816909faabd6828cad28e75aecd67c3d29c1b27f9e04b86acfaf1c2cfa49de62262ab0ce6ac7d2b721232328afc560563e690847ecf0ca18ec08c4949be41b96001bc5266e9cba85aaf3c5045e7b13f42a1c454f541e03ad944c1adb79aa242573f592a21533926e11a4b6fce488bf346a4fd8e24ffbc626a58bf86ac63c000000b02de8cad17ca0fb0865788ad8ae66c5d7a4c8310bedbf0a219c60194de9e6bf7eacdf8ac5e50a3e86bdb56d6e0a12a850c12ced7a19665fe2e18af942e2bb00e7af5e7e120a8b574c5cdd26fc7c223d598b9be0b451fe8ea74eda49b43037cd98a3705720bbebd6dd64deca163fdf3c852a16e001fc431e3bbc780a0e1d42f5889e21a9c76c6e232b3f397b04e7c995212ac37d68bb19ef173c50e018f1379b9e9eb23d4217026d5a19b554fa9c1171200000021c000000b0056a2f6ab7f1d6514711d671148c93560d6855c8200aa6cd353e9a0ebe8c4eb3e60751fd95c3a1bef9d436514ce044fbe30b38b46d74a0312b213a37594e09e729bb1b06a482549e216a8628a0c6248204e1f6a3ab2be8ec73bd8d62dbcea62083cbe118638383649cc0cd2d3e855a2a144a08b28fc26e3815d20056b8103a9cbd735f4a8a8976b4e3d7a7e224bd0f9610ec99b3e5be1866db64251fe4ae07531eddee641f1000dac9e91188a33587c6000000b012862a105817d5e8b9fd001b077963e9c3b95ac916b83c8a958929419157854ae5da4e4704e0a6e6ac6fe1aced358e45cce4fb5b772a2642d35f53625262ee01e89f11b2747bd70c0d100975500b7e7e3a26443f92c4b86c721bf34b291c5c1b326c678505b79961de4f7ec18c6b85e304b55556ad9def7631c9f07208167768daed15a13ae6b104c0a2faea79cdeb530c758413a58913b9aae60143d15c41063b7715abf23a665a8a56f37fb2eedc3f000000b00eeaecc6d1af12987072bfe3e8e52ae0e2d267c0bcbc6b762040fa89b6478f5dd75ec9667456b67b0bf556553902bdbfbca5c1907b110749ff75e583e1f00d982c4ccf1c70425a9ee17ed6bb20d0d1cd54cd07de20afb93c4d51e25a97245207a45faf08dcba75b355be397ae585b434149b48647c01674ca4abbd38cea11a713294c0a1c5d4644aa4cdba9f4bbdfaac15a631b3eaee9d167f9942103f25995c5ef6b11f6736a45feb622c609ba63f9e0000021c000000b00374e0b29c5a094f20e996209ea9456f39b12ff8b33cad3e0852cdbba022fb322b9a2d11040317d6c023cb916a8b188f05830bcd96e91a2dc73cee40c59bb623e3e4e3fa8f7977b2c871a9d405dd971ba88165efbd303e6c364809c47fffd36b4e40086cc8e76f71b0b9d7adaf202d32278e56a4168d02c0f37a3c7fc162a2eb8d79bdedb13e14d354e867a4410c0f8428055c43968838e88b32ad473804a957670386c4f2f4035fbe543e769e076b69000000b0244f157d4dc1329ba218137ef130db59947934df118889b43a9d362af8df127b192cf334e284ea140d5b907ed06c79753e8c7bc03d856426fce45d412356b848a7f4e20cd1aaf7ba88f031e160d15df2febd3c237687e5b7b7815433054b2ebdf1ae3e5aa4e38ab5f0285423db43e02e17ed23af36c855f2762d57af35401c01c938418123f33c4a2c0ef44bcf3fa6572fb904c068064d525f1d24c1af7827e4ff3d06c511226e73c5bc4388201b6fde000000b00ec8308a45f792d709ee120656a561358391808271b959d2b4557c33f1540c02efb75d4710c393951e6b0979cde73eebf386973462317a9a62c299190001905208e622e246bc8b6ba4e49d3bcc3e138e75e49219da64eb1bbf40f83740f24e948190ec71d4ea08e3a37b21696a1f3e032bada960e85295b9495c6d69b6ad9af4ec5e91c66043c89a6e0f444f16c1aa760a40ef9172cd15ea91c4cd3fd9acdc21e757fd798d1ef7e3d27d74080ee671220000021c000000b0230b530550f1d85b92ceb8f9700b038bab1290c6741d947415e8ec4e72dfcaf311e8fa6e3a1dc862a1e3eba0ce9365787ad9b807aef4a47070515483905534e427f49d9606c4454765380d444e56b09fea20d73d94de65619243bcd8a1e728b85544206585175aeb6576f4c7841e7ba609faf94e848061d66b0d3cbcce1fb8c27c36181f058d679ffb126f7032688613070c0faf9d38ade608833ce9d3908118dda6ff4e86e481d2c82129401c394687000000b023f5f0f768dcde7362da46307c7448d004cc5b0124c89fc627d06c8a069d03d3c78ec4159e407cac7e3be5802fa9b89f364b34ae0f6462b6ce2208183e74bc87d7a231288b052cd7c6211472b2d33fc85bca30e2c93f04a6f32d8f557d1f2e08a5b0a59c0909a441f04f5406a8ec8f96239530ca1f8d3c1884d42e2c7db77749b6d4497ac442a6175b81add20931facb29ef3c395053f8e39d260889b9ca57ae3eb41625351e73d06913a073394f9057000000b022b0b5076b20b24e11836a76a522d572ff638153b8422200e80797b8b73f365ac9d322f4a1e4fc7a08686acba10db6263c1c740547619a058ed93319c7f4db22f1863163868b82fdbc7f16f004e5348969507f9aebf68517dc1ceb63913b8f5408241440a3b686bae9abc909d09af19f1f6eeef10a73228f2437017979ec656248a7f31bbb54ef4a6e1874b9fc2ff7b003b643cf1d78e137baa5b826f9945b3ae9b7b181ad5b15ccb78541ebc245204f0000021c000000b0058df20aa9e2d419be4c85e2ff12f0ad9504f6d184b068b4a958ef6e1a106f7db13beb3d3fff4800fd5124d7e7914a3caf644f97b85b2aa41ef24cbc80456ac8e40f4fe582cbe47c0aefc80dfe08ca72841f92b2b140bb30a8fcb91a97c5528e793bd8f9a54918d17851cc29142cc70829ea267731f1f49378750d6b27419b75112fc81008cb9f2147803f059c449efd14b4f168cc483f5dc459e56ec8118bf13a7b05acdac8d1634038488577a0f702000000b02409b121810cef898432ac406937a7bc31d5d66cb134ed00e5e27bf2848702b8eeacb29474b730fa54db88ee7f3ae2276148e70693cb1a026c74f0387b8956351a70118bde8ca189516cf15eb2cc337f46991f134404687672f95c449a345fbea43f947d6c5d18e4694f8104caf7b1ae1098d518de03f9471e5c1e6b47e77435dcd541b4d3fa0b8e6bc617bbe46166a8130df798d6620fd55fe36bc138f276271d3a811751de32895cfa9cfd2219ca05000000b0185256a98a495fa1fe843337693442ea036927e8f61b33397ac732722b91b959cd1cfac9e5991972f907eed2005d693b9ffc0d78662c58ef2bd32aff1407a7a87503e69457754da59b91d3f98ff8699c25f585647e19b98397ba2f0bb08824d9657d6fc4b11d64fc82ca38943538fd712361d1b32af9628073572d37a6e7620b89de9bb26c1f3fdf805f312b03f6815d111a3ce84520cfe46b799ce9002b60ae51967e218f21f87ff57e170a5bb6bb700000103b000001cd0000010c17d9a481b492021682f9d98909e7826a8cc90130fe1dec54735faaa2e0edb5a12524890c000000e42c81f2011c27513d18041c5864011a88216a3f23f529aea49d93ff8b90614218e8eecc655dcb7de83a4dcb465805ee1f6c306a6435030087c1ed1a3f199678b0d2eabe48b9dab926046611d35be886a9b1a0fbe87c0b1088bcc4cef405c0c5b286d204d79200fe0a5ecad48ceccbc8a8d4f61fdadf826fe5ed11710294df686902811d6e9b26fab9d053595332793d950428923a2bf61ed6ba3c4519c47d5a5b42c4d7fef26c6c34fab0264a8dd21748319e47b207f02f2d2430723e32a16cf656e920929d71264f6a4ca594df091308cad375c62e188cd741bb2c83592f2ccffb40ffac000000b901716a4aa86886a1dac02f2f9ff903ef7191caa8c4d7018438ce0dc349f0e47893b7b38b00000091ac11630d5228ec825a616c0f869436d1935019421d104d8758fca35c2272d14cd77912733858c15eb73c93742f57eec908aa9242b9970856724e80edc22edd8d0466a746fe3c95a5b1f5b1076e8266a6e1dc42400c7603644d3d1b6d9ab1fd94744a5722da693b310687c24eea31c7e744f10be6ba56de2c21625c145d9dbc1d5558c022a6a8bfc093b69d389d3b660d74000001820000007d1e45d2f6a0adb570c46c5412de00213e2f81732f7e99b130d0f6bff4be1b479959054885000000550ff1549bcb6d4e77fcb6c743104c3b958a7518c0c436b0d9b4a2e8c79fe41168f945d5c3a6769775e537015e385f7771dbf43a6fcc6432ceb0b0a62cd30d82af8e1bdbd4224e69bc463870aea40b2dbb5bb483f251000000fd285f862161e85895d382d356c34840373495af46021f4afa250257b88eb649374353487a000000d5ba9ea72123a6c4817924c4e5f9a237892830508bd858d12f4584fc89fda717b82202eb18b619732adee8869026381f86ad752e6f64608c4372c754c9c05faa0811b90f453bf07cf05733d51ea5d530cd8ceff191d40ac290d1c6d88dfebd7bf43b034d453653528b84e827158985341090efa3d549882bc5040f225a9006a20e5716f70436f3d806bd3628b49a48b819d2884cd087dd9a5249be12033425270542aa445eed80d0c741640bd180865629beb4b25ebabf868f0f0ac95bd1456fbe178bc9a33b29db5622bc8f2f7faa666a112a9dcb3a00000146000000ff265a06d88459cdc9958206d0ab2fac4e7a46e0af7f05cab2743c6f12cec2b580856362c6000000d7f592eb6485998575fc3aa1d6e56abca597c09a0188a3425f75dfc24981bdf00e656e704d9f4acaf7792221606f72f721feec2eb29548e3603a99cfbb2bb8fc8b185139ef795c30994d0a299d094e4866a51b8dbf8eb6a26047c6d8ecda06c1e6acf4ff3cd76efc882ff17789919a19c8835e5d1161590b605260a361ac12c3c61fe4802dcfbbcbcdcf0856311c83c240bc2ce9aaf804e3003eba09232c762f7be153efc525f1b2249980bf2cf8fe5ed9cf6a663c2d1e69b174ef6a2b45fae12c1c60f29e6761cb69fb306653da78e4d045ffe0b18555800000003f0ebf8fe2ecc2fa1d8144e0c348121a3a63d2e776df0af769751782b964b8018e28f6fdfa00000017a439a84e099126beefb4ba799d8c47499fe450c014673b000001b3000000c12fbc5b2eb2286a6b8506f90fce96fb3f7aeba3897af7139b8e84ff2b41aeb8c686cf0362000000996911ce698afeb9b3590b863ffdf823e811c2920ecd69a5245c004f205b709fe98f42a7405bd38df252e7fbcb49dfe2db0b9d834ae5bd9aa53fade1149befc0f3e5d7975c4d33a46792b9e374212e76483cf0bcc093261ea9b802f5c5e041bf3028092ae8840a358d294e4126394639e3606b281187cbb745076354f2e579e37d725ea689273a7aac9f4507a2d6efe0f153aee1a683056c9f68000000ea16257c20c169a88630029cdb5e28301882ff5528c248117f82a160b09ce5ff96e0190713000000c2098e8180df0485ba0fa98a37704c3b2171b3e5a2b496f48f6fe117139694c21efacaa11223e3377c6349071ac1aa58dd438bbbbf123b790155e75cb925350a27604d2f1a67c18d05c18e154ff9cb2b528ca86c6b04a0be51b02099fd0ac04beabcfbf6ffe2d59d85cb02dbf1ca57837eb3b508dc8e49766bd93996d6a2c72b167e8d70ed0830fb86a9d9e33a1ae9fc19b7ebb3a2f584ab46db37bf44e00c70ca03f09e8b72e88bf239d31272872e33526c766886343dd53d302fd68f86566d89b01b00000190000000840279d64a70b0e4dd91fd0b11528966d388e11cccedbb302183f84ced6f9d3ae2bd5789d00000005c47c5d899c395459973645e2a74c0c05877719d0c8eb2cce957e1fc9d4bed8ecc8b86c98940133054f12d4b2b9a0d0eda463a1348d41511d40154becf315a6c87f737be505706be1636b493248f497cf9e1bffa902d5543573a9b4a350000010405e5b6e78a325ab2f2ac6261fcafe4bc47a73657384a117f377874853bb17da369147909000000dc672b2dab1c90c55911d058c819d65782724688d66307e099939073b53035481c08923754dd708c58090a41ca4c8635184f42263514f2edc33514f6cf5aca8d867fda0527d4b04762f38439cd23d084526eea66de5bf211e1830516b0461ad5e13304e5a17f5d2ade69fe1cf0a8972580621116c45bb56b50ee08aab66f8c0dbd84972c5ab39eeb0bbe3a4f54570ceff80f6d408d9acc0309f9e72f1476a45fb037b9475028cd7d0ec0c4b175f7b98ec7d56b32da11659696cab790329456d8ab27b9aec5ae031ce55700b174e8ed8bb9825c6a258d3d5ad3dcc597340000016e0000008f2f9b5a95e4aa90dab337a7041e29315a20745401612a4951309d1c5b35b76d17663ffd680000006746fce5b0c7f25e5b2969e2f373a45213a78bd63faf3cfb2ca8e2ac5a8b2b08a1ce2405d55919064e3a461fcd56bc01397c48c2fb81569a5336937fefb86e6aa09bfac91cad125594c353451b0219636c01b537714e1b5063696140bffdf5ad6e9786571c1b528c000000d7297ca6a760ce883db88931cba904becc703df116609368fc108573b5c50e4084384ee123000000afed263a4ec6335c5e8b6485ae57618e596fb1e4ff8c7f7c0b81de68c38912aa977a28a8608f71ad9a295c988076b68a8b9fc4888776df2dc88f5798f6cb944a1d5a9221fecedd873dde22a8f23fefbc2b6dd506a973bb3dc55e606d0260ffe40af5a61ec35dd5a9ab6490bdcad5b7680d82cc17a72599ff8d125a507ffcf302d2f44cdb8050e101a45af025c9564c6d55ad11461325f988d7f83e79faf7ea7031d0252c7181ccd15f6ba1665c4034b20000013e000000c4233585eb29fc8ecc2bf2954e2df639c320dea2a3e8e4abe7fbdb5cc7690eb21bc645343d0000009c906f15e6688470cf500f310904cbc9e4448ac2a1ae3852120439b0c11644de7acb7298836971ce8a77a721a2dacfd7fec0baa687e41f5d801aa03f1f80d562307fb4558e7ff0b837d64a98f98ec2f1e9cf93e7f67cd7a1e7eab7f2be671753c8c875597d0bd3df3258e7d2a114e92f176434b347d1cfba2f0747d88dd1b5c6508d369be5a4ef8242b0c02acc8aea8d36b0596cfcb4940bb3c5d7d4bd00000072059027929fd19a74c76e8b764417a6eaf7eb5d9a31cf433312470f02f892fec7e9f60a850000004aa9465dcad8dc5c930f65b92d70b97d23ed2a1698d4a5a3678d7070309e7580b6ae3abc5012e30cb281cef6a7712447d76f033f275038622381162b57f7c74997535c58382e71fdaf42a400000160000000c407e91711eba9202a469d942d2f1a0f1da43bb24e84764653a86093e182ff9610262f6a680000009cbb8d8480309106c8036b7f9ce3f905c23abb27ebcd12d2bc385e88ed2d7cdf2743be27ccf704bd9117631495b1b5d3025e8ea5965ba7941ba7cf17f7c843c74a0d9bfb48ea24270b086d819b92892bc35f3d09b348d4f4c4a840cc28dc4754b77d0ac994dad08a1622933cff2ad1e284d3c1e772c4bd53d695d46a3452329ad5503caa0c49e5703d7fdf912662473bd68ad1200c6ac159146cd3a1ac000000940df47f949b62700daeb58ee3fbdcea64237f6f224ad3f7e83abc20c882a8e6a2b73657e20000006c6ac28d18e6a96965c0d40ffe144b26b8207ee6455dbd5cd6f407cf1aff93e81e2dcf48021d3d2fcab8352f2dbf1609ade831415799870f4b1015c50a58c2fbb4ee328075d4f910da1287e592f95108cd684803a10587b00081f8c97c539eb39c46b9e49b191c0e7102f48385000000b0000000591e2476533b145be9f400bd97c81531cfc263082216506c0e5d4c18bb8e35f4266d3fcb7800000031c44e13a8ed5922c5500fe47d2ad6720018730323452081549a1fb3ec2e45597b0d83a4d4f46f91a4ced9de978c3a2c29d20000004f26c9d0fd67af05560687f3113bbfafd67d4be53473d0b64831d2ce353fa6a2b00f2accd80000002758350e3adf1a0a15a6a1c7b62698eae6b636e02987acc08af467a9c891fa7bb99cff518e193c0e00000184000001162c86d74fb28c359e14f251f0bb40b7c54a9cdc91b5bb2b9008f51006db2dbc520f08a357000000ee5d79f027992874af26d77ea27ccfd07e57d5f3f2be2a5a854d46f8ca5df3e2c3946cf0a20be758291390f9e344b88f8a7b240e908ab8378a456cf88810842e8805e5f36ee3f3a4d2427441592087028df60e56622444b3647502aa2365f31799adc04fe4ac3fb8f43e9f1d19a11d48099bbbfec3182fe89003a77f5cbd0f81430e7a2391f15a7386165378276c0508871eb36ae1c7906294d768d2d219083a7754b834db15c94068f68306475eb4ee6496020b6fe9d4ce71b5eec9db79604c96715eec6c398916b24f838688c72d676c22e5e3780344a13ab3c16847ceaf2854839c68b3144aff1f2f091a1706af000000661534b88f40444980093558fc4cac4bed3d7fbc9598af09ba8255fee19dba106efb9f2cfa0000003eee6be4532e31efd0dd422c8cd93b560fee35377712c92866f775a0cb795daadb4180f661b1fdd0a81ad3798a62be6e1e65981e3ea84432aefc6e8d6a3cdd000001f7000001270b56989daf809628f3a34ec1f6fbcc5d1ea50c533b536362ce24795935b2f5ca4a1480c2000000ff4fc39dec48e20d765f642efa0c45bd86b11c66c352866203c489b235675039e9ad235c936bf860661ad47e39ab73c806720d061327da1a0e4564658941726a284455e1cab7306ededee24ccd1caf10883968ca27f6bdbc8a6412c0a3ffa243c11a33cdd06a41752077519ac59e1b96eabd4dfbabb0c45c0b42f185ba7e1fb7674c6a68f925beee8b1cc8839141b6fe7aad06683a2e2879951443d6b5c517762035126efecfd4a445d877a5c219e39be25c339f9638b554676b9ad197f358d0fbfec0f39b137419192341c7e16a4579275fa6a2edc88fc7c07b0d02cd84e071e3d9734644b6a20d30643fd290a22d9a5551beeb7a4efcf728ed57606778fbfe000000c82fbc94b0a1f0efe01cd79b786d663f0fc588c517134ce5cb3bec5be3a0142498bf48046a000000a0db6294ea95d4a33e2958d922e7efdea814abc45833a04f0363cc1ad72072ccd4aa350ae361fe592bccfff827cafd9045af0bdd3d5ddb06991292ba775523b1a084479621eb2cce66970d9fa6cf2646fa4ddfca9137275152389a0831e25ce117d1d1006628585fd344d6fa5204dbbd21563a41ca90a3fa6ab458fe6796f14f578d188f436decb6b4f0dfc23fe67c5baecf2385d98c1b94ffbacb341b4ec4561b00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b02c78906d743f556b7e45e7c23b0c2b39a7d7e4c1bb3b56e04233dd271f280c019ada29b2a2db7f0568fe0484e122249b38b3c172aa515e0bdc2324927ccd7a2cb1a3f129239fb734a849a7a84cd5190661d036d0d6098190ba4a46cb799ce71850d1123486a8c6237217f2c8cbc6e9f327b417d4dbfcbec7300a96d3ced7313675f8c4d7638107daa550111f5418a9a51720b6a5646d3837d07debf410eac4250491850106ae8b3991e72c216bd200ee000000b027048ce49de31396e65972d4e30e18fdfe501266255a602e67f807bcaecb00c102322428b1d9d8de479a3fc974eda8df463bfde97f39ca6d2a02f165244b3490dc46d840f89f4bfd48c0f5b3b084a95410c36aa6f3dd5753bdaf0090783e8b55121df8d21ae74a9fe8d9909738bf2a5e16c828861ee3d230bc085c49fae496f46b31ea994701eb3c993701651a9299d01630050e38ab319307df9356c45a35676aea11b8c03038dc3f06e06ca0fa4d17000000b00d5414ca8f2b80fa841499ae221e241ef4becc804699753cd85af800fb11d55436431aefc747f26fabf3333b186c25cca88fdce59540d24766aab5e80871c940a5d63c72178ee2c4242b8e47d1728855a8159ba7206202ebaec7844f85fd85e91f2acb82ae5535116d6d654a0486e6472eb1a1e2566f58d470926ae16b69332146bf972e5629d7fd1bcdef2913f73a3c048691322688d956461946ab645a512cee5659c752930f768554b644458200f70000021c000000b00eeda7a6ee4b0d848b36e73d2b99c6192c3facf83aab22bcf84edfa1154572152d9c91c4a2e4ce9c76bdba7de8c1081f78937c11cd400b1d9da278b3c567f2ebf786f6735f6c220a90ea7cde5fb06fcdf8fdf0124f9612ae8ab946f87121bf5754da0f74e45c789354963d67facec0551b72a8c760e9cbbfd9cde49faef2c5faad421127a37369818fbc6f70c5fa279918c5ee5d574a750f0150003e2fd176a4c2abc7c9f39b7a43d3f009d71bdaf323000000b008197ff8a9ce32ddfd0d06add052c63b9a8ca637a4c33174a41c826743dbbb571735047bbc72faf946a536d091a5c632d97f64b2c40e8487739b9e627cd33c4a43a5ddf1e2d0097cf780cdcee9bbaaea0f2519d51bf40106f873e887a46c5948c298e2f447a3cc636edc28dc37a6612127086d392c7f5cdabf96d2593fc2113d07caff464f2cde326e749d62f09ff038270cdd44ecdef693518eedd07ea87374c1a53803ce0622f16a2975943e3f8ed6000000b0088e5cae30c252963d892ad1250035865c18df6ca8769e7b67337e4ba2551ebc02f27e355e81765139c6683d9a24cc41529ef0a037f155ea615fc1bc69c1df5ce661a92891383883f634114392aaf7487ef69c97e57787625101a7d08fc4910c979d74c3b1169ecb0ee2a13ba049ce6303f4e3fc2da8f998ad6261edde004a0d0ff7b8fba33e1826a10dfd156ee79ffd2fc5faefafe18c0cc10c520c2a91dbaee1bce8c9b706b3e75bb5c35589f6960e0000021c000000b02803c504e5d7451e4d96c3b15f15767e10c108245e334f399027529e9141a8d9a729aff994a08ed6a88153614f85fa8a41fe089ae6905f1eab63bb0cca23f5dae2417abe544fdeaad1ca79f6a4f7cde3ddbb2fdee5e64f7c5f56559746aca6e571aab7c9e1c0e70723f9aa048b59e5481a3bf758c0cfc10606c49984cd418fdcf7d09fc03c01b003bef5e3e6f784fae621558ddab0d0c6bc184495bb68f32bcf137a1a498bb6ab347a8d8602e1b82105000000b02ccb40188d67ca2892ce5f12104f0ee18da44e617d00a55b9b36d1ceefc8cfae2f20b422271f3765f8638a8876edce7f588eb782be883d470504c83c6b5632b3557f59288442d1c9d4c88055d72de6b39d9a5675f3e383f5a5eb0753a1129c3d5578656387e414ad38d28ae84ba6cc9119365424ad7db9965a3ca7219477e35a9b06cb117971a07f2220d6970f3d9a3f18989dcc8ec616dcc456f1b0a7ae59ddf9078479d826fecafd28cbd2746d0c25000000b024515b430d9794d13eae6e31042dd8becb04fbbe3f36888fc540c7691ab850c41bc6366fa99e9a910880cc3cd5f2d71976f9e07f9d905181118b64e6d59db9fd56d1d4a3d9c4d017c4113fe341c07d98fa3663310503b6d8c885ab5cb9d7367ccda43dac6337bc824e7dc3c4989ffafd057c8f475bedeb0e802333a20312c5ae669dfb456aef4a23ee7b5f16b892dcfc1437b75c28df5f373398bea591da351b0baf26905c1c563eba06bce1e68a3f2e0000021c000000b016a80a59dfe0f5f874fa4de74cb3fb08fa95ed70cad79d9b76ec570576b994ab97ee3ccf7864a03105e067906aec97464cba94a469c45831fef69f75fcde1de7d9db43dd483ed7249a9ca5ee56f4fbc125e19b81f3aa7bb123e3f5d16dca0a2bb5bcb8f4fb00874e66b4f094a8c1387d1d7824c0176969490d79bf21d6ab6fe18f67bef4a2a4d437a44a6d0e613f21761739b197ee17a3d47a6b9d050704cdb7c78c3bc7b57afd40c063c5f52bdd7e4e000000b0205208881afd9554d075cd599c9fe02c7104b6edcf9e18659ff3bb38c5eb18a8a18d1820d15f599b2c8499875fe301ee7fadaae8a8eb074f61e2d24f1d756d5b1ee7bda0b14b578c2478424edec5c5baf59b6a0017b5b17a885411ba6a85b80122e958aa78b408e389e881052cf3d100147683c69b11f46e61c66c471993e37275d4236b473d87094f1ac7124fd2fff603b2bffb142cc5f129e4724916424bf2b0227fb1f798c547db60ff6a33471f1a000000b0162ae1fb5940c4e9e090acbbaa16cb087222ff397276f1dd92ad00381d1587c82aff73a186234e27fe535e8729e9e9699361583668fae4681036b8bc5626c33e031649ccfbd993443de4e47da04c5be05bced4b15c4c8abfe32058a5f95eb75ef21740b8e9e12a11c32a4543928e71af29227b81dd71df2e67d616751e570d5e242a61286484a03355b965f16f30cb602e7b24d703be3ec37a1efb6cf4be8664747fa29e26ca6708f34d48ec6d278c640000021c000000b02ab17bdf50166990ed6c066e6d1410aaee45920b624716fc4660c91566eeec5a9fc4fb87c9d51bebf05d98151fcf753c026cd0172f90740d3bc3ea39c6436e2924807b346279685628885080fc64ff039e02ac0a2e52ef3e29c2743c4d6e4f348470b326c44b024bef95257e66b2b9f82414721e492b121e7c77aa9252e1d1b8c77d3383b6f59725a776d1bf7ee38e450834617ddf681b9f5dc492baf5827b8ca3ad37f95b9ba73eda63005a902ad614000000b000b851c055c5d0e6ae00eb9f8527818802b52773298191b88d0adc1766b7661c6eb019eeb2dcabe614adeb99137163e6b70b4d26cae56a05ec01d4f80801e6e04d61e534eaa2021916f3edd454fd6d03ebc2d31e7bfe4158b0e2ee3246132d2e2606cf9c5427dc7057b6cca98c346571058ad12371b36e1a7cd3647231deb6acaea80bb568d7a7750fbaa2e95f8aed5f2542ca421d0af798c7fe26cb86d3c41372ce593fa5cd6d34068983322304c16d000000b00b772d5e181cf177b5199f1b8087f3cd7169ff45b4c2e4462ef18db061dc2f257d5ce86c4f14f394c83091c4e6bc4c150f2479943339dbbc09f9e8091e6d53b4edb105dbc1632851b53dffe339248b0f357952bda4deaed6deb6443f2fe6e76b12cb5a0bf7f9396c950380e6d5af487e1ae7538622ecd299577e762f27035644e9d2d824c0e3f55c147e479702e2abdd28893d64a3d128fc329141cfa2521e381f3ca103bcad273f70b0c6a875885c420000021c000000b00a6cefc5c3092b87870a57fb4a54db2b01d416d0f3f54337a64168cf3773131f7412926e679d01a98366b7526df899e96cdaa86c0b7244a2fb1f32acd1d8f6bebe9d0ed1f8aaba4619cb6c06a2ac74ffee35e991826e5b6603b3d3f8ea29d4b151645cafefd94ccda42e72cf4c02dd9e2c0192d38ffb64b7a4d0770c586feb54ec529a680bb78072f5ac9800b976d16103b37253e43f28cb536db44cb290d21ccdfc273d87cf0583a53945dc89bf4d0a000000b01782298ca15548456387873c6d0e072fdea9a5f7bfb1edd5a3213bb8ad8e4b5c1430d6ed42201799fa0197f59e22b17d697552bcfcc4afa97e4385aa00bb338934f3707342767eec26ad51e4fc810d69171e765d5096460267d630b58e9cbe4eeb2f2b5e9f7cdebce3a9f6900175a40819158e4f668a229a477c8e7538ee3fff9f7158c0f167656a05862b2004c13bb9139c7250ffacfc453febf26465d24ec0750aece07242d6343b5e1787cd9fc4f5000000b00244a3ccd5f36751ee6efc7e9e3022c88e7a6930d24661487d327394f71509fa57154b06e05036292b4f27a31216a347018227282b92c282e241e668d0e8f043c842dcedc4cd427e4075530596eee08de8d96c1b2e713b2eb3abe48baeaee03a132ef34e7534c94b215210a11d82918623d22f58e9aed6408d32ef3ed995ab01a36a7d2153b033e742f5dc9099eda7222cac5609cc9bb89c1e3a824522e993f2a7977e116d036f29c8f47793c2e668d00000021c000000b019bde7c6d6b7ec83ab8a3d06bd28f045dc871c70029f037b116a826c8dd9f344d2b2e54e969cd66c0d0971b48673074f4788d5937e9cc6da321eae16c5896d106d60d188fa117b9f42fa8c38580d0771e78a5360bcda19867c1c56eb82089f1f870fc4c4fa1c5552ad30f9ec55cd1ad6106f9db289745b40323a0b42d722f54d0cac53d07516bb49777381e2c8c17d8c1c8e031bab93552655ab5a33ce6b943a923ea311b7fb680bea1539c92f278c56000000b00a1ebd30b7f2846a7957065219edc0399520ec46abb8a2eada35bbc212b9656e95262918257e34caa2666179cfdfa2c195d642a3ec556ec491cd28c22978b0db024175a2cda64ee54f07c88bf6d827ad02ce5cfc52098545a2c7aec3081c7d01a3f05c64459c0b2c559f8d29066dc9dd2eee63a51c9544dfbf3c1ebc81902dc3759e64878ad9492251dbce84a8b5b9e60dc4454a482467cbef1d072f56c0d47744d1a7d66cd842bb725eb2796eb9c2b5000000b00950cd0745ce61b9572001ef02b438a046b4da1774999db21771060be31f29a2f02b064c2946716773656bea88fe8b8ebc7c72b0ba415b8f9ac1509d9d52a62cafcbd4ac37ff30534b819aae04c3603bb669d6687663161a796b4c66deb693c5df82a43b51bfcd282e4ce391fedcaf4524708c60598abf00415c3cb73217b9552cb7b6c3b8b601d518113c9a0bd5f3470db4c2e2129ac80123c151bbc4de31a65012aa1d3f23081ab1e37ffec3c73f000000021c000000b00a7e8edc6f0c3d43f57dfa6880ab5e3e7e56200ba7a4d907711d10f1a28127f8b775092b56fcd173049e0233e5fcd23e7d73313baa578f8ea526d0876cfe1f826df5cf7c36cc4d6a23b8edcef75c11bd084bf647e858b32e0e4a395e6c131d3b26ee99f3bf3b9bc0952575ca6966604d1dd589d9e35063d2990357fa54d95845eddbc67b2d2d39d955833f577aa5c9f72b5fd4ff30b8590bff807e784569207215a13b15cfcf9fe60480bdc3eaa79e93000000b029dc8a0a9ebb5472860398281aa48a00ff20bc41a8b8dd023d3c2c6c0bf85da81102f5756f9fb8d26aea14603bc288e13155876b70ad4fc6841d8f67ee39f3d4a7f96c4cd4998bc031d5cabed8887bc1cff0d18fea2def9664e094043d0844fea792c100ea55e5a7bcb141a3a5ae4cca06f5d1d7a6fac71ae2ccf9e3205d972d90d90f6ded158fccedd68adc7ddcdfe022330a48f6d7303a45f3cb70e4beec873c2c39e922236e25bb3a0751bcfe4927000000b00a22d8825edd32ab623fd236f651b795452847b8861eaa77701c665bd9f7ac4d6b4a52f1f9b175ac0a1d995048867849ff2a47dec1e38b7f1ffc01f9f88377c634e0ad3f3d5cb162fb18281ed503244afaf790b87bdc62710a7190bf63175ce1f3670da4e88d7507e1a90d3767ffa021096edba0a781ab9f1d5464c2465b0389db0f461c5f91adf9d9342c1054996b1e0dce9b403c40a12a8f8923a900264540f9857ba72439e23693a6157f0a41235a00000cbd00000177000000ed2f5322d3cbd2d5931a584ded8fccde4c99175c3a8f2d619171564afbd60130b387f2d49d000000c54444b08d8f1e7a397303c0b2d937e1de7c424af3672d1c9a24f0d16e330ff8dcd5ecf6e7024cb20c8b056c0dfc41d218b39f735b347ede2a520bc09d514f3efa9c2546cb4c152ecd7456f9b51f2321095c56bb3ee6d0bdaf047abcf8a40629eff8bbd76504f59cd7b479f12b45b5d76dfd708b0533ec58dd80fbcebcc741ad326cc1f65666bff3801b51269faf5fdeeeb553674eb3c6359664634f0d6d965286b52df009abed4d9c1c1fec810f359c641faccd09ffe101e758724f5107628a3738ad07911800000082020ba8e8291c76b1bb5df2bc8ff3498308a42a707670c3a817a02495f91b40bdbdde152e0000005aa9b866a9687f33423810c1d11b08b53d2c77a0674a757714f087f89e03c295f5edc628b3934e32c3d858781d5b62d559d4c4149d1cd3b630ac2d4530b086d26f0ef6de92517ea15fb77fe7af57d87e3e55e5316d525943f20dd000000164000000fd26d5ad958c21b78842584f1097ea1a903d7bdfbfdbba1ab112e020a41387a0256b186444000000d5e97671f6d2766f296f47987aee693e0f98d226dbbd2ea01514c24211a1ae29660c7a2729b5e094f924dfaf97cf341db9586063f394fa374d1e12af7f50edc97613c6e29f75e1b7109dc3b2456cbfe1f0c226e0708c4f8e3ef9869c5f14e3accf5e17ae7217facda1e94b3dc5d5e06b67c10061b39426052029c0a14c13b52f9b14eef2a362afeac76eaa3a4110589591d88fc6ac96a643efa46fd8b34ce557136c8e96938fd7ebe3217b958762a73bb03ae71afbbb0c119a28e389f69666bb3f7775dd4ccc69c4309ad69a3751490075fbe0a212020000005f1113fca85a0b29077341e11d876332a1b87e2365d2e44d6aff0ec01aa3fcbf0cdb4d66d500000037df8ed7f75a947b506ddb3e45896c1a35d331f3a8b0f2c842734b6e31484604f258b7648743841c1f1a9efdfc2540836401251e6d0861800000009b00000037260b7b651356ef0cb4a8f727e7092bfaf55236319b94bc3d213ee2ad89e962bc66f34bbb0000000f95a66ad2f94be704ae0caf793ba0ea0000005c10dfd38fa707fbad7c9bc5ab0fdd156c541da800b1d1c763e2ce6077f9656741476e4bb60000003492ddcc1215c2522c5b38b8daf0a6d3682ad3a75717ec9f30762dc5327d2f41c2ea3d4c996d2917b5b013f2d438dfacbfd672f9f7000000d30000009817f2ec9bcc642e34f1e4c065ed45b55a0f91504295df40ac1a5cb7f121494df83b0551870000007017fd383b2d629063fc54e4d5677caef5a42385633a63a9dc2df4b37a5a61a21bdc6e81556d75080ad8eba3c8ff768fdb6ca1b52c6c40a51b97eb8b5fb7051bd3d428dd98ff7823881dc7134a3f75fb41c520bd82ab129c4ae158e314142409edbd83441b8142dd647768b9a9a6164b2b000000330a54c18405c9329fa25dfc6a293a5a0f030162aa4ac39975964af9ffab4c604d00b73df70000000bf88079fc99afd210cf24ed00000159000000c92b33b491a5e72d0d77be48b339678278f9fec7a983e0847719ca48322ab288a5983e3891000000a1c68b5ea4e1e8f6b95ee10b64237884d445ce7df3554dc2c3a51c9b1c16943d59ff7160bceb5433346e6ae8045bb58c66ed80ae208d01ee7bdcede3631206e79664301f9441cd4c9f268611ea9dc4fa996085a850740106a1f4a69cdf2ec6433f6368ef7deba718b8fbfb2c605424d8ca8b657ac5f2f72b479df02827e9df3a7911514b2de9c9c243dd7a995f2b05de69a18724a926db85f6d492a794a452ce30ff00000088043772c9ffb7336985f9216831cbfe8c1c46a3cecd801417087421dc829f906e5e0c66380000006026a68ec1c521b09c6b58215f7cf21417ae2a42efb276680dd649271ce69f30ea25cd61c6f2f138acd9debb80f83cb243723de7a464b353ab9699e205099d1573758efebd36c50d0610f4684445cc3b1a83b42921209ad2bd1b31cdf909c728bd00000136000000b324539ad433209063c818e3c6764c85e5e4f63d655cf83bdacb54bb70bd2bd168d57d10920000008b6b12842215905304a0de69079fa1b065f95a40e83d54e9ad213b094ba7cafede06e90c63012871620e3bd7ab5ed6c1ca532645152a0b9df73bb1c7410082bf9d70a3c7f36642d86048736602a9360a09f0a0164204478d768dda94e5551f7683e8576c53d0b7ca6e0a8e6a67d039ed32853efec4ef3b28463977a80639cd28aa2afd0f16a0cd71892ef4160000007b0c1d9e7095e08218d5d1da5ff57025a24188eff86451e4a55eb6cdfb4484cda6fe0352ad000000536024040f1db22da5e84d5c577d1db53083151ac88848736cd5dd011bfa53092454ad1781480670b650f991f37ebf28c3a4c689eadd31bbb0bfa56a621f09a6e89d803c226b31f1839331b91e6d88cb701f29ae000001c5000000e82c6044bc92eabacb8139f2654bee540f73e41eef5a4b35a5b58d88ae1821cd9fba988edc000000c0e851ae04d8646921e69b2b8098ff350a0b5efb70dd29fd1c768b5506445c8576b5c5b25ba7eefae68ddc6d8deaf3400ad0e5ce9c2547d9dbea51aaaed2b5ed2df9838a4864da4012c98a71f69fa0506f195900f2b477ad74b5eb89884120c28a0310eed3287b61d18ca8de39852e4c1f02c300f7bde079616934e0d1bd3d986d85f4797e841f41aeb2b587aac998fd87fb1db43a883b22481a9b8de4ffcfa6cedc8c41e24da004550746665d5af61782a422ced4f17c704565dc250edb711e88000000d50b045650ed047183d019bc76eaabc2208bd6e672ad7df3097c09ba03783eb95ec068294d000000ad800f55cf63b640705e1398f58f68f547502c0b67099c6132b69d343aeac92d9cc97ea92e8f075863da3d825ee5b92bbe73353d9b87dbcf8251a65b64792efef62c1cab49801bc660695af67c3da2c5357ce07fc4a97a2a81c04dd5ad1d9615883e456a07cd16759d21cd47cc36a27bc90cc931329fa73a3e38fb5884ea6bae988d9f5d9a3f7b9f112c4f91cf980a55012369f82e33ce109df79a0cb992c9c0b63df32bab308a8f265671c0b8ad0000010700000055227741e2c39eb8f434429d52e2055c0c18770b00931fcad22e344a60069140541ac6dcdb0000002d557f5b1bfd5ecd0e494deecfbb84bdee48985ca8d813894e157129db63c1d50fc6518aa7f6a92974bf4428140c000000aa0929d3aad52237aee9b0e38310904576afb3ce5cc792967222c6b8516ce10201ae2b1c0c000000823d64982611c6ba9162f6f5dfc726991d2e60a4366f1fb2d8e93bb390a3438ed624f602818e1da5847449f75461886e00d5503728997a478978317bf386424f446db4a205f852c05a78a72388bc50ef64da774fc028f21dc8e1becd78077cd9ebbcbd1cd7010539f6f62baaaa2f68882034bfae6fea70a63c88d75ed9458ba76fc9ee0000011c000000951a01c19559ef12f89e1855bad57e8c89f00fe5bc1ff6428903d89731b3a26892caf4689a0000006dc73f0091b978a46f94af4e99aac6d4b3da45b28c2245d653191210b51be933a3b6a75ae45ab2637b6b1b3c240622f531c1daf1c7f19e107eb2658fe7b530ad19531657b79068becbdeb13b26f460392fe9886d5a6a3c4af5522960b832ba8d5bde00782d3c46f7671f6b1a69ed0000007f07aaa09870dcb2f245fa3d22382d71fff5f5916e431f561287c6e9416c15a76c642657c400000057524f95e2c357d5433b9f3e8e17a040e128eefccc0608e67b1d4ea6fc446b05ddd588fdab9e75a685dce62f0371837187fb47437b96d067eaab2dfbded1e3103b48a79739757095b58227086c7ad0d541ffe00b52564f4e000001100000006f18b08552aa73404d6d51dc1203466547d09654ea1ffaa11fa07f61c59e2d995fcb44a3b3000000471d20e554434baf94a2b41cf6b32106415211bed84f6350559bebbe38d68e2adf6b4ef45859bdbd0d52e2966606fe0b40320272927d5794744e624e7fcf1a3aa19923c557c5061b000000992e5092c55038fe539347ca410d4f36404126dc8bf97a709232c3c56f6f9e4f971496263f0000007199cd566efa125b9a70de36d83aabb1d79f8a76f7e905fcf7e31086a6f03a7b79627ad2e8dbea975a9ae2324df48f6a5d3d8c24cdf9a3d871d0d108981a5c952191de97b1d732c3265ebfa0158ce183202b25b791d48bc8a359a68c9c58aaca283afbee6e4818eca06d4bc75cd5750bcc37000000c10000008115003ccff43d3d59e3f7dd8377c7c2de95ea51b676d2df4a93fcb5162b4404bd21da798a00000059166711105d9f493165ffb7e5d65b8b3bc2dda3f2d662c4efb0296a0dfb829aa8b014b16c6d2ae928385197e8e028eb80ac05c3e8c8614660bad2b650359aa5633da11fbcc9361a05ca7eb6f377266c9e9a7aab870e0389b5c9000000380ed54ae14d8049d832d491f8fc3d0863a74e931ffede2bcf0a6fa7c98c7f9be2803964b300000010b455aeb2504de3d5001b89d66b590890", "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289", ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, -<<<<<<< HEAD - "txsEffectsHash": "0x00435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb981" -======= "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "globalVariables": { "blockNumber": 2, "chainId": 31337, -<<<<<<< HEAD - "timestamp": 1711538313, - "version": 1, - "coinbase": "0x419f369eb60187f6f2c319ee70c886d95ef96899", - "feeRecipient": "0x0a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744" - }, - "lastArchive": { - "nextAvailableLeafIndex": 2, - "root": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc" -======= "timestamp": 1711947319, "version": 1, "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", @@ -75,7 +55,6 @@ "lastArchive": { "nextAvailableLeafIndex": 2, "root": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "stateReference": { "l1ToL2MessageTree": { @@ -98,12 +77,7 @@ } } }, -<<<<<<< HEAD - "header": "0x04adcc87ea999d86b134e787dc07a782401091d4c4469ffec75e243fce33fcdc00000002000000000000000000000000000000000000000000000000000000000000000200435424953966ee887231b69783fe66c45a27894525885ae5c8ea6925fdb98100212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000066040089419f369eb60187f6f2c319ee70c886d95ef968990a6d5065560895ecf055dac3ebb19adbf798caad0310435bde3bd0da29fd8744", - "publicInputsHash": "0x005108b1cea12bcef5782815e444ca9507b2f7afee3b84816f0828b434dd5dec" -======= "header": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac000000020000000000000000000000000000000000000000000000000000000000000002005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e828900212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e37d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", "publicInputsHash": "0x006fa981e1daa5d49ddb2d414800a9ab0be0999b2e5497f21715e7060bd6b535" ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 } } \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index 2324f787075..e819c7b325a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,31 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, -<<<<<<< HEAD - "txsEffectsHash": Buffer<0x008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b>, -======= "txsEffectsHash": Buffer<0x001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", -<<<<<<< HEAD - "timestamp": "0x000000000000000000000000000000000000000000000000000000006604011a", -======= "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a3e6d", ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, -<<<<<<< HEAD - "root": Fr<0x1cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c>, -======= "root": Fr<0x104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -72,19 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, -<<<<<<< HEAD - "root": Fr<0x2648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e061>, - }, - "nullifierTree": AppendOnlyTreeSnapshot { - "nextAvailableLeafIndex": 512, - "root": Fr<0x262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831>, -======= "root": Fr<0x13b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c3>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, "root": Fr<0x04694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -369,11 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x0f8dcf6d14365a378dd589c92ab8eec9758bc35ee43bffa2938e4c89c0c0f255>, -======= "value": Fr<0x1a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1916,11 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, -<<<<<<< HEAD - "encryptedLogsHash": Fr<0x00e48b07fb4a516e8d49de15fb773bebc5dfd1a2b15cd0660ed873f986ba587a>, -======= "encryptedLogsHash": Fr<0x00c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1928,11 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, -<<<<<<< HEAD - "value": Fr<0x1123f591d0696bfcad186d783b617b44b72d81c99c91bc2b0a64d699639366af>, -======= "value": Fr<0x28d23cd3f4c08daeaa0eea08676686f6a3b0c266aac8925de6d6cd2213c17ee3>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2159,20 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x0ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce05974>, -======= "value": Fr<0x1b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x20562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd>, -======= "value": Fr<0x14486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2621,11 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x29725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9>, -======= "value": Fr<0x07de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640>, ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 7aec2f6ffa6..134fb159e34 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -26269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c88af9f8c44010018d002f1270bd69fd0e3a71f9a28f1af98f37436199dc798dc937b152f572b5b00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000126269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c88af9f8c440100000000000000000000000000000000000000000000000000000000000000000026269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c880000000000000000000000000000000000000000af9f8c4400000000000118d002f1270bd69fd0e3a71f9a28f1af98f37436199dc798dc937b152f572b5b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028a3036475eb6e24127f3201380d9fa0ab1e766c43366322ebc0225b581684e0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000126269c29d671a5bf754dcbeac946ebd5b0154915627f042f3334c7f76bdf7c880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004004a9e302a704ed59c22bbb8c1d3167f125cc278f31b171cc5adc948368070c000e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2dfbe2854c9bbbb5b3aa4056976697f5a48ac83cfb019ad91bd51f05988f94e722664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0890b964b33e04b49b13b7dc77659ae081cdb2fce7efb7bb6313ef5349434595a9c11bc91940eaf4479221a33412e50c0a79b794ae47c69de54e85ee050f0b4635700000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 1be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c4401002588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c44010000000000000000000000000000000000000000000000000000000000000000001be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed10000000000000000000000000000000000000000af9f8c440000000000012588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d38f6fde0427101df4e778ed294bf222b735c885172067d2b4d6967b6a7c8c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fe53a6ceaf194ae7c61b757a173982685276f1dade7402c02e78198779ae0400e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921b17810bc097a2bca3247690619cb3215d116f832eea2ec8d844460fde2fcfc1bd86d85941600496c74f2da2ccfea9fed69dbe88d8a73033097f0c4f7a44e8400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index dd7cc53d8f3..8f8f768805e 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8dcf6d14365a378dd589c92ab8eec9758bc35ee43bffa2938e4c89c0c0f255000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb8540559ba31b9773451d62d45c14b097f80e29eb64161c1a05d4e4e7dc8ff11274ee664322721303e953ae2c580578d2fa50f9a1e1d831da4493204c25f90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c000000030000000000000000000000000000000000000000000000000000000000000001008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e06100000180262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006604011a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000177a85c4dc6dc9c76064717223743f4cdae42b86d63c30ca0d622eb8bec2c8371509f6ad3b84fee47d09209961229d6f46974cb859fb8082758aae44d8943d8b0ffbb472d0d553b7271b99470f66fd287caa19b085aa87a7f8dd909a7b7f688228a6d2a3039f54f9220131e0a6802062bb654a61523d2212c7b47500860802b20906bca1010011274ee664322721303e953ae2c580578d2fa50f9a1e1d831da4493204c25f9028a6d2a3039f54f9220131e0a6802062bb654a61523d2212c7b47500860802b200000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041cfa6b8f186c8ef10df875daa86acee095442e53eff2049b07aac06dae9e594c000000030000000000000000000000000000000000000000000000000000000000000001008c659e456d67b576b4429ecc4956010f1ce0c75169d730467359ce70c4db4b00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000302648bebd0e8d566d7f9aa73dcb8f5f292d9085d53709d37bc8f373b1c3c0e06100000180262430f06317e7c843808fb077c0191486b2170fd656f770d11fdc9c8ae0d831000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000006604011a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0c92d90afc2a3f432f4ea45df87a4820bdf067b32bbe9faabf8f0bf557c85d9f268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed172f33f8cca31a0426d8a1b48e5f633705ea37c52a6272433bd3c13bb98609ed00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e957fb833022fdbc841e0192be07c55b1f2d3ec3d9d5933c566e7eca418a2b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001d33cb2a28886e7dffe6e29908fa4287f9a770bd5591eb4e0b05af7a0410b21c03d486d8df44f793ec2c180cdbb3835e185e43a7c9991695e6bacae04d0b548c0217c6fc6e5bf85420ed3b84254a5ff189eb6d11dc0d4ce911a3b03be3c6b76014213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e70906bca101002b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce14213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e700000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1b312d79c2f2b38b11da7a65c57ee25cdefc03e154410dbc0d1208de3c7d984d268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed025eb824626710dc3ec6f2f31a2006710f207dc284da5f52f0e5051871a092b300000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index a84e299aa69..38c3f17a77a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026b73c377d9c8a2c7f1b1947fec75a6e1efb872bcd85df2436380625b4f533ce000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce059740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48b07fb4a516e8d49de15fb773bebc5dfd1a2b15cd0660ed873f986ba587a006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000022c3d685254f5fa2c359c276469a9ee3ef91c13bbb6728070d9d2987b4f7faa08a05b514adfd9b887e868b4eedbbd68f7304e272fc563e62bf413bb1a836ab81e15761542cad4e18b04a0ef5b50e730ef61de1f6b4c88007011b0f330766d6a26b73c377d9c8a2c7f1b1947fec75a6e1efb872bcd85df2436380625b4f533ce0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029725962887ff3bf0f4bdef2b8ffb51458c055135bc325a7d55f130926a533d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ada888e73a8bf423579afdfe0083ce2e7b6173bf66714941164db8bbce059740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120562fb8bf0ed3f110dec03e7e2727388c7cab96cf9f91a6f48d71a9fe9c6dfd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002447f72d2f5d3ae9d3fe1e17ca75242eb186337ef31fcb56cde96ab973f4cf092fbb460516c785a1f63de48c5f9e685761c45d63441f9318b29aca93af532d240d438e2fe6192c58edd342c34980ed4c6ada2ac6ee418572be0f58050f2b21b619babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> a75c8435e6817fa37364d59414671b37c50ad7c9 From 2859f5f489f2b29303f546f0d5d32eced860e536 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 06:34:00 +0000 Subject: [PATCH 030/123] updated artifact hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 875df394040..877f603668f 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x0e5000b5ebf1b4642300adbdae8f4eb0f7d6a04551f797bcfd814a281efa277c"`, + `"0x2f281ca9a1c4739ed0da8d0d01a91ba443eb35007e266b3f23956b9bec5968b8"`, ); }); }); From 53918d94e97c669aaa6fe073eaad8f5dfdd4cd2c Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 07:20:03 +0000 Subject: [PATCH 031/123] correct hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 877f603668f..58d5b8910da 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x2f281ca9a1c4739ed0da8d0d01a91ba443eb35007e266b3f23956b9bec5968b8"`, + `"0x225f865e3ac2c7d1fc32ef78a0e7528be944ff60343eb5dec0a853166d9eb077"`, ); }); }); From 3d8deb1dedf74f35fcf05af573d88ba421fb71a4 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 08:08:33 +0000 Subject: [PATCH 032/123] merge conflicts --- .../src/core/libraries/ConstantsGen.sol | 2 +- l1-contracts/test/fixtures/empty_block_0.json | 10 ++++----- l1-contracts/test/fixtures/empty_block_1.json | 14 ++++++------ l1-contracts/test/fixtures/mixed_block_0.json | 16 +++++++------- l1-contracts/test/fixtures/mixed_block_1.json | 20 ++++++++--------- .../crates/types/src/constants.nr | 2 +- noir/noir-repo/aztec_macros/src/lib.rs | 3 ++- .../aztec_macros/src/transforms/functions.rs | 18 +++++++++++---- .../aztec_macros/src/utils/errors.rs | 6 +++++ yarn-project/circuits.js/src/constants.gen.ts | 2 +- .../src/contract/artifact_hash.test.ts | 2 +- .../src/__snapshots__/index.test.ts.snap | 22 +++++++++---------- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 15 files changed, 70 insertions(+), 53 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 56a9c39f401..c44b9c49087 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -91,7 +91,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600; + 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737b; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index a9d3f6147f9..675d3e6c8d7 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d", + "archive": "0x2ec0977983d142ef2398ea95a4f1c08e2750795110078a2607f3cd65a6884556", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", - "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" + "coinbase": "0x0212b2811e2ada50076fadf70d3a7bf79982e05e", + "feeRecipient": "0x22aa43e24dfb968e677f0fc80fa04ca214278763ff457e6a00a6acaaf6c22eb4" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", - "publicInputsHash": "0x002b3718c30855a31bde39a183e0e2fe51bf6de9784b88e35c31497d07dcd6a6" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000212b2811e2ada50076fadf70d3a7bf79982e05e22aa43e24dfb968e677f0fc80fa04ca214278763ff457e6a00a6acaaf6c22eb4", + "publicInputsHash": "0x00b434e034edb3d6b7eadeea80c101d3968600a2252de880d6d47713c7e459df" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 6a477202b91..704a6dece23 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x1205c7cf2bb5c9844379718633439676fb40a25c1a6bc89a36af575447ac8d59", + "archive": "0x18ea1b755ab6c0277932932b9bd3ea8fb1d35f40a4e770afbbe98b8528c6c694", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711947351, + "timestamp": 1711958699, "version": 1, - "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", - "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" + "coinbase": "0x0212b2811e2ada50076fadf70d3a7bf79982e05e", + "feeRecipient": "0x22aa43e24dfb968e677f0fc80fa04ca214278763ff457e6a00a6acaaf6c22eb4" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d" + "root": "0x2ec0977983d142ef2398ea95a4f1c08e2750795110078a2607f3cd65a6884556" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e5780b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", - "publicInputsHash": "0x00c84265f5f882a389cbff59702265345727fecbdf116619286e372c79457de6" + "header": "0x2ec0977983d142ef2398ea95a4f1c08e2750795110078a2607f3cd65a6884556000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a6aab0212b2811e2ada50076fadf70d3a7bf79982e05e22aa43e24dfb968e677f0fc80fa04ca214278763ff457e6a00a6acaaf6c22eb4", + "publicInputsHash": "0x00cc564483ed8b48a06f0c808eaf6b3d12b16b9ca958401cf20314e26c36215c" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 7dfeaff9da6..57245ebeb3c 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b01f71ec5b5c2293fc361459339250a294b05961aefef5446f9572a26bf7cf0418fd3c2bf927113d9803d211429ff46561bfc96b46135d956c3f366be31762015185c9f4e300fdf0973010189346dcafb4d50340190dd6815a1c05e25180c9a25b0e163c23f3e115f0b54a280f5cd4b0401e377115871bacae9d3e8f79515daea2ce3800a7ddc46cb223d560f75e10a6dd0d1b8ce7ecb9122d831e7e1587c4bffeba9b1bcfaa909e601ad63f82b5bd7840000000b00fc41764fe69cf93975e96cb957d6ff5ec259feb6b3c9792bcd566b71606731b97019a17048f88843ad29a1c0b008150225b9971a84fa8bb8d6738862184a8c8df869b288088484aa25645076cbb4b5c155403bf8aa41af248881223c22e2a83d3a574d1faa65d23078f9cb8fadcab32040757bec6481126fb3db1a09fe8be3ff13ba50b46f92cc37def616a1d4880fa208acfb84f20466eda0720fc7de75e1aa22e0a717b7699a4383d877a9b4062e5000000b006992faa8e0e87bafc477560abfd3d13536e49e1a9698e0673218c16ad3d99f82b75af083a982e40188c1d0f13cd7547c25440e6f9b393631848e513421fed037b230467383b109fd9936b2c96b8ee3ba63d8202e94a83c83a7506f2ff7dfc7cd4eca941dd7b70fe66c70cd315c9d1d12fb953696afbcd1290ae46c5af945fa271406f6ed0d4f766c9b1f27ff66a7942112487dc2976780c52dfc84b7263467a32adc00f81ce64ed6792f4fb12fae1f50000021c000000b012856bc6cb2f903f4e43c65586a6036dc65abbb528e60732b54badf61aeac47ff8e21248ec9f211dd7bd2e3cb4c2937d6e318d7fc0097f2de9e871c0077433dca261add840edf43d4c3aed215f23aa4b511f75faa8e8c1adccaa72314f2bcefa25bddaa611733532c0a230fb5d4a8a881ac57cda84f569fa37f0fd838ea7de8da8661328b258a573e442135e025dfd24088f4f98529167da8e41b3ef3092d92224c8b62f609409470e98ecc4b81008b3000000b002a9d921e0aa49de71e8ef2ff25eb658fc2b00034146174f3db9e76f374d22a057af381cc9757c3557a4e7a694dafb74d23cce3d16b2e331297bfd3475fa8073dd2dd94ecb31bee2624ae0d6e529886697340ce115caed2cb325764c98e6729efca24202956eac1f881f36d4615f2e3e271b05c0733226439f3374ae19a0be066a45344f373b1dedffa2a6f31d92c0e91b9c8407e4ba2ee8feba5b573c532fee5e877ce7602c22c8503fe3deebd9eaf3000000b00aa5c18ea087706af3c20e0662ad300ca120635e39a199e67d9ce8a7e8d5c443ab1c2b5c294b478b8d503330599f296731d6e62149cd7defe27dbaf2dfd8acf9ab68c06ec0d27229dac5fa836f608ced2876cd135c089f6cf9128bb434c7bf19cc3dcf5de2dbb6bec17712ef1e1f81122df5b29841a7eb7a1560b4612c6557131fc75448f9a6b1b3828e4058bb2e4bff28889cd7c4dd362d7cd0b53e40ec34a9a5f52aef0ec90b2dec2ea9b16a0d49c40000021c000000b017a3601a7fc9e0e2123491f31e4af06436912455291e7fb88e88a9eb2843e1a8739f5403d68d785d18aff08a9d93c2b9b41909d326df1cfa611c0bae5bd04d79604e8f1171be4defae6bee01a4af1c20afac3a58a723555dbc211cfe81539365683a6f763ec849f0267ebafa8a9effbf0d54c44f6207678a71bd92f66b778d859bac328587829f09e4d36b8d148dfefb25c643a241f9f307ec07f3f41cd09444b28b35d030c95b01d1801adf611910ab000000b0246c17e033e968b057f009fb4d1c4e9d91005f3febd36f16e453615c7c411be42bc3b3496b7f3267ab475aabe180ba6916d8f0a7da1a18e5fe8d00d69e95a0ae9a4d972f027857ef3818898ed9709aa2261cb8ae0a56fabf2e35ee1282952a962ecb0771df5fa41ce6655cf6131a7c982aad41eccb371c76c2f837318d747f19362296ef35dec09966e23af4a8e4caaa0a4c9ba3e87f2672b9ec7e78096913bb7fc66a6bfd2b1671aa87cda1bd9ee867000000b0141ccecf05e04d31964c4c16d2ca0be65047d1152662fe7e0b0e45766b8324258538af3a149a2d5c251be211a4f9863ec17adfcec419cd9f9b2a6eb92396da3349e4ad43bc7dbb9fe3d92fb081bb95e96c4352f277bd3f6e0d6348b3daebcb3151e77944022d27063da75d4fb9115f4000adeaa479e2eaed678af7c36f3f42257d9bd241c51c7ec0d0a0d641a77d8a8a2ba505403df2f461774b74098726ad5b7b085e2bb37a89a1414ac944c11eb21d0000021c000000b0164a956fd938e14f48f2f36912f3cf2e56c8df5d3330fad09aca62426e38adc76c4fdf5728e954b32b181c215f585e30ed87bb3a0a6dbeb99e81872aec0acd9ff1cbacc3943f5939283910cf1cd5d0552df75c09315e1051679c5d458851d4f301f5ce15e4be094340259538242584561403ec2fc3c921cf80f8b5c0d0393da393739ed85f9554e00504e3e7793290df07fe8cc3decc120b4e504b3010429271a4ae030f8a21539576e38557cd9c9744000000b00c34ddf5e80e8ce04734bafeb10813e31b1aed5d8dc38ff49cf7d4b59a5e052592cfd188f63232bef9c36b4fadd1800361b6ac9ec5c676812ec432d9b7e46300b72dc73cc634b19f55afba7fda63054bc6965a0cc74af7b322b37db0d93ffe4b61975bd37bdbcf19863e926fd2b59f2e1585ca5589aed4852f3cea64cd12233566d817be0baf696ebfe96c4fc68a253319be781154f53eb2c6b337d9cfd8b859ea09b8765a664668c4d1a55cabbc9b84000000b020366de2612f4ffe609e02136635f40022efbcbb1a6cc0db965c5c57b02bedf1346bb04008bae13bd13506d680df1b4c7230fcd6fc5661ca55e78abd28f2f6513aa7463dfc2baaf636b94764cca2e757e10cce10c57558e920a6c63f991098552c03bbc603ed7de68f426143ec402a4803527c2194e8ef851ab3ab28dd1dbd40784f0cd6a72973680bfb6dd07eaabeca2c3dc34e34ebef2e1998256210ea39b693219346c68a338a86dbb753c6cfb6bb0000021c000000b0047be4b53244ae6eb70cdf66f3363dd59edf718a3ae2afb30b1b0fd79d8d07bd30038d4ef8184cd0fed0a391d01c488c9c666d42c6a478e3d5f6908996cf1b81670011df255e7a5bea5dddb70d150e2e7d51ba1ff807c78b186621ad371b747b2c7eb19c2317d1efcfd555f763fc37bd19ea4388ebc7a20142aac995169426b0d1717ee1a5ae39019df688fdca28390820217b3ca5b30ec8a33b2d2e39bccb98392dfe18c818eeeadca5d0b9b4630b68000000b02ff020b10d16a84718fc1d9a16d1611b74ff473e90ca72f78f19e846ac173a2700efc07d3d085ec8f2de0afdfd2c80d2a1f98b2ab48d676a96d1e82f664d1f39a005d68be1b6b2a3bba429f593e012db4175b99dfc135371c80fc483b1024649091e02d4e5a62deac2e296d0c123cb51119065c09b46487e9e4448beefce42e97c4e7836420d29f5a4b0c59898081ed725087b16a485e4a0fa95ca9e15bc24ac82aab81f674e2075ee52a2f4bdd46234000000b018e0a494e75c22a724e72adaabed4a8c375a7a9b71f8fcb14a27d64a13ae45242a249f900c152bdf9696638a60cb7ed9783425b6b302776cd2e10c1c6d747dc405e5d3ff558961d9f63be8c616a80ac913a3ffa01927e04cfc3445011fdc5069e106da153e42375c9fc3bb66c1b408252792becf13c65943918b3c8d7c83fb10cfd8578c62e4c69853c0ff176fc32413187a16d8a753f127859aad3d993504b8121cc6dda0e3bc684e5cd201700bbed70000021c000000b02febda87d1e2e2401696e10eb213125fcba87abf8b680204fd7bff8b32c71a5f56f7e598aa697e5a95cef91ed9771ceaa04d82267409c4a529c5cb0fe99bfb6bcbb3f76291e050a7788cc8058a97f55d54dcfb5ea0279c01a2a0db1ecdb6fc5a06bb63d0f3813d479facf2121d40eca80f2346670675c74ef669a61b589f7e647f30d32a3b6ac1ba40b82d586b3dade4222d0580af2ce197dbd7355677a6edd46ae8efc7cc44de690a93a051f504822f000000b02aea775138060b0c09e5208ea1183e4324c0e321b02f1ecf61d462e0a930fa7dec246509829b729b2c663119f180f8a58d2cd328d3369811679d59f91016de03c5863052544c3fcbf2382382c757d304ee6a6b990555f6ec462e6c6d503546b3dd349bd1a68891992bb958e201ef93381747f6ee8c630bc0292bbeef2a1739b0a0e368ae042c7f185f2811bc592e10151e2d43d2e1fc9881348db7c6a254f86a19cdbed01d28ce85bf3ed251c8902d57000000b018c9d03b3298835fc3c6dff2afa525df8a912ca2e44dcddf320a728126eece0ababf5164e538c6eecec7305acf6cef821063a1f73dfa1e6ca41ca7a9221cb24f559346485031f5d6de08032e2f25996a370e92dc6b46e7eeb0899760e65036f70ea37807ead3b3392266494bf81c42ac1e5d3a69926e90776f025565cff8dee508b8c539bae4c2ea6458825bcfa4401c0bb66e1285abeb98143e1919d7f40cf443e5fa542a687af2d9246d4447b238020000021c000000b02e1e113f3668dff9f9ed9b65109fc018e370f61face03d88015979cc9c825a408abe73e2b8eb8579115c2951dcd0c11625a3e8917fec4d9a9b415032893556380c051efb95550fb1f590768bd771e88b5f6f04a677f238c49b0f0651d90215607dbc25ae32e90d82e4dbc1e9cb3c50c92172503d8dda5d40637c0b78f5ecbaa9fcebe46c1b8171191e187ee43669da1b22c342109142593177ab6d4f5b1b93da531786634fb861d38e6669bea3520db4000000b01f1ab1803275282016a5a185328f562f53d17a83045a1bd60a43c5fe55b904d24355cad459502816e88c27111fc44243c75cce161806d49f9cf67d80e27919365fda545cc54273837d1929500d00ea8c0f81a3780398882a86120fa53e3ef22bfc99b621e6700c332dd840598fad07dd11fcb07d928f3d532aebaa81d7109ac127b1921b4d1040109b030ddd788ec42a223bd31f36fbaac2d98f60fbf7f71f9de3485ad5d344bbe94060ba797b86c6a3000000b02bf21f685b7658a04d5b0cb74d626a0d36be5bc37db7a8d0b160b02ae5f25b674072722105b9e06c9d4d93f50c9e5fdbeb0545233da41e609075a766833ee4f08297c452f8fd881ff6fc6ff357a66153ab9dc682a88f1bbe130b39462f9c9362e5132536c43aa9403ab808d549ff05e7207b59921e4d811e0fc56a377d0a3e99988ccd3d9eb9c9b52b9f70ca03e18443234d67a9b835db64964e8b2a094f1c50f0497b300355061103028c5089865f010000021c000000b0047f78f42e568a04eaa697b408881d46ab979198f4ed2cb4f2d0731c8f58ff5a37456caaf633ee17d3e5a9750ce3d2cb47074920e17bf44c262b56c66db0cf02687f3b4133b0570efc476ba938e3d571e2a7287b13e09da43dd13595b7ddd23c83b87a10ba85b75c3d0532a910b25c5922adbdace0a148da2e5e6c6e261ca89c0010ed8adcb7cd873e27e8a3cf6f0ed301e72c4fcc03341c32bbd52c3c372fc96f1c5507b669e1c6e3d037dfd8d6f416000000b003d1fcedfd4259c7ffb3c838f4da9e22d229f46e68b612ccb1fbb1571c55ff234184b5f125cceafc068d6d3f70587827170a59478bdd1c747c9d928fa0e2d7bdda47dfdd75ea0144981f3569ad0c6875d89887928bc9eeed6e0f0660010a51337d47905b40c2747e3e251ec4a27e69800765a947da8a3bed51574d6338d3b3aaa70ff6add8b842a3c2ae88afd491363626ff44afead6913ba84af807864ae1704e87347552d444483ff5658416da3265000000b029721b57407b143c9085a2247b4823cbba318f4b71b92c14eb92b93632baa54b68a0d8cfa025ba205e2546c77913427e15cbbed4515c18ce7ec234d8d94e7d1fc399ae1f5e1e48761929434693de8867d5716bc2445f1af7d20839486b7eb3915b31e2f4e1b225e560c866142d53092800910bcaaf6ebdc588c9de3ee6f07693901bc625f0382cab06e61b5d3474e12b0ef24352b719cbc0f66837f86307550cb2458483a6d4092ded40c04a3b435c8400000d9a000000fd0000008a14e4bb55508548af6fedf5e8ba390bef413a23a633faf7fc0c8ca291521cd03e2dd4684e00000062edd557ae581443d7165335c93b56341a0931f14e658dabd73ab19cdd6fa8502f3900307a22387ddbde78542f8d33e4aff1a8af5a0cf76727cc3a08ed0e7cfa702034cf0bd7f687c16834db49719ef3a77fc8f57f211fa7a24466f1430951779116a90000006b1b051eedf94769007221082fbd567af6a30a9654dbc8aa8fabd02da3547a10afc3fed88f0000004371d086ae9f21d0208c8a2297f97f2abc2c9483aa85120354ce43642976dd76db521fc6a138c9132742e7d81eb5020483350523ed36497b428747b30fadc6c1edc02eba000001900000009e2f1de42d2e569e395248491d6dcf6a5dd9d2dcfb92704af7cba08bf45593cea012ada0c5000000766e277464dd5995d49353ffcc83d502dc8e9361bcbb7ac9882a62b9c0f1ac2201f3a6b319ed11788c2742ca18bf1973d374695c245a690589a25556a99d168d51534cc2f349462af3ed3e14330f5be06a591a875a4db26f2fc91c1e728d4b70ad7fba17a5830c42674acccbd6d2f38fe9a14c7bd501ab000000ea16792974f765c3ca7abf1b7b38c661aba42a7c1323317707545848ac22a755f63016eacd000000c25a19525dc82a4550515c1e02e2422b9f87e9298fafc5fc5615704e2a24b67d4ba7ee37e4d6028e957d17343e63885d29337e53b1a48f008379690985e45500661e600fcafb5c280a4112674e3263f031fe5ba8cfeda3808a92b93ee7579d44570385ea88993d63dab382574fb6683413cd87f2928462e916e71337446a6645d15498aa8392c2bc685099fb3241d979ab59bbc5abe191500e681c2d05c2d41cd368cb08fc9e6eb43927d78602dbdf8382de06140b26a1735ced26b6815370ac93524c000000f80000007d1c58d8ae23d6d76704625d9e91c769bcd48dbf55292c554651bfe46915b29eae899748750000005562d3909647bf97ee3229b0618515231341ca7421cf35a46ccbe80f1c5e0ed8c4fa68ea826ab23fe45b7df38e1cd38d70187eed6f6be4b6f6db6f7b66dc11007b33982172989e4a0b83c527557c602fd27cb7a4f45e0000007315fc948fb50df693238eba94a6b33b055932edf6ba952dab865bed8a57cd908edd5f62580000004b22be4d90edc016c12fb3f95119cc259c1d7620188ad16dd9e6e780e867ae272392873f9294c212e0dd1981ee1548e13a4e060c24403e41f07c29d7dedca9eff7a608ada7726ef410407540000001ae0000008209ee09a0f665173062b636cec323de3d22c4ecb07ae6215ac808cc7828ffa875933bd6610000005a28844857a2329e275d6e9fcf167524fdf015ff8c9314fb3bfa1fd803133c1994dea11144c125784133df01d584c466a2b16a9986d2088c147fcc2207c1e6def853caab102a71932d5decd159fedea1d8fc1a9e6f640376c234670000012425a95095ed3d30268b97aa1e00593510e2b4eb5d86677f92eefdcd10cf0a83753778fbbe000000fca8e2b33cce7f99f20fedca455ccb4187f393a826df51fdb518a8db364033e743c12244143ba7e68fc93d176402f533654797656da98c0a3528582995defb952831ea96517b41b655e0768e8d9d3b9facdda5b69653300d5d6f30a2b5e607c699b38dc7027aa9274acdb8f8eebeda77255e2eb0c70e5f1dccdb882441a4ecace44cc01712c20b21c73ebb680bb6c07daa8f212e4c50cf636e5fbc702eb1b8089537cfbfbd357a4e3c4f8da430518a20f25addefa923230385a1475178e28d148485843e6e714cad6697b2e9e25c4245dbd7de2254c21c52f0ca479c97dd81192bf600bc84139bf4fc37f8cadc986f9db9f3a9bb8233014f61dcef2cba000001bf0000008e18ad7f35988617e31647b265dbe068a65972271ece31d8df4a74b6a536febdd9f1145bf10000006676bb18fbe613bf104a898d2f6e310fb194283edde37e996c7c65a1de82383d5b0d844ac0fa37fde0777b3a41deb55dbe2358e2f6a201f8531863cc7193a53f60a488bae03d1954e1aaae7e9b43fc7325c7b42f98f6f97ca9d21948b974f45de165119baebe3700000129118cae333ff5fee1363c783c57703820d89cd1e93c2b55e7c6b6b689b17a7d187f75d4bc000001010e169550eb01147ebe2749f4305d445cfc71f9cfd37aebe2999ebf4d490a6f2479da4d753f6ec034ad7b28f71c29577782c329d3e8649b6f9cd5232be7106c16b1674d27d4c34b36eca713f35ccdd9e95b7f9adac46e3b22117249ebfbd24b0b1a0c61477113d9250b2c98e762e5189bf0a00229799ef776b7f7098f6f69bd19facd503e3d3f888b715fe1fadb2949ec0d1830d5f296e288bb9585f3404a593577c1a835241238bc9c0b3a23dcb6fccbc44dc089ad5c55d814cd3f249c07c130003227c257ab5fd5523e81ea03490e53ac3d46556ac94c4eb19e710e02e7ba82406af163c0ae214b50b4dded70c926efc39e20870321e571f0ecdc26c8bb6f74fe00000158000001030c676d7453503184a38376ae2b92b2f6fd6be741c328660ad8bff40375eac3c0001dc9ff000000dbe41a7ede72b31647886ee50aae0e29fe774ff6f429fd1b35ac81707f9b435a872c145aada39345fe1c77d9c3678e30f1668913b1517c75162cfc9b923c72d0e9c877a8aafe48a2cc05100d43198cff869f6bd4e793e73a089c0a78a843e79047e2f96cad714ef689cbdf41ea2dcc4248f22141b05ceaa194d4b97b49f7769dc80d53e7d9bd16680d87e81307cca5df2f2f8eee88e3432f8c2a67f9d64d507f0698e429336ea5f0d040955d90fedecce1cebce2571491cd2c5bf19493a436915b4e3774da01f1110decdda95d2766b1d6b3b3b2b63cd8e709ac6e010000004d2876c52e75b5df7c71064ee4e9a6b2319c5f36398fc0f9fb7e56b082ee9e725c02e3e02800000025690dd29ab3aab3e7e81e808f7776f6f3f45ce74bb95d6f086a6c92f4ff715fa61e5875f4d1000000f4000000481301f0c83c8546b3ea5e84865c1df6841479930e07ad1df9e18d373f16b27cb94c7bfbf2000000207dd3586549c75597d74b22c6a9b0777788a942542d46a28ee5300de55cf606a7000000a40d6f8188fbeb65a0bf8b2f94efa1c78fd05d818a656e555aa724598ac6256dce871e82420000007c82b760d3102260f7bc59daea11a182a05ad092c94db0754019990293ab9e45b1410b8e0cad0a427953654bb3c3fd5453e64b606661d51dca4b7a06156b15344bcd9ddd658afb825befc5d4a152024d07839313caaef488027bede19410bfc393abdb23f84274e9d016a357b1aef9bd47d07615432f6a1dc613884b240000014500000060060832938390547bc49e151ec9761fa5e01093d00726773a19cbe6af345b29006f144249000000382a808fef6d2396ec6cd41df2a36b4f843c0aae631ac996bd093124caf82fe3764f89c22f14ca3089ed8824167153e56a2a08a9829a5b9998000000dd10db2b74154f8a988ba3f1558bcfcccc82012f008ce4910a14261ce37797547656a3bee3000000b5295af43c6c9dac139d1a2d9974008ed63445ddd76f9b3046b68a294eae2baaaa72da6d5bf59c37682449b403fefe7ca58f42ebd329ac88f3f5eac3cf786e85aa8659c6713d9510d5b4366358c413359c6d921a43b4277d1ebe6ea4860ccecc41ad5a06eb80fe6d330e05fdfadb46313178b9f832ec29fe7961f63ef468f985bfcadfef89c950db8fe68165e8a3deeb156286e38af04f6d1e94937a956854c515f543058950f5f1a5a4b36fe2454567e978a96fa747000000920000003923f379e745dd7994529e21a7107781543ac240e6439af3e547006361edf0cdbc91d0528a0000001178009f83577d4378d43b68a0c2abded1ec00000051194395a61083e52831efef6a68261b5aca3cb86cae1c906172259ec5c01d2aec76389bcd00000029262adbb3f8b818c9b9799af8b9e99d8cee2e9f6e179e36e0354b7891f26f5797570d42a962b309463d000000ce0000003e2bc2a25a813eaa0d2f24189aa3dbb526bc5b680f1a79ee3905d50e730134de5f4fdc89d700000016ba61167c533f6f26c09e4d9390fe28b26233475a9069000000882a2e803ae31dafc0dfd4daacf30276f7e184aec66a5319917f13170725e8c763a2af2a6e000000600352d4e88df8a380a4ba9c68ba848030d5099439fb66df0ac17ca6c5f68da43f5816ea472149b5bacfabb3e9cc82dda4e12066390e5f01eb9924a1fb9e5b7c075793766b7e2889c1a9e7940f15d401f395ab4fa5e72f09a42cb37cb00a3e8c8a0000018b00000093298bba78d539a052eda2c38d8dd17fd2fae3c824991927a6bf3edd78a5db52dac0122c6d0000006bba3b5a19636cee8a61fe116f42276e74e070eb11a1a537a5e689a4398a04a4d83fb1deb938882f4ea68a0383133d2f340398aa99083ecea33396e6db8e47a71e6b25fafb3721f5a8024f4a7cdbd6dae8fbfcb83080db84d27261d7af92e4fbc6b9a47d2518816078fbe3fe000000f02b1d59d54969d8b5459691811ddab7d008239004023f123ad421b906fbad2759a7a0c9bb000000c82524f4d441fbf7c018ad904a9c6d30f26bfdd622b4f23d2b1eb1f7ab8dc2fa92ddee106b561344cfd5e7636ba2a11e56b0da1bdfff171a9ffe65c78423f31c457c5532ff84035109d62aac21e465f5f8e15269464db648c1c075339f192119b3c2f3cf4ff62542d02d90ebc571ded46faed47ef2cc720f819d2bce1bd3fbb51c96f96b73a52626b8d94ef0f39092144ac9a2279ddca4e8fd1c4a87382170129dbe69b299f15020715760d63b87c0e8acb1a27de0baa8ae756cebc265ddb8904a880fb32eecc690f400380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b0081d7e95baf6d35c3402f656b0a6d7f1805469bd1be8b0a0681d2af278728217ccc4ca1fb667ae515ef0ac6f7096e58a61ccc4b5b2a68270ee8b14e4063a0068658c52ef3e0842df098d0bbcf3e2aa96894f3fa069d772d66e557b55d7cc44dd19fb8c31791dcabca9f53d62cb8ff9a0210b9b9db3f036e8562fe750f8113cd361894c7327bddab3f4d20a8b0ae8c83a2e8e9a951d2bea777287a3217f85507e588e168e48f895f892a03390a3147f18000000b011a92c6215f833d00473fb90336a1a73868c088266f55c84eecc99738a40684a5c258512af24891249f8c6b89ad1a81b1f3611f9bd4964916b44e19088be1ad1e76e270033b3b2a03720a59d80214101094c15dfab9ee2e461d0765a5915989ca9aca18e8ecd332932f1d50d31c3ea9528bbee04720290b556c161a901c93d7754a22e71aeb68f080886c687c9a572252747d59b6424857d8fd767856bec527173b0bfc8b41dd38be7b78df5538a7552000000b011a65f3842ffec616b990f39fa6617a520ecee304a59d8af6a885786a03e4ac105447a8eeb41cc1987a476d7d5fc9c89c958a6a5a68584b7f03a04dd240e7947dc72f2d5a3b0ad0888d095e1db065c4cb25c8d7617a7e6037ab6c14fbd98c521690e5e9011aeb7e55439518b825c7f522cc8f976fa86cdebe139f891ef0abca66bb9a3318f10be0bb81039361ac2256a2ba93e045077c74d4aebf58b2a8bb0ef4b4366f5aa19bb08ac85075f5036c3770000021c000000b01b3a77ed158b4b85e6ab1fab8946059b88f504c6dbf7894b67b8b5dc9b288291c65ab85fff9e053ae5703da171e5a4e172311d0c087a2aaec14f3f4776fa63b0eb80709fc4c4cfda15ea36ff3a6f10b3dda7a07421f9338a8e5a1f33ed4faba985ec8bd210e7d901c979b3d44f8f3f0b1ddaf796385b9554b022d18a8afdc638d1110848222d8c43f384b0488e7f30612b122418fe30e00d3580ce5d8552bf93ec207814b3f5659268186461c91bbd96000000b02b1a31f9c13bfe9514e79c9f038774fa65daf095d813904de66856825ed4704287150f260eb49c042385325ef3720a7d8818ae59d0cea2cdc56d41ac38e61f274bd66cfe0e923a6a244b2ced547d99d7df778796cff97dfb12dfe8f528d73da27bbb737c7394a6e7e072b59aeccfe6311b7d69a11dda3aac926e46a6f5f059a2788463dfd6280ad9a3f4da5d6215e818243af1f51e1c2ac2705562c48e6848e3776661262abf1053266b18b2cffa1a68000000b025bbaefbf21703a36a7797455d2ba86fe049a58eeeade8c98126b47ce00e9c77841dcded5ac592ed87a8f34ae597fbc202ad95a3822173a4bb0c33d346fe45da25d840fce471154038ff30c453c230627ac09dc776c20d09bd07b693f5f43f080ce436dea05b2278a5c2cf7d9ca0e9382fad0465fddf75e6f58a9e0ae2385486cb7face0bc7f5f919a8dc5accd7d81030672b6c9bac08e63faffe2d40b4755413ad4d7fe0834867f46b277f72edeadba0000021c000000b00369a714bae914a042de119791b8df8159a22e6c1e2aedcf0f0e64730b91a6ea017c03d6f0ab19d7e2f865d17312ae958a72897936f0ae6b8ece7cfeccfdd751610719bf01f5336e79c7655d6e44db3f0d82e2f017125a1d2307e3161a24b74e865f4152f9221664c2a0661d13126672231ffcf8858c5d83e59a1a0ab4ee693175ffd7925533af6079fb04fdcb57e49e20e3299b69b71e43752d2a3285ab1114934080ed70771e3fe189a9a807250d13000000b01c3f8c04f6166352650ced76aa023e43f7fc80db0af854a5af64c69fde16595e6c6ccfb7d23337d8eb6d8d83fa52a768fae74656a74f1dd7e33bc5ff19d35533bc31d520aad74a5fca680a56664107e5115c281022c27034ff3c6426085bde04351b49a6dc8bad501fb024777e53e3b00195b3123d7c0996f42ffa35ef5f4ed3e2d340148e51d55809917713c88332770bf561425133a86d6b168568cfc9cd619f2130c620a21919d48c71d4faed437a000000b0043e8c896b9827baec0eaf62d3891c1660e7d0fa1d28aed67b579dd29954d190a124c0d6cdf80d22e435c10e72d0e68b03eaf0b27bbf83752cb21386f20eb88d3468e70c0f27584b8006089500add6c8c22302167549575cadde664de9366a2985f75d726f0ebc93c7b6f49ceb8cad13011c489257a530398c2091cab006ccfca42d3a63472a58622f4b15ff6fe6c2bd045f91ed3143b60ac5d2e1c90664270c277a08ddc9ec053b6f4905a1833c4f910000021c000000b00dae24c6dbb8d4115e357f3df89c6d33dbd672110d1106d77651d24b4b0aa6a2d309c1bbe859b8c40915f315d269280eba2a2b838b6e47245c384f861f3a1855dffb53129e39e31ce5b77c838ad084d7f98e47e7600b4ca07169f6d5110e017748da2e717b8c8a987af1a14b6ea394222f73b54e3c50c8d496c221be05e2abb5f3e9e9f0d80d397856081452f8eac5522f1b22ed8d9ead851f376968227419da0cc1beebc0f3962175b82fd2611f7009000000b0255c6251b5d59455a2c63fe2418dd6dec026f3ba7d6f9a98bb574792255a17c1e03796b54ba67fd1c5b3a5758e0a019269a3a61b5be316c7c52269732962eaa3340d17817a58ae8da38e7a847d7edb5345ca32f9fb890e48764f93d6b7da5f9a59cd6ee8b77bbb5e0e74d22764c77893140b0df5d0c529e1580bfb198950154736716592cdd4442e83bdcfecf284bd7f28edb3e792a6cddd80835345c8a142308850fcf94a1fde7c2e3d476c82658ca3000000b00cdcd79b88eda22ccdf97bedb0db0c802befb672d912b6413beaf08391d41f28a9b2a3822cc4114c824bbbde432659a9731377936c3be261c466dc6bc46f9ba536f3809a37c75bc2e04dd4990b74da29c94758849aca76a33b6301fbadf2de6ace6189c77214b481ba62a71b6a4f288f0bc5adcee6575311bc0a818c502f507c03a2ba695ef3746618e3751841e90c7901d11903dbab5ef02a6710b6e1a54e72b88cc449402f4ef081f6d3fc1c1354290000021c000000b00acd54425e1606dfe95705bedc4ffc47ba3c934bb7fb26bc22e843848e542fc07c24587c58c2d44e84868da47a17e5620e742a33a4de4d195dd05c551d82943473b7f31706945ccfbf9ab8d63c52f554ed4edd221f48d024c0d5f7ad5ec8c79fca0a027bf845e5f4bba1f762c101a1de0e979644124215dddb7f8b48a65fc5120df079b0345268359c9671d620f1e0532826455dcfa58d76cfd3a2f6919a0c082e48f35bd9abae1587c0eb40a28482c3000000b0094af06a522ba2ad0bcfe5df418346366f72c4d1c2402a0631198c76ea476d234998db4e75b70add9fb0298da3d36339f9a2f07a5a50bf59b15185f8fcb66117d28c00577cf35f5e7d878ebcd01603499d837aa50289e142359eaadffdea829a671627a48f5ca8af4fa5976c76ab90961c248d1b9aab3fe3e51f1b21cadb2dc57984fdc3ef9b192711468f70ae2acb872fe0754b279d9065043b0204b1c3a7aec40d71a65179085344917c36102c0639000000b0214c9e9c4721f6b36e811b7696f70e85b52291a7274d6c86226d171f4cbfa2b24fd1edc2aea14b690cdb3054c9796b0a3492ae798e000b5eb5cf6706a2fa3dcc1d64a630933d2354878d1ed4bd027b551599398d901dabb9da3c4b78cc36e32f740a681e18ef71f6b14015ea75acb6d3015562d42887051a1b6af550117eb739a9913743fa0e017c4ab53e15f22066f621d582b3b334885ed6b36dc0e500ec9cad34c4d3afef4ba877e58d5528fdfbd40000021c000000b026f3bc295281f2d12fbda88e7ec474b658f6dac186c03cc4fe7e08aac14e29eca8efcfc3cbd92961c22a007ca72d6ededdd1a3105caf3fedb449e39c4e3b5381f118c932b6c0be72c91ff7da56490f3536439f650a8d0c6951e94d6cd930439fe3fc568076f08d0914eaca89b79f289a0eb12379446111bc04944dd204f1a24bc137fa1d05c0da90ff391045880385b21716be8c1edbfc5d5c55e125b4d10560cdc93a006c1a76981f8f44ea28187062000000b010edc111750677293d058f04fc858849008e22e6781bb40e6edf262f6e2fedf3c7a15a91c33d882473479c928f05903ec7f72a6064c09fd7cf3029b66e15937daf90560cd18fed25e57cb2eef2b68b42a1fd026032757dd22d22abc4654ee0ab3e6cef413f3372ea74a3b42c23a2109b0dc4d8e803e7c7871436e4605b9ab1c018e61407c47672bd96d4f989b270ad630df2f474e2d7e52cb73c8232acf2869bc25dde7571b40897ae9eb7ebeab92e6e000000b0175b2cda1e5eabf4e8dafc2cd27002d06da5fa46c02834c66b39812550383a45c292c768b7fbba9202668eede0e055b7ab964f47047e069d96fb84cf4923c302e6ccf707008a708cef74a1b7b2db25d1f2165e2b78c0d4cbe22989ed5ec41b2bb878c3fd40eb3720bb171a64c839fa4a1f65cd6c6fda6df164150bdbed695133bd88a4e6970e84e153cfb34b10ad31cb131c7e4049026b2e140ab5a7b76a436c1efc6f98843386874b820691dbd1aebe0000021c000000b0005436c2f8dfbf1820cfa2fcfa48424ce773a82a01a9701af93487cb3157c4a48577189f62ab400f20a82c9540a1ca5dbd9d849e14b25fc7835466f6f5c73e32de9aff35a4a938cdb9962f96f63d7713dfc66a3aa82791eec7cc88f7f6f9781cae40b00cc56f802509b7d1c1922dc1b0287b0b2a6e0911f1811f6ae1ccc3c3f1b40cb207b2628c3f16bf2773c7df56450a750c74cad0234895f7d70f4d60cf44fa32acbfa71725b563a5ca6daa6cd741000000b020cb827401c97e77f0d1c93510df02aeb50e47e5b203628054357b2825ae05d56e14836994dc6c390ad425e73eb4717110f587c81826602086b10a0be5dfe3706b7ca9d20596a87802549c0d3a49e31bcbe282260dce8d8b6b598b9e89fa543819427e6c48ace3ac8305c3f582dbf38c18c8fee398a5673f5f7353d3ae36924b5004ac5a2a650cb77b1125f4849263aa07d1afc4418141ed80595e701ab72da97fadfeb3b2aa67210b39d0469dc70f6d000000b02051863b5d2559575135c3590bbe0eeb6fb3baf42266990d1f8598b1500e8362ae0a59f53a464348f1130758b7973de948b0dddc3e0c4f5284d63692b6ec99c67dbd04b29feec4f03be003a69152f8f419bb51855bb471009db513684775d5a6341b86a9a4e5d945b4c17830f350509626846e262fe259e255e93517961a9659511d59cb5c6d15758286212b324a544819789c5ae9c8e2518d7b2ae26db97f31e4a59815828e047cc7cbee0cf31bbde50000021c000000b012ebfa9306b78c99bee2a0cb69b4997fd18fb7fd0bc5fdcffe26d5c26b3334fcce327343f27e8cde1754c20eca86b8ffe4ad5ead132a3fca5dda3a40bc48c984d2b4744a6b2db0704b9b9c01deda09a43a9f9d231d98cd049dde5fbb5b60ee5f3a186f8e6e94aa8ade39b5639d8628f0190c9b62a7a325e7f0ac8b9101716bf3120521ffb110a3203d7eec873e38a4c01f2bb6759987fb34fb05d3dd4a6563b74f816271117cd7f84dbfb1a3bafc0cc5000000b0229389c85158bf3b5feca720c7708b2fcc5b1431d3d328ee4bd89ada7e6222e1b836c70dede217cd688f18014887f7224d923468d90b341f1ca0546f0efdf6ce716bda7642faa79bcf6572bdb56dd2449c7bf5afa33939843a8ed11eb27c8bbee97b4d259ae68272b72cbfb4552dc6171d8cf90f374e1ba72907a5ac68956b3fb30bbce63947035378aca7d0a3675ae5172936063cf3bfe2ecc4dc1d0088378e3f1796163d18eec7284c374ef571ab08000000b0131743e37bdd3c80ef7b881ec7e0ade15c324c2bb69d1c0d17cdd0d449b3f7cdafd3eb9b7030aaa4201a5eeb89546d183240bd058628d9857c7054f129eb8604d25365a2b501edf7ad58e8f0cb120446486711cc34843214145e694268c6d953d72ae0115f91aba6af3aa44ab584360728a248040512a5208d1b492018e57fb1e9a81db45afb9e0e56cda199d61edf2229eac6a92b03dea4571dd12e774cea2925e055711538f5bedbe48fc286f5272d00000f2e00000172000001152e7e194cdea78c6420f903a92bf0ede289727a4c560a2f90046641e0684972c90b8e23c5000000edac28b03abd7ca5c7b19ab6d757a08606c47e6d71d0316b15b1b17471d8dfad73744f124a0a1c17e9dc0f1d4a4699e20195f4e48fd7e83ab01dccf9b80aad5f02718c58f4e368b1cb1a63a3e5f5a853d65f159e23ee318528d9f791e37e4273f651bb7a6e803aa57603e67aca93ee063118aff19a283d8bd4d3892b5ad005be3d31a3cf7ed1d6de8f23b255f26699ddda343e9be1fbdad951ad297bb6872787b7312851c07c819360f44f17b9a54ee7d6340e1959bde5ce141a02214b1453e9949501d83284ecd0e8aa7e57631f63132ad8f4e7392aa61e4af4f5ff01cfb9ee34fae2456daa3bc545af5593b25400000055175868229d59afbab6447f6aa4c96cbf77945531ad6124a5bd524d0d7bd9ad880b95230b0000002d8db2fe5b4df329bac10df6eac0bf9c85c00c8b1d30ac32bbc3f0ffac8ff6ac1540140eda280f71e401fcc4db02000001930000011303b82da1d9255a3b380af207b070d31dc1ef8194634a56ae5316ab5559322abb65eae5c7000000ebe15a8e1bd2792e62f244bcca85aaf907b418edb4255914912068126fb7cb03c4578cd7e3c97988f1aae76a995f3132d65f9d48539479c6c1fde14031fa1f01b9ec0d04c573becaa843f861972ca7767cbb88cf37ea6192798eefc6920264263eccaa7f8ff28f45697ce091a255055c17c2289b82945c3b991ece66550d8388b659df12e9c5d2b486cd61cc226cee0568992c3d2fddf921a56f0f677d7d863965737f3609f47ac77ca27f52dd865b7cb3efd644025963d6b1d1f8bfd5974c48bc78bdf1398a07ffdb3da15fd857de7c4d10a0f8fc639c1df074dcd3da55badf73eeb6378e1ebecd765b07bc000000781989d82dcad7ae0c61f3b8206f934de08e36a7919f75c7e9cd1d338cf77931c8110b207700000050721b8f7a89de5e8c368f6d2202edc39045db8c2982f716f457c0137c038c21828af8a6a23c599dba974784ba28c2af414f5dc8acb9d8a7603d301f4fcda4eb82717f14e2a414dc1c4075df010b95ca5f0000012f000000331300b8ffc9a135f05a78750d599b64775305f09813bccc90ba56a0b4ecc6e03711086e5e0000000bcc93af235c347f1eb02996000000f40de69571e5c6fb514ecdbf14e09ceb66be3d226ce3d4e64e04943de35196382309d820d5000000cc5fb1d1382ccb5cd5f9b3a8d232685d4874a5e24563e4c658bffa16f4a9a28f7fb4510475fe6407a830a166b912c7e496abc911bde0fd53ff3a22043a806bc61545bed97a2e2ba206bd9add68e27733beb0385813040c9e60498a1dc091a0498aaf358280ec486fe7ea979e3beb501f7ccd118a9f952a789809a26f3abb2a5db6b06e56d51231225e992e5141fcd563c87e985b5f908fd4a86225bb377e3dfbb1dd2a0b7099217f84af856b3bb38360cb4635f5e3e175c66ed5202648cdd4927e50f0e03a1ef94e80759ce2470000018b000000920fec694a4e4e637e98a49003b00134233a36074837254358bca612c2df357a95b6fc0f990000006af3ef07aaf94deccbaecc47d709639459070d1b871cb45f35bf0c80457590d3f041fdd0cd6ce0744d0a0610ed0312887f2f4cb51d7839637257eabf5cf44b7524327637b2e184216c8d59b474ddf0a739ff7450df630586523880564f05500326d4455a546c53800fc2c7000000f117e11f6aac90eed3a2e4334eb90ca2b7a803589964d55150858e65312ed508931f6410a2000000c99430ca69e697d6c8635223f50dfaef37a7cbc4947e2df7607cddc38e9833a1ef392441d153bdf248630d0557d83a3e8704d10d574fe1a25f073d02e82886b6a6301da8ee40cdb1b9596d3a849603a15d1f3d18c0e911ce1607ae21ca0f635bb5862f4dae873905399138dfd9cb9b9282497dfef5948188a598e47d2e74238e3ec475e9d6c3ee9a928cb7c9d8093ae5703c7e3e65c5991a48fcf2f3f78743a8bfe2788fd5254eb79e55e1abde53b482cf2369c4dda73373928b7c01ee1df5d8793a4cb43831e0ec80410000020b000000e804ea7194bb36f51f8e174cf8190b04a655724ead53a777aeef019ce9e040389e126f1f32000000c0eb0a694e0390e3d0b5a62cc4ad8e1bc96352539246b7f045ad068c2b6671672f0ab1ee8a571049b63599a6028924cd7caa6c03f7ee283bd8c13566434e0bcb7de1f9601ae942f23c989c69f5b48b6b378bf0e658ca5ed39b8a33f34654b4721c757ce175474f9c26029e65cd11d533af9ba8a236c03474eca2ec102cb3bf65dd66193915042e03bb3efe877e6cb504de60457fbb0a15e50e3cbabb538243561cd397257ea684ac637f199e0e129a64be1e6b980d70c89d47606cb7fd3fbada640000011b0ec24b2d4fe48d64b60ecdce6996ff7f2becbf2c44d5512003cdc309b643f900e800737d000000f378ba0db20d7b2c5eacb3d13fd1958b80af3faa6ab386971603171e0d89d590536b1f078fb5e8ee8e99168cee95b1e0975d09a022e5c6025309969be99edc50960b530839a932f3d8e8dbf415011f38552d559b2fe8022ac14a80ba338aed562facefa4aac51c4b85f1a4b0f332d32a09ffa3a750a1b2331d32f734552a36b080882e037ecde8f3f2cba9afce01644e93386f56c01186f5fa3d81e92e5fd6457dd98f259a42b8b67e7aab4a6e2da3122a88edaccf10bf0cdcc46364cf5e62b5621f6a8c898c1bdfced128767a81eb40b2a4ccc849dc521b82be02e1f99d311edb821dd80537d52a0965c2cdc6b33d918d6b596b000000a60000006105997d9da063ec10492c8489b8d9b5839d97f07421277f9674084051e6f05597185292b300000039aac50a73450064c027cb125110a22463d25efb5752c29b902a9aa615f1a62a21ad95f039ad63bce7d9531dc02ea973b12e7a6e0acb613575db0000003d07e0a6d03c74313d3de3599b8cbdd7be8d7cd11fa6236c6b8d93eff6d0c04d8102dd937b000000152eb42ea203d2f87c3fdccd3f3facc70180ff6319ab000001b8000000db05b360a766aea8ee1167b76dbb6a83fc762ad82165ed8e853e1d3d6cf88be52da5950394000000b3d27abb582c80510d960afff3b7b595ad87327260c8dafe293370d4dd27fcee725e683bba1fde777f05281c966284f9c49f7e3aa2ca9cf688105b859987656daea9fb581e7678fab910c00214e29d49fa6c1a89de2771cccbe8222ee62c20e4ffcb75e25f5df1f10e91b0ec69b3aae64fb324b858d86316c4fc3961ef8d414c3dd1715848e10f653599d1594268da787890eb07f3c36d8903fb20433253083406f5b50ac6e494c0e39c6c84bc23afce76fd5c94000000d5303c9e22fe95fa3e3789a00209419ac0fa8c985b7f8a31a81ae85e049bfd330f6f6b04af000000ad86e79fffbdba4df4d847a2779bf3287d4fed4053ea52fd2a95e39303572258b029d53f5c17a523714cb2751e4dcbc10217d763a1494b011da7f9816abebc78acad292f748d24555be50a851c079b889de47a8ce929919c2ebec7f11be88fbcea3d4f316eabd5be826bb58ebe7e3ccd58ad895990280184f71d00c0cf370402aefc4ea02fd09e3cb89ce4eb2d523c55a3ad6230389b76b579242edfdae0683dea343aa9135be94e9103903006710000012d0000008016105a16340204d52a575960418b52e10f8bc54cb32635251093ba9eeb7ccf4d9600382000000058c4888ee362cacd9323c571afaa517c6192fef1af95a35b82a09aa611e4284bdf855ba2e9dde9d957d7f8fd138c2967a30580ef57ccc8ec6691eab4b60e87aadf3552001aa5c1dcc6c583df216f1fbadd9ceaa7cb9c61b19b000000a506541dd0cdc892ca8172b0de23f2c58a0804718d4559e4e6dbab5d7ae7c2dc6403a5fb080000007d8ab6b912e18159ddb511b4b701bd02c0dca39705ebe1cb72db9d75387243deca1c13cd4f566448f19976f2958f92e5f198985388319aa2bf4c69a721174d3aa47d0d36e4d6c85e4200be7ce8d8361cfbc2c8c1bfb5eac21bd48e1daff03697b5c3b5ffe6549e888bc6815b6c9922f0841aa70d8163c69372ba818858030000013c000000a7299abe2e627221422b744f34151ff209616f6fb90f89620b3dc29fd008f1e4a5e16b47fa0000007fb197c5222f0fec211e77ab056baa0e4ba8b122ab4e07bf8a5876d170289baf62104d2437cad9493ea4cc058b6e3340d51ae8865b08cc4d1848dff101c34ad6320c7f94c46c083a5047b49722c8af370b1c62bf5586afb5aae576f759a3288603f3b8d1a6ac20339766d1ad4e45fce640a897a0fe8e8ddc53cd5bbd4c23bc420000008d0bcfb8ade5ecae6c6348b0f9cba1e661fa7877118a714bddf92c12e44a1ca5b2ae5b72a8000000657ddde276c52d3c5b192ce2c1cebfc2b0c0edf108866d0903b211d4403e114e9d243829ecd75d34cabc721dc67243340f396bdd494867e249fbd4393204003b609b62c5f4dfab0fff44b1f046b0c565e7520ca14971f0c6a9183c83029d3ef2b993d070469b00000109000000460d84a6953576b079298096f04d1bce47c21d5b71339a093a85efa3527c6cc1ad528ab84b0000001e979ddeda2ebb0c740a4b564fa1a23ab5ae084dac2e91b343650fda0d8df9000000bb00189662f16f69d7a684b10a06440f99043d3b607fd16e6dca488c02e63a9e66cff0614100000093bede4e18343a6a27cb9643fbbf8a32dfebb9e019e7c147a14060c6df54eccf2c7eadfd3d145c9f92d6f5a32746b782094d3f4cc0fac738fa44423ca4ad18c9b60e1e664cdb8f05c1ef5db8ac8aab11f85585f5e6fbd385d6042c196a22a36474774fb32f67ee2ea9c42575622439b739a89c65616ad339a1f0db0203e6fd04c22bb80010f44d700fc5810059414ec86cbfeda500000168000000f906e8b61bc741ff466bfe557b4cc06d3142020e26b73a5f679f0c5787491d59a3e32e6229000000d15bcf18235c64f0a0fbf702596a9b3ac94115b6d131efad243ccfcf8433de782a0d990a9fca45ccf8a51b7a4e2f801115d43610bab13c56e18065f1d7ff0ce9c87cbaefac62ae7824618332ef545202ac9caaef2e376701b37690ae158eadf5dc7d84baef4dd606d94f66c3fe899076ed990c35464e9b9458a8024f4a8385a1ee5e17b1bebb2c27f1ab56b534db7b7fbde6b081209c05bbfed644c7f13b87b319580fb0cd1f55d2e3bf2c4a8e89aa4d74ebaaac952366a1533d85a947ae2fde6f582b2f7b7ee946bfa71cce6307c4943441000000671906935f4ca8126e15e4690d2e5344e842c348fc086af80f4e89521c5613868544f504970000003ffd2eb4b663d75f4785dd33c55d9a19ea61d875a3e9256c19b5f52a101d4fbaeaf9a5e368dc05d36de3e489e35c86cf6b7b78e35cf310646522a153ca4670f7003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014ac437ffed6c42649fea7303caaf694149c0f49b975392d5684e644278f9c6e370a3d472aab6ce7660dfe717de8d9a7bdede1c8b8f8bb0bf106f47fc49461dc5d444425b0d32a688291c58e3745435d06d0b02bd23de6f032c98701445a98ae60baea30f2c86a340fcfcaac3b122a9805ed3a5c20478e982ebef1da20b0c192cb6ae9ce1f7a74d36071486b0ffd9d4402977512ff5bbe8b3a88847f8c0759b5433bdd0b84eb638880f3c3cfe8c7b568000000b011e7e496ce590bde8b314a7e158975854e35bd08096caeac4ecea8447e99c842d0c51a2f61f4b748f13eb97a32b7a39618a666d1c2d84cfa3f41675ce1a1edc00f46f42b4b914477b6a12940dfa2330f3e0a9fe862648bba31e4893ff05773d66deb1b87968113db25c5d834e8db4eff07be843136b216253af40b5f118019eaf8cc699cde8104e95549035766a329a90471d16d2a355f436856e36d5b078a38599dcb17b996452796635ccc13799186000000b02a0a61b687e31754c6868055452b01020a3ce3b0f6264a701ba225cc95d081a69a87693fcf30d4c633a11824d887198d71348d7b15457be4badb34039ef22df42d8505dec3ba7033acfda094020fe4ce8e02bf97343229a413cadf2c414d71b94f922c0619d8dfb9d7379225abe531910f168213f3ff4749898ac04eafb8930fee3eaf8587aa15902688919416eeb5d410b00c166f812c70e268de5292efbf29fc89c952dea59bf8e913db8f11274c3e0000021c000000b0255883fe6dbbd4dc0002b2be61c7dc9dbf1288fe46828ef32ac115eebe5dd14b91efeb96996dbe127a1bc8e4a04f18a2d8736f032becda1a65f7598265c675caaac157071b21108069b7cf4689b5b3d75f4229b3a8ddb41e9d130e59a07dcb7ce70c92d5eeddd9f11704c470c6742107155118c4b90ff8c13dfb037144af8f51a2d2f7241d14a6de2d2efd36995dde4c0aa81d17417b841d9c6d646cc759a3ec271223fcce5c622fbbfe6c2b64bd02d0000000b00eaa6bdba5414ffe5b647a33783cd6d2b807921b33baf3e53a35668fb8fbc24472bc3d2235ded304554727688253337ca6a5f2aa8729780c400e56c7cada609119d65a071b5ebc9606bae0b4baef86475d8a1951668eb0722832c645b4da052b87deec253426eb8ba09f4a56ee5f47051567ed7a1fb583191675bd30e60c551a9988fb9d3075660a30f08d12f86693812b13c7d1c7fb726de69ef1fbdb4b08a6d9777920285dc01c3884ad45d4419908000000b00732e01ac48dbb6b63a941f53898402e3e9bdb94635e250f3f8799edf4e7308bc45a62635aebd2a1a4892450076fa1577f3b40d0b9c1329d4c2d96bd82c74aff2f5a22e7a0f52d57e51595254df8ad28833e3b9b1fb63093def7e05ededee941af43e46cf629082c2998e07641f165dc0111c610a3b19e10767e70b2bc1e0e3ac4e464bfbc856b8d99ecbccc8c725ab107377e3afd4a1ad0d10fa28ff2e965eb7db1a077b9ae3d01a10d665759f090cf0000021c000000b00fd3353ec40f32ee061467bd65dd7a9a4db974dc9bb11a23795546f7acb05c1ffc56b8bff3607945a74f94ade0cfc97ab88fb4c1bec2fbbfdf66dbc0ebeeb117c55fd2333b542b02ec8728eda4ceff555f26d8716fa8c9c2ed5fb5f36fe6ecddeb01bddb3a8818a937e043f6b1858c212a67a29c773a7eb1de5a9e19517c78f2aab643b0b68359d398fa75993102a5202390cce3107aa3ee6b18e67ba9b09bb7a7803b09ef8bf02af0f76ed8cadf48f5000000b0027d147f84efe397ced437bd5f95df0dff58d9f3947d71b3c45d79e3b7581856aeb27f4648389a8c1d915456641c1a0a0990073ebf920b67d79b9058616a7026c6003767edf18a4a4ee742d3e9bd8860e372d18bf48a6f2d5dcfa2cf18a0bc6a9b75e445aa52da70219386d127bc111d0ce9dc08924e42d5887fb099fc360be046c0f88b604dd0a0a8e7eacca9ae08771ac34f0092bfc92b06589c24f7dfa9053b190191682019e940e516ed308bac15000000b016d5153124a68fe9cddc8d1cfdb80d594fce6eba337543a0e22771cd781ce901c48019d4122dbbc8aaf5943cacdb76db77f4e154280898128946ac3e3194a6e8161ec41f16e16737a83cddb4967589daffde567e93bcaa104a1790e6c1596f2125f9d8bf8107dedabba1bbca11acdabf17850fc35bb6e2491bfd4022e8cf2f0025f14fb762aa6d05b81afb9e766f89f417acbca79a9394302da3ef5730159dbfaed165a8432efb6da419c3bd5427314c0000021c000000b01f821738f1caeba0f5b78dc42bde940e1f3676b280fa6e174437b5c3315e6406f5e2fe51c92eb71d0a0b3f9fe036134c58c68735450039b8c824c15c024e24f7898968fb02dacb79a584c356aad1d855cc2cbd6755533781f7cc409fc6a9b3172a77a9adfd49f0e8fd4c2f103924f18a14d6fa0625de97da6e16c74784dada62314b386247e3450e05bd2476c42d86cf02dec5dcd70d8cb0f3ab747c453b554dfdc0e8a010222c15955521046426ec6a000000b022ad2e93ba7b04a1cbc6bfa87a617f83430a0a6d1ee53f55fa4a389c7a14f2bea3266b1866345b93307b876c8a13724533de87db2cc5ac3977516ba8b08bacada8c3118231a1e859c9044effe5c3636bac0ed9562c9de981008d208188c433c4839a45466fc2a3fd10835958f2a49a4506b07b9430984b3754a843d45d2b4b21a483b44989dc5be617aea389045c108c29ea1dfc98ff18e38870be3004d8828dd6a6d669684a8051edb7c1f22a624f3c000000b0114fbc1147203f7c59d351cfed9de6a882546b17b5d02d65eb828a8ff9d76a10fadac803587b0c952921c37fafbe675a34e121954aa0fd7d9905200f3a0d47036f49b1eb7c2b5f6a38c961b6f87622cfe044078635784d1559295f469f5c2490283cf724f18aee0c7a487caac8a0c7b529dd0f9bf87c13c306b6bffe7b3db62d29b52f26c6c57d6802b1d886fe2e961413ca54dbbc85e9ea14c5ff8a29ed2019fe66feec00ca063a340ef5774d3c2e6f0000021c000000b01088db56f1cf8e6bb37e00b106af697cbbba256acb3cad5149c60b01cb2682ed56ce5c3af124017aa9e5dbf603ccd9a488932a68e0f14ab137d62521352eb430164c9f4b3c2a9b8699262c74e2b756d3d81c58a374fa8b44f80633c5bed701dd115a0f7689a706e145eb919ec063f71a2270db6b3269e6bff4de759d818c3b0ded068ac9b4a88c487c5ede457bef82d400f9e7e6d6f8becd9f12fcffb3df5132ac9fc659ce225a6db01984e53ae71ed7000000b011a9d47debf2a4be9d147f140a1d9796aabd532895395b1430978dd0f9eab812fd5f9444930a6233a98bb9bef06b5aa975a7e28640844a85a96652bfa2c98c27f723e8940c956b617d8c333f9a7660436557a8bb9cc31527e3c6ae71016d1312046bbc9b1047477e2882396edd9da2e9133f913c15450d920705c917b6378de750cc0a0a2f477048b1d50b2566519ff3059fad594633362430bd45f4189d36d544c9fe2e99d63b1f0efe80b819ca7ae0000000b00307d543786c1c4056c739d9d627932433bf7b6c83b37ad575c9466c283b976c54deb14d14e41aa092f79ff5e0adb30c9afcf4888f6ad9b61482bb993ebd26075515c488057f67df6c85d3920bb1648e8b481cc99853dde8db193e0054cc3558ea35266e56384c3fc6bfb81ce16271380d9326e3a6c47e02407d57ba7840485d3fbc781d9a7d310a1e22264144221c2b17efe29641e92afac0929bf35e65e2f089802533369debbfc73e38cc0a49ee010000021c000000b01c0cd9bc7ba0deb785e6e4a001ad27840eb9732187e90db9cb84c21a3f798e1b3a9a70a2574f4b62ca9f9b8d716270e9a9ef9938f29de567561218d068ef08f921c13670629c8b7253379267c274a5e57fa6dca0781f0afd5fd7cae32cfd1d329aa3242d66e5e2d127016d395fc86c2f0aac653f73aa8e2bc4895baf8844ac9b28630f46bf664a981478a3182ec15db2295aeed22a92b96026b9d9c3143012f7bf91df72b31e08d5bf20acba2a04cd82000000b002c9893b4813a372361c6d15b44322c531eb3d28850d58b013dc2763174139ff7bbc84f56e720d06a552786e5eb8c16d8c5d416aaf7e5acdb7a24f50ccdbcee5e66d226e866dadb84c17a5a575ad97af733a33ac05f0f8dc1925836e1323178e1a656fa41a2a7abd01c8693fd71636c41369794406dc221aae3f268bd552596a9846beb4636f9236fae5820d717792012943bbcb58f3dbd7634670adda6b6847700df45ddca518d918901a6aba07d772000000b0149a412c2da3dc581287494147cc28cb19c57efe775bd2479d205e70ab0906a36c04c665673b90c9036d6f6bb461a5b9a277364b4b3d15a144b3c508cb0603edab51d9e1a9fa74a15ace5e5d7f6a6a4fcf002f5e5d04db56566aeae03b7280854f00334e249c68aea5c301c35f5b5835055e6d0f76533fee16b534eba9500881cd8f2a8bb171e977f5839cc2b9fb1de90e875e2753520e36b7ffa4ae1c6f5ab33f7ed25381bc5fc215721027346f91f10000021c000000b001c285fa65b2aba5adf0d3b3d6caeef7eeacf7c868f513b5a1712e2593b11b1ae1a34ed6aa7baff297dcfd7e84b9b791c9d57e81cec4b19bf3f38041e384e88b474c74a5e98553ca048afba363491ccaa5f82fa7d51f1d95b264607e0a7356bd593390e5271c42cedddadefcf6b789b930359aceb8f2ea2c8454e9d39ae105fbfdd5c8fc6a38f5c160560524962cc77230376ce27ba0b6503f4177499134dc8b5358c4771e502fa99cf16f40f1135273000000b00ad33296515224807610567a54ca400e00242548f6ec209b10d65c9e0aea1d340b165855bdaf06278f8c2fdc883f8856b0e92458684921936eecd274156f85ba7dd85ea99bd6424ccf6a0f3addb7a1c831176672eff5b98dbd0ae86460ce8c97f62149bcb87e4861b595d8122883d652212ce677767cde811aba3345247d652b34f373a587d2c7b1c5c93735ed6de37804b1c2a593d147054a578e7c736162c329b8a79364199744e994b720e99b0beb000000b004daa2ab90427bd8ef3439d5a15da9b1e62885c03871a491942df4664e5166aa4cb01d63d2bb3d385877d9c1b649fae5ca2b2882fc2ec38e6db60a4492415ebc312c91ff72238d9b0e6d16b05264a3491fa5c9ba2ec0ae13ce33650c54a0600a94cdfbb8ad3eded30537afd18a6abb2e0d2c0fc289bfc4898b3c96670b536411d29ca8e1db8cae0ffa138bfebc907cbe1ffaa7ca307bf3f63b36c13dfb6348305f2ffb6c180fde113016c151ce7f95730000021c000000b024c35cd6ce060f2fa9fb577bd3a30b3ad1e3405b43c4a3d31d9bdbdd3d8f226571f7b385fbbd7f22af0474069630e55123c1edd68181c3a621db3ea402eb33ad3be324f17a001c4b0d972bf33a57bf1e653cd0e92d81b24ab486502c0ffa39e22f847f238a004778b80b4bcea89c231d10df27c4342abc9eb1e087bf16e0181c43bea62e79f0be91c3ab109bab4b265424e01edaba05a4f7a181da94de663eea4702a1a3ddb621b1110d4b02996e673a000000b01792413bce0abafb1ea96264b751deb139ce7233b079579a7b2c501be205076d442592cf496e3ab8f0e665aa890f9383e60a39f8ced4ed86897aca69de4bc2b96fb61952b113438f78735038e8d7c68e0807269e5b132f79088edfba0a167e851a56567c63598eeb93bccd97bc05b7c80dab44b286514f9c59f99573563d4c844bbe178f0f5cfdea5712327ecca96b9112236b47a6e9983ab2afbc09e161796c764fe61c57ca33ec61b1473819704c47000000b00ebe06118218b563520a01ed4f22d6a1d3d235d3eba52b6bd39efe28bd246fdc2667169919252044113b1bb9572426f19f9d6dd05371058376dc198a19b7df59d656fe7ea251c57fadeceb3483caa7a095f0241ebe6db143ec9d1c980b2eec199f85e0495bbea721092dadd04dd8576225c6cc51825382fc5d4705999a8b6c9b74ff63b2285244ac2c40ed033b68bf6a1c14de2f9414e29edc1e8d13f09cc0e11f76de1223470763d0a3f8b6229679df00000f860000018c00000073009c5eff9ea225159fccc9a722d7d556d6844cf64fe8ad7286bee50f1d14a31722f497330000004b332559b81a3477daee89ef2bf771b09e8f512ef9455f8601199bd384af90988e7aba12c3f9232edd8958c23b103a123262cf29d6999ec0273101e8c3073b5e4d42db9d0834a8d53272b08b00000111001d30325100c40aa522096f38e9ac5735f09969a30006e0af0ce435ef8e8b2e738075c3000000e9b9c68afe2cbb41e12d0aeae13fc2b526ad1319df82a37d12116051bf8d487f5abc5e260386b3170ec1f52a5d257b920378f54570176f7c019499f39951b19541c6066b136d7c29f2fec951a55a83fc7ca9d266512677fede5e5e780e34c73d922d72029cd79e731eeb012f65d7abe44bd4f9f36faffdc7cc2afa87f8f0c9ed4de851445e73f2bceb4fa4d90ee3e33b5d17692c7fe500fa965e59a62288104c402e8e1e7a38f552e7cadd71c80d7a14f468501db4d321f0dde89968d8ea7739d3661a17b28fa184c5b7fe2c1b5991138a5019d1261f479510daa6fdd50c7bf73b8f65d06ccfe17863a50000016e000000b81b2e1a1b6b67331612557ea77f54564c0bf6a499fb88fa8087a76b936ba4e8500bd56d0600000090f70cde5bb951cae21ae68343f24097139b4cde3cd336281c6337e3cd58eb8e847565160a6e4b73f304a4964b0df6ee807ef3765c443a0c2591721e1e2178fd31a33fb658d24d5d4f0ab76478a41079f5e476e0808ed82e7640dacc96d168b465e31af599a45f44b4c2c7628391cfc6607d346a686d08e9cf9542f79319f009e9251201fa9704cf0318d6bc92c40bd4a2000000ae289e7951ab5706fd8a63ddbf72baeae3018f1ce6283a434752d4616fd8719b9677afd04f000000868d236f954fa975ea2b47fc374d2fae689989bc7393c6f8137a2887cf86b984796c55afbb3ef2ac354038f3b7e229d190e87b57e085947f8e86de6d48a900eb980dd9b5513e8493afae6fe37e57f979f34673b9994c8ba54797de1a8162bba20dab19463f980124a71d3ba17d5c23ed4749a29b4dd9728f50733c4d1f49797fe68d91fe07af820000018b0000008603b192b8cdd96185017de3883781f72b814aeadeef12edc328eaf95b41e546fb660568d70000005ef4238b17d2e8ba64a67ba304a8c1dbf7d6d4bd29c22ecf3868ccfd9ebbc655d188b2506b7c45a55ad0a0fa6ba70feb8331177acf902fcd25c8cb0dab71c4d9d14d0d358251b7b33c78894a25de165871b9eb66ffea3162062f6687a42921000000fd2ad7a6965277b4f5a3b699ff8a5b29ad2944aaa1c280dbaeb1f740073c424d297d21093c000000d5c6f23bcfa77b312f1a4ed9e1959fb478963a3012abded026c155f45e019abc5e8b4c9997602d653daaf1e58bd38969049113e9f7c293117eaac3dd4b9cee87cc60372e1530e15eb1d6595af4180762694b8de1d9c3b514e082dd3d33b2e45dc1b22b37c26a732d5d644774a0a689b1daf35222484deb6120f8e554d2fc68199e8cb337cbd2edda487db8aac3e71aab1d76f4e427f4ce20efafa49fedfa759e210f68f01c6b26cb5711ab7fbc61ceba3bf8ed755acf4c492264bc9d133d92030059dc78acc6bd095690861f82ea1f27aaf2861e68f3000001d7000000e4228a1360ba95c8c5a4c217ce95b4e4641da9d4469c238714b846e4ea01c467b01d00d9b3000000bce56c28e09208cc1ff61aae88d57e8922ff8d0dcf0328eb2420df09976f06e217a5b07930d3a8c10295896318872c71b0eba3e7b4530308aa7c00840365394aeca97e778070727afc1ed05cba4ef44a0c1bbbbe6aebaa95077a3d8a11a11e9a92b82c1d49e6a41a8b17a4060c385574e496b0d32cb2880eb1059dea11ba2a0376f703391ffd254d2b6194240eac03aa58aad80a1de8c55ffc850da9b497429b563428e4d0b9067727076cfb99cb6e3432b4981ec0ca66017b2349d902000000eb17b236895c2d610c235ef793bdaab50db11957e2ef4f47984233d536859373ffc8865976000000c3f0355874dd9452301aeecc656d3acae4bfb6fcd842876da6c76a90cf246f3260e50b7b87c3e5eae185bd205b24198924bc481a54f3b4f50765c7df7cb8599b9e0c1c6b3fcc06b4ab0ea35af130779f5480e3abe4b685c31fb362e8b0f2ee095f7fd29019ff46dde97067282ac2507e448f3efe5d25529d07b217288d2c4a1a7f01c65f43f859473d3d80e23f0c24f523415b6f85760559f4db2a8770040639dd36f4606b43fbfcb399e411c8af18fbef901280342be25332ff0df3b55de6d6efc80d4b00000212000000f61afa8bc9d9abe8c86162d84b4477a9e9559382155a375477c832cdf95df0b3de3b97a61d000000ceb49166afb9eeda17229b2d6a2825c370bf3686f9d004f9a9a7807ef8024900c67a13b62aabad9a0ba749458f412741aeb4f83e925def2c136efe4271ab65e3d01077574431d7909725904274611b922c4aa0a541d74c099e8108cdaffe9a5d08c8c76307fba3e917508964f041e329909f14639260a8c7910ecbb73f217cebcfb15756563e15b7465f0a109120f126514c817ec98bd90ef7eb3858b92040c1714bb349d8d9f7325d16e8a934f2293fa24f6bc372bf0332c27329e0d274469ba5df8fad1b7ba9bea8dbc63e5c7256000001142c81af7070047d781028f0bb753021a1c3846fd101cdc1709f26ff0a98551f361d50a996000000ec84d60d6887506f221e716d8d35ac3550ca5e4758a402de0ccafebb819af0da1ea54640769231dd4e9ed386b6e43b97fab716a830cffda3306a3f934a334c02ed97cd67acd1fb6a2d219465e4797c85131524ae384ee7fef8a08704b4ed825af022eb2c7544189667491dd4aca5862970f1c10cf96f5e7ece768d238bf21b5fe88239166c2038d94a036d28343c4c5a4c41c9181376a6cebb6e223b3adeb0b1a7d23a378508e5b4c1fcbaa0133fe435b8014f4d6b1b7cde4abb398172b629588d66c431d97f3f5227e2c4c5d85e5a1fda0bd581b4cfcc67f87921401650765af42434619c8d0ea17fc3ec998200000105000000aa1d54e58464d34f3d4f94a00b141257d940565aa6da79c538bd5285035930298f44ce66ec00000082615c8372b73086ef2d86942d1f1f77e79acb0f44476d048d5351c7db18ceb148add4271b6f1f0c124841316205e9c8f27907f0b115f2f2b936f3ab4564ce5d742da0a3e2039f5de760e0badb7359249b11c5400e6e192ea14878dfe2302b8b7db71b68f0ef3c8bc0ca9f8031753a3fd9ba76dfa800e393dfba6ba2d0ce9f3b1a20cb0000005308f37fff11b04849586a80a585e20355c71a49ba87229813d60de59923871b342200cc390000002b2742797a65c1d3e8daed93b6679480bb26374cd0c63711a60826d328ce6c9f3faac39db38f90419b0c55ce000001fb000001280d86a17bd5c00ce4418856a6e2e1a882df05d12e025b4a56d6b61ad2a71cb223b35b60d10000010090d363416e98c0f3144edf61679c13cd8894b682cc27312fff510b4c6a74e02a8589ed142ef5ffa5bdc2126151745dcd1d4432380e628a16c08cadf2a245bd30e0aee776594847ca8c333441ecff799b2f38e58b745161cbbeccd654393593abd747afdd7582a39606d88ba00217386fbfd717a301ab3d84802e8c164cb80bd27b8900422b519c4cad906411059185cd186030108770c0a4bf341a335901ddbbd6460006a9533a3c5b9fc193a1cf7e4ad7cf690397d9291f74b3f12a7176aca180b6bf8b44818cc6e6379459f9a484961a1c2dade7a6336b9ebd0ac4114fdc03d8477d4cb1776abaa855976fd84480321a170000617e0cb01cfa6eb18d360c6e000000cb200138c53fb6a085091681a1ac0765bbc2405a8b4c0a7ecd4df62986f1c7a4efdedcc86e000000a354998963cfb528b1a16c7d4b9807e3915a29c3c6bf262dd346e449d5165679bcb6f856dc3a235f0cce40cdb139bdaa93291f54d6019619191aac3523ea3d17b12cb21eb8b1b6b13c49fc2b380cd6a8ee95215cfaa8e9173bd9aef68539f724547e8692c6b76f48a6d92b79db1e0df4f6bff82f06e607294d84fcfa120217a88862b4c61209b16c7611668da0d50f895fa00aa1cf7ebbcab1382a98c198f786c195d11000000128000000450ee3fedb9bfc3f7e5672d4b6a499f53a1430ba6c75b1855d49ee227a111d7db0d7addddb0000001d6c4612bc58dcd95a945edfe26e25009fa7bd5833e71b03bbdb4075411c000000db0516bb73cf9fc13d9c94c8fef11cbd884d5ebe6e26a3e3046339fc16b3db3d90a22bd2f2000000b3dafdfbeda0f7b577be7f3a281a1800b36f28d85c7cef7b48ec06650f98aae8ae0ed0c1ed50b3987808c1758b8216ac3b704416b24fb325a33be81b35d1bd238ff6d96fcb379933c7bd359fe94ed826f9de106267557372ef29d47b67d4366fff022c01ddb3e786ceeaadcb85ff0975a6d882c5076f985fa2e19a4a0a5131bf07440550642284fe2d21fec2a7791ff5be3c24e4a0dfdbcadef77d4b94aaae078207ff16245b4d3ec687ec580fddbfefb07175f40000008c000000371dee4f7313fc8095bbde67d5d724dad5c5cb19c8dd0fb167219dfa7683b8128ed0a1227c0000000ff473012bc3b79d35492be90eacd9890000004d0967aa2dda64b5d952e840bf5f2afeb0f7d54ac6e690c2ff5cd00e83544818f3dad1694100000025eea73e9759bfd4358b339fb78cd118466f96892066dbbae1651c41d9db9b62ff4c9fba358a0000015f0000006a2b472edfc596b953d09761c7f5b5834f63c86bb4d1ad1a42afa788e0be854dd36cd51db3000000421ccd7c30b9ea1b1cedb8cc5b262899ba516ca51dc4e14f22519c42ced09f3888d2930d83a85cdc498031a222526ef7f4dbd27aac1266dea10467b54614194db12141000000ed263239846d27d442440d1f01e1934f130a33c005b66f4ba74475a0b523de87c22c54e7fa000000c55a3157d7c256da4ef5975df4d6c71999d0d8880526e4b8e9e6b48abea71f4a6d97cea5dd95fe79c5ffd3ebb843f1c9be98fa4564ff1aa53ad043ed297b53f4cfffce626784f5c4abb54437e9190a95e18258245426770cf95e4bed1dc604c9fb1f3535251b778df53e251da808bbecf3594b11c1be5140d198332974fb7d9c08d59af8491dede0b4464e5050a43487db00ae4ad11649b765b5faa4259f9402959c76cb5dc6156ff7d33ae01c5d4c70e25bcd13ec6933ec1bceeb6a4c544f87186d2b729035000000d9000000910139beb488d89a2d022e01bea52a5bbaf9298e524b502df6e13701a423a49a2d9eac4721000000698d6bca1a5666a6e1205f7f3372990be03e34ad260c7bd6ea2a48ea2e96b4a0ea3b15848f92e68fce61e61783b4beab1413b3a515a43b500fb3f569f1efae02c09a30ec8a9f7970d2a10d80d0ff8a6b8c0a8efa3346fbff968178155263683f681f3982079f4761290c00000040279c9e3bd13c318c18d9fa1b93842aa22edce489d7830de81839e806ab784c48b33988d8000000187dc10059e3b2905fcb0b2fa4b3eb8bf61e52656d0673585600380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00be084c540f6c3c3afac11447019011a6ef0aaf386781b7f649ae0771850de38b447eefd5f28eb7a316e19fd1c7547545933af457e48bb2be8116fe9a23c7447ae33f30031e2dd1b96ef1fb54a9dcf788946d3136c92f1f3e0b3625416cfa07d84507732d4569f2900e26d1388831db00d61bc869e16270301904532bacbe4037171491149242aa06446ba0fae6753312565eadc70b82384b8b0a8a0d194f3fd7ead40bab5534078c3be0935ee1ff01d000000b02fe6865ff5014f51a217e6625a0e5789f3f476ba3e410f75eeb35b946f6be8693a1fb7407684b05f390f4dc0596f97ccee2689b3aef29596d59f1121e2bd4f3db53041d6f3ee8fd4307eec7fca4c000b199adaca513f863bbcaa06df900a08b50992360a78088905b01ee1d48304a2cd084d7821a3c566833e40264b8a50a2f02cae2796cdb66185d61738dc03a70feb0e2ee07d2ed3c5e03b7dd4603f694d0b31687199bb1b9f4aecc2d52612a6725a000000b0063b07587fb70cf92c5208e2194f9a39589b6cc1f41dfdea58273cd9e79097ef1561efbfef40d0ca0e4aeb47a63e14972ed70028a6eec2131a4ae4d0a9a0a648b2a9c2f6995518e79db9d7b12f7f7c0959c9ec2a0e7d7d13ae282e396c62e7871cb9477dd5d0d75b7200c0866ca5388f286fe2f4ab4e5881b9aa6f0cd1fead205b5b8f71f5d04faf76a08f3e56c311b117c916f949eeb84ce71953faeb366f46bad63ea7ed19788d15d1442fb287ef730000021c000000b01932b75128880c533b21583555f9b347fc0e8daacf94cac9897e5b8aeda858681aad5f5e83c29cb2a00d823e90a6044345442ba25b9cc33f198e60cb7bcd87d2df6ba91d1ec2d347e70dccab21f2e77ab60968471bc5f8f89ac3278bb5af451826f4a9655036f7dfdfa85703b7ae9eeb2a3700f278bd27672a5657cef6374d25e8795c7b4630127d179f5dadda7392081f0fcee60d0ad43bd18437a2cb6422cb85117441198cd0509f3de96fe0f9bad3000000b0043f874c7a39c560b3b1c58df1b14a7c542a9956b78aa48a38a2d5204a977112640891a3447a83f34ee2a16ad59f6526b500e0c16900a0a1df4a57bc330f02f9692c1cc0d6af07b35ac0748ffeda9897de4368fb7bb4ea17facb14602b9482dc118621e324de3ebe741b30350eb489f2057cad9646d0e7a01c66a766622c54b0c643da0a7a45d086298ea832a76dc1730d4a7564dc792c4314ab4e05c4c2f14e6b93ec4ec2e47404c360cfab3b831cc1000000b022d10f2075754660ef9d99fd7ed485256b6cc4d2493dbae86584c2127f620883fd332c3e8ecfbea4104ec1e3b769914054fbcfdb5db46315ee71a0079325574e9f76d776695cfbc28548bc1ef50edb13163b375d415c806bfae4f14c56e38248b74a720320adf1e1cdb8690b939cf85b20224ad4602bd49812fffc1cdcfbe0bfc5bfaec2beca0a4422b76cac7ad174262fb4acfeaf56da31e71355b6fc8b27caeb5942a400fcfa7151577bcb3c54dd480000021c000000b01d625641dee974c06f1136252f45bf97c1bf401a73daccb2a49e430ef53a6b530daf63f658934c309a7c4dafda162f344af27e592e71b26478c51b490df3e0de3bdeb313a4dab4f95e9f1d89269cc3ad85865d79e50af7dc321bb4fbb314b48db5d0302a31bd04ccc033f8e6b1e2cc540d5dc0c8d0367a5f63495fba5135977163b552e26909471fae64213f1bd015b71b5159c42ea25e9c5bb53c1ad6d5bf7c71b97d8e0507e3edc992460a0be2d54f000000b01439f81bb8a6a440738035730a3b182cd0da419c38ad88e174665a7abba0bf5380d9049703aa7c822d77756a4d7cfef98c32e2fa52439fc0557b3bc94719b55b051e2122161890adb44475eabf6de17018d491099c23d8d934ede8b6a0cd59018673b1a30a458220722660dc66b156e521d63d927b24211b35afe00b71158c74e3cdc7adf36dfd88046aaf994187f2ce17af28df766afd967ab6a7ac4c41d68d2d6aacc18b069007f6a82e3dc69244bc000000b016d66a1f000da86713f5e08834e30550996c6db42237aac67e530e47de18764f867efaedd3d795df75a7a0de9067dd37e2ec3009f5cfac7e7d9f75e7f8a09845093bc077e873c5006070550ef566c6ece1623a68d0214c84ba44153d36dd4638caa2a6a89959b06b51644fa8632fa490102ee337ddf0af6e801ddc126cac433af4cfe5ee5c60cfccc2c5c92f66df341028493dda9effead5bf1f659583f63306cf3477a852cc060d109eb2f2965613490000021c000000b0028c812cdea2a5ac5d1c5067b3ffb73b427043c9a0786202adcb0e750808c102e3860cd235dbc519d9677492ce8288d0b34f25e596cd15be49c32f984f4dc70c1e2b1706ea8bde3e258eb6855bdf29dfd8936a8b0a3d10927e8afcad8e8095ed8efc6ef8d29eef85875c79e8224b4fa4140ac42a9ae8f6160e240db13b4a750dc82694733666a250a2d881b1c81f9426140b5ab7df1f88bbc6d5301a398d819e37fdc20e941c444191bb14ef000fed0c000000b011996d8a35435c2527289dcc9e0f2ab7156fbf2118fbef9a7259581f5ac756c4f8c98b57564bea3451a9b63cd4ca60c355ba9cd36c5dddcc8478da141bea514b07bfa2d18ec5145098529a42c44a86068b76255726a5678868430ec965f974986659f0467b61e3841326b2d2241148ff24a626214e700dda4c17607adfdcb17862deb3697473411673a52579af2d74b5111661af404e0901af5aca60c89d007004ae2bfdbb4492c1738041ea3a6f8c5c000000b026304d7c543dec309e2f4f1c75d7b4e1f21efd85b2de01977f9906e9c730c8faefd734d8a596b9c6246e5063ef4ef529566e0e8bafcfee0d4267dd4cea69f149dc8073a5e5e02d509c82c3d3c884e5379fc6a92c98ad0eaf9bf60f161e6df57700626be7547596dd67015995c9ee2c442be466843a1fa55851d5e54eda40a45235d6878e3f0009a5466369445d75e43f02c6a6f6be7da9614a92f53719ded8c3cd62d0c27e1cc65c36aac593f09c5a9d0000021c000000b01c7d0b2a71ec4ad23114b4ab4e21db16bc08ccf4e90fa0d9db306a8fb520a0c214ccad54433b4dde587e58e5b6e11926afa56f10ec3acd1cc5ffe8040f08807c2838716ff78709dd16afaa679944b54d05bc6e61f9f22c71a2103915d1e9061a8b8de2fcd96788eeb54f7df4e2dbd22e037b09943273475d7f8a9f3eaf4290774f2cd073673e3b764c78b640e88bffa7158acb28db09efa04a51b83282475460a18b8bd9cd80d60b79fab71540c19522000000b02157932c75ebaa581fd24e47ed586ffbafbaecd1b1e8cad71f31ecd8e7a5f0045e0ee612ee6c25d8426dc21863a8319337258482179d722a1fe96814300ab7aa80316945bc3d5b0b29da57afb625a8f8d0edfb953400a2da93b041e897dfd9b97abf8f7b514fef89e427dc648581e25d1e69a06617cddb127728d1c929f72b5988197e3be9ca57e223513010b72b0e5f273b619761252b241db97cf9b04166b0955ac052043d593c52e29325f8f9d88a000000b0128a9bc059acc688df860898ea6efbd9a0580b214d922aa7b0ba60bd79551bfa238c4fd2cc2882eb571271c93b5a363728f50675f24d7a45acd9294bffd802de96b88a3eef2fedbfd5af9efbe6d6844b81af219099b8fc2b7dfbfc9006aa20f4c9dfb26114f9b13b2bca31801be252611cad5fbf6d19389b89e07633f451191d71ab290e2eb7a223285374c480b66cf42abff38e5fb4bee6a847d01f4ae02630a2c788e2891d56b1f557af1309adac2e0000021c000000b01937666b31fc567edd26cdbabf17c2a684111245c43d1975a4f6cab00d36de61f82b9774e153db18bb3d21b6ac5617a4657d27f571e546afc29b5abbacd7d698d3e9b0113140036f0c6011900c562e2bb97abb204213ffaeddae514adfd23e9cdefd649cad4b89d634e34fc110493df3063406ef1addb0801bc9c5bdeab1f27160ec9503c3f8b5fc008c6fef45532f9c262c7e78ac43c716d00d4ee472c27d78a26dac527019d868c27d64529459106d000000b02a1af08ea7e13729f019a4b2bdcd87f175810059783cd59374ab4ac4068437086fd0fa7ce1655f3957a31af9b58b686bb77feaf9c06a9bead6077b87636e6a7acaa494f5f1f12684b5fae3739d7121a53ffb84ced2c488cf02fd972d64c25823441417249d8a9f51e77700584cb5aaea1f327093d929c56194adc4d67fbc88e0d238c2446f6caf0035dc0f346cdd15af17e168aa7adc85326333a4eca4c88194e03c09593041bb906252afd006d7bb17000000b014827815ae61d548a8c64d9eeadb2dfc1df0c13670b97a4e32002806ffb6fb1d58020877e6b04209a809bc2d61704a0917b52ecb6b6e8616146efcce4af7e5c8a924cd156d8d12946cc21378ae213c61f4e2b1e7dbaecd34002e8db7cd228043fa34750407cb65ba545f0c0d4ebf7d402b801a3391b1345363c102b3331632f2e6569f47fcd5954a127e3b27b01ab9ac1beec6c638680cfc68cb07a8c4be91afa9063af32c2db9ef948d34372837fcde0000021c000000b0111945a9944604150175593e52275a9537b5a85632e52a0f414ff2072ec7bebcb17cea36ada65ba9e68b0c02a5a4fd555e52eb64ee35b84e40de5a269aac7b84b932b73d5961d7a0a910a18502973f6ec6f802676242ca042ffdb8373ec59b8afc7bde5627d481439b67a615054106311a98f214b02dfc223e6e50d6d68b601ebfcdfd845a81a65900d9ecc335ad9752020144f7bf592c89b6116f4a8f6dfdd856c60b3422310943bf528fcdc8bf4306000000b02b2226265e2171eaad2eb9c16a849ad5e959ffd6f9845b3dfb61888aca6083f1c2dbc8378f86a95733d5935dac5af1cde6b21cdf6cd5a96f5b1c2a5615fa1d21d5220304896bace4dff32ca6304365b17634e7bffee7d96c0de65c38b85057aed0549b9d799fb74b490a371f5d17d4d12f147068820586e30b503a92a1303a8fef1c4d70c785d6c27bc9ee657ec436c72c2671151ec34473409ac458baf9fd19889435a56738999df1ee54c816ce6d42000000b018421c19b9eb7f3129db4cde29851264035b9838328233c56774783a6b75391053768f9c69fc7e1fb625403ba31e1f1baba988d9e16d478d568551678a78c22adcee1aaefdd0da7071d1bc3424ce514bee9db687fbde4a656f50bb83ac9c01f6ea319e03f9a563a9c82f0b8002c3f5fa0c2d5c8de822fc80187105bf126a640ea3425a92095a23e8b28e1a42dcaccdc32b97fa0c34121fbed96afa38cf924f096390c995304e5dc984f3a6cc015a02750000021c000000b012eaae0109f0c01636f10fbc77cb1b2b8f8cf0f23e63ddb7c9cb263810515aace00edd32c4635269f5ca7fefcc5c9e92ac1a24d68319d7c0a5a2b10a93308f6bfae3dbc785fa0c6d0c58b84b665aeb55f420e810c452ee6dc34ab59c22b6c44db877746c51bc6bcd6c5c099e02146b7624162dd6e6ee848e376d1c67ef5ae7dcc6e854bd29b0a4cad65961b1dacec2dd095493dffe848a6a98a70bc1ca4a27b7eb12db26f11d2423caa24cc06a2e015a000000b0103c8a3ab6a8a4e41dbec063f5b5600184600940054edc9acb357e217ee323f68f9d121ddab499ff1759e39e844fdc8b3f82e8a82ab8102d8e73cbc7a4df99ba1d1236b17e4dd08733155c31c157705b164a8b7e16c9971314779ada33b2bfc929342f0c47e514209253ace91281ef672e41b80d7a07bd647fdcf7de0acee5f35cb13d23bb731b30b64bb399863531a02a002224e5a52828c61a3065b3cd3afada15871ec2ef44ecfad5808a9dae515b000000b02dc2257556a830ee3c27b6f6e0eea40b4f2ec98a56e35ac0974ec17253230c9843bb8780af4844e4e2c188562004aeb56da44ff46b5d98f5762ee2efd4a1c5f2a1d0f6e5e87a4cf57de3b6378209b215ecaa2b6437bce7f641a41a9c3dd752dcb98ff200331032c4ad8aae77db3b1fcf07516003efefa9577593e306b38427122ea081afffcb5b4baf79165f3b2e55a72a3f399c6a402f886f430b3f3e80066501465bb507bb84cbb89754f0a36dcd6100000eff000001560000006201384644d824f1ada8e2b7ac98b353031431baa240856ef922864956e371bc4a1fc2a3290000003aff7638b05fb40fe5f423ea57f9d9beb991af192025df2aaae2f42b69031e6a70c5ecf926c69cf8c3c2fe33063963cd134d4929d31d65dec1799e000000ec285a9f20b0cea877b23ea852ddd40c12aa6e9cc881cc6aa43c51eb38047a01211f679228000000c485eaa325f808da4200da8d2eb88ff74941b1bd0b1454d8bdb9a99afc84f828a690a26627f87f81b88ab11c22ff712ef4554a6549f78e6ba7355fbe04d22a0744d0709808834a1dea3c2923a6f3941921952b497f8077088bf21530a0e0855278309ff4b0506fec5d408e51986c5a19d121e7987995e099fb3441807d8790252f1fe9c9813b00c715954c95db28d3faa19c71d45715bc44e0e58c768862af5ea7e944555ca687dadee0e7042347e939f3cc35c358550f57d5de7073c473029cb424b7a8020000009b00000037019841973483936097f73d0d8885e82133fc4712ea9a70b5912a9ab7e9f631f39e1e3cbf0000000f83dec94089ef54ad35f2f49f16e9350000005c1cc186ed43f7f5a005fcf2e475f3e9992f98e5cfe7eaae7342dc4f74f7b436f809ad8e4300000034194f31d10a1ea6952f4715813c4eea5bf0c61d2b379f01e2abae04c502a1555d58ec717f5cefb73cbd0fdd0f6480631ac719775f00000149000000e701a61235e0347af95fe3b72e7bd7cfd4dd6d93738ec44971380d081e18258b36f9943e46000000bf9353384caec0428a595d8c8c9b4d0ee9d68c2d755a6d0700ec2800445db50d0b7d1b7f0017011393fd08afd81e7a041550f80b2404416132eb09112af349b26a974f3d1af46bda7e860f6fea6d511c3349121668f6a80e1dcf074c267c3f13ff90c6e5966d1101bec33a524166dd474f8cabf1dcc266875696a54deab331d485ed19bb8ea364e279a996a2ae2b18b8a76acd014ef96e7b9e0a8ff489d7da8a90ed04e1b21d4e16e1fa0e70a0bf0cef42440ae38d2b1955c390c57df3235c660000005a15950933fb51a1255b60d25c05c2b502cc4d7a045d19f1085b48e9ed82cca6b455a9621700000032dd8bdc2af417e65ec65cb0036c31fbf4f87bff5af8c44fc11d4f41c20a3cd7f0c16674037d3386c6cbf451d3f731170dea2e0000017f000000a61def4f93c02617910a1e9655295b15997c3e5199aba9904879a37d35c08790cb5bf597540000007e1e04408818d56d75ee804cb71573a155823f4e729416e4b41a003166309dbe94b37243faaa71e768dd098dca8043c41d732fcb58bd23dacc0250081d65ca4b1e58a5c3d2073ee82d6549edb2e063927117dab8cd2944d69c8c1cee4dbe2ff851df73ec17b6cc78bc51d4a2fc0bcc123f98c00b59126d08070c6ca15c5f65000000d1043f6ffbe62ef61588e52ae82c8e60291410e657b6e48b4b49c31274770d6deaab8dcbe1000000a969097ee3e4c07914c71a1d1c4e5971943fff2791aa02a8b1b9080cf0a42bf3f41fbe0b96c4ae28e55d0ade99f7569fc97c88285f295683bde221c31ef625fd0fa904d6f3a00f6703bdef7180fff93913044b77b5377203578d0bf9cc3cb5e4af8ca77aca5bd0504e3ebf28d800c3bcd0d1b7a4d8c054c0eeba9b910da49ba40590e0f5602081013eba33d3a31f1bb7adf27b3549d7e8d50de03d5d8cbfa8d3d87925469f730fd5d220000000c300000073231944cbc824111414e0fd0e04511e52b01f8441659457bc2954f73ee870a70bc9a4c0370000004b26de706e4197eb7523ed738a8da7039dbefb8f88b551d3722e736c7ac00ae34d8575fc796ce86580d6af502b6f6fe9ed48e9527b10264f26e3aaddad537b967a99e6b34cb06a7d224f22e30000004810705767ec1a422631a898059c643fd54765b76f5c71df2693c371dfcab1816de7bbfbf000000020abaf14a480d15ad6e9d9f50e1e0bd937e4e70fd2060afda42767a0fc2fab5794000001a6000000a915eefdbbcb56cfa5a42b61a0bfe9b3581fce9b11d255402231951fee1c67bbcecbd281c7000000814eb7f2ffa1de47d109c1bb0ab46e4faa4ea843e9fc43a7c03672ec1be418bc1c1657c261712b324395b78fd275477cf61c7694c0ad9aa49d654a049256f4138ea0953963353c8e5fd4cc5d0e02e803acfc5f8178057798929f349129c8447a3cf01e952acfcf77fbcfd2346feaeec4247f12a3241f63a3efd6959954f926d078f6000000f50562b59c27993237b8129178b71166dabe10feba925b2ef0bc4a2647664ede533c6afe52000000cd1474623b981dd1ffc25f6820e181f7d26a52e249234a9b3dee86bf834cbb07a62daa01e59eab50f4e7c6a49a624036f1fd59c2b25abbbbe17cb5cfbcda935f7ca6136410823e47e95145ceedabe242e27fb4a77d7887672de97e7604bf51cc7dbf5bc5c23b235673cdd702fbdb8b62d04c764888ea6780fa16705c3db4d180c9f6f6d69704b0b3abe0ea1bcc19d54afebab1278fc57b79fc5732cccafae502974c5e57ea424aea8b3f93c8ce601e6b18eeea0ba5ddcfad5ecf0d625007c2b0fcfb96d98ee0374b9dbcb865b9e00000016b0000008f24d3dc626e2df668a688407523eaf90cb88c98f541a831ccfac166630d6db197d41eac8100000067ffd1159c3bc6e485ed4836452c48ff5872529ce3db7a4ec0c31d051275575447e5779260a151ef018015c8efd94f89141738efc4769f7f3ad36e4e0b5a3b638f19953daafac44e588548419df11d67d5d10b1427e89d45180d2926726f9f2e4c703726d574ed80000000d422f6f9d38ef52a58a4dc4db08862682114c6b852339196f6ea4113617e247bb0de4afa7e000000ac1a854bcf4896820bb6d71d54483b5bee7135edb0e2a2e5068aebaab2ca4e9535c4cb15ba88cdf2346cc3c714cf5d92315839b563f9b517fe2fa4331a84429f25f8f81e18c8d37e90e5870876ff5d1c8f8d0fe77db9ad6a413c11b8df6c64b17bd18704a0128e74bac396e731864a75976abd719f1e6e2bb7ad09a1952ad9be2e1c4d3afc102caff2f17c786d92df0b888e67cab538644ff977d40f915df97c4226d9f3c0bf05487c44cfbe14000001d4000000f41ea726ce9832a44ef581c707055f3e3eb078bd9ffc87a7986de2f78e808ed0c6281f7cab000000cc589403c03b0960a8bcf4a8572972b1282727202ec819d4822d69e5de2aa76d7f596313f89c5a4cdda52a3458e0cdcceb84667c6ad9c88b5358b326af16f67386baefe460f91b5775c26f7c7c66c48e60b7c01161eaa6382a3ec256fcfceb16fdd2efac1ed3e79624bb3b3631673fe732ba31ba2cc9b15c7e2528fc87010f8741dd7d0addfc577d74b0fe0faa6ff0cf68e99bae2054bb9462222531ea2f5fe8f2f38ffad40b7bbc00dedd6b2864990a45b2d7f806c05a34496af7a8fe32d90f4bf915b1bca0d6696b73d4bfc3000000d82e81144a1fb567afa20fcdcfe8fef115801905a5c1b21ad2a137777e9a9e02d225b1c9de000000b0368f4d181cf7dbd33868cec8e741fc4cd47d9d2749e6f2e4eb0b0466cc986d904451434e05a7ed9a09cace8aca220e2a0ac385ae5b26340be84444aedf2507727095632006984d8096f24402149ba26ee8baec701033e317bf794b139794d6436673a7fae033d407605f2fca9d7099491e9dc957cb7737bf4202f62d5ce49909e2dfd4d4438cd13a42a1bb290bfc5129445c4341cf51a51d070aa39debb2822267ba549e0f15571e21745d619e54b77000000190000000b429a0e4041fd4e7eb4375b506b6d7dea60f02e80dd02785ba95220b8f3fc2702c6c0dffa30000008c27cfbde2231a4f04ce1e1451d955eaf662d302c6dc0062565751d6534fbb966ad4b2621b465e698982f1d8df4339e84263dc8e26ef6c532c54a919c209778b61d3218ec8dcd4eafcf7cd04e1c6fd0f4e13712efc0fcae86732b2b995bcbf00eb0229b61d5e410ae84fe8874a5c05e96af66b4fe5de57746138a7dffd8c3eb3c6a05a265e1dead28d89f17e7d000000d41ddfd6bdf9b673f023f3988aad562675c6cab589ec985bea62b5efc6b64c44fbfb25023f000000acffdcd67414e00d2eb7b473345f54ffd3036088fcaa0a28d105441371bdb9141c2236451c4d9ed87804f047e1d3859635acc15822e2512ccef87a1aa72329b5bf591152a77db0265333f582ab56a074f8580742ff7c70e552546d356072d7667538f15a280dfbcb4ebc24fb517c09606c9670de2a1ed83b07daca2c47adc531dc5863e1bbd274e7db2cdb915f0d9c09b1a333842c3e95192709f6d5411a50cfa0f82697e5c189071c906d3fad000001b5000000ca13919e6f5d0a24616033dd5bb7881b7f69c49528a36143d09922ac9d0776e0e65efc1861000000a25f25f9d0a75e98e9a14b798dbecbc7459a947b23c821e3b1dcf8ab88339054bc28d03585895422c8470215d4c8b12dccb53b377278480cc9433f9ddc12ae3b5e0fcdc61d21290de0b4c8faae622d8345d7080aa738489d289c29f6f4263b146794fb5b45e3a33c3c2fdf765a7b241fd79f32ee4ac5bdb2bb538dd5c4ff932590d6b5fe1545bf40313a4fcf036de2ddd18209dcf4d2446bd1acdc770ab69ba7e42edd000000e30ced5dc180e58b77c6cd5cbc215960147b33bd8aab9fb9873deaa58571423ea46126aabb000000bbe31d7cfdd244f7bdeb5e14bf8442ef0100bc502f847f855649f30700ebef4bef48be92f8fbe25b96e6a9f4ec24049ad0cf57ad4fd59723900479294b69dcc32e5784937b62141341909dd4cb0fdd59f85eb65ce14f4602c5c51485b90b7b0c797d642934761e0aa963669f8730371699192416d0900f526282d85cf232ecfba77583ac61b1ca187da9d897d86f942e8bd4f1250c9ca927f08b8afe8b40a8535b95612dbf51229b504e58c5b5712cdd9bb8c96ee6de4625b33452870000012d000000d402749b1760cb3568dece46058737991153edad29ebc76bec33feb59f4cae84e55a89d0f7000000ac1605a1a532e7f12ba58cb06322750e43bc860833d36e60e53399b6b3959834e90b49ff69c9dc1e2c461554ebec04da63ccf82bfaf6dd0f3377054918f89be463496612ee7ee88f817efe9c6fa8e37f39d12ef9dae4a37916b4143317459534c0650a610747d7d250bb9ffb557a5284aeea720141e6c7f1490b195aef7b5aa01c47f70dcf30d8f14fc11c042a1c69d796fad970920b71bfae0694079cbd0e629741316a1a7f145962e4cba053000000512ec3b89cd20d2ff6732ab8b4705acfc7a716aadedd69c3bf8c0774f6ddb7e55d297b234800000029254955c18d205e56f688fff36f4f6fa6c8e8a0970b9d1e3af7be8c7cc18b6c53c6c0df35458f6dcbdb", - "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925", + "archive": "0x26fe2d2266eedc92bda54184846983ba5ad0ff2cf003587cb425281be8eeec80", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b00bfabd1a217c20976dfa4c85c86580a7bee91656dc38758ec7558448104e3228be83c23b771fab8285f52f8de6afdf7cffb7a9619ac62d64348acca7362b906e29cec6f2f11b0f76c473a30eaf76adda728be42bfc903b19a9df220814879de7bc308b156656892a7c5cddec90a11fc12b3c0aac1f267c9066d936248e49a6871806f88811960261b9ae44d2cfb5a97905158efa79c49f766bc45937008ac37d89e924dceedc56ebb4869ce8249cbd5e000000b001c4f058818eaee13e034f88ea7adc006842c04cc8b3c3f78cb373d60890cd1d129f447d2fbf3e8d427bc6ef15e7a79b8a5bfb990cc2a9debc65d2e3acac2a3cc0ca095bda6478bb42b5281087aeb9e910c4850210e22de1cfdc576d749a6965c1b55cf8c2fd6aac286819b0c84efcb518c39390a2cab83ee6e6b6097a1f4e82d6e32abaa6457408be1fffa227a6f0dc23f609dd4725661848f6cbfc8e787a313b84a1dc2ca5c6706a3ae79611afd648000000b01688948840f570fd98208d84d0d335e5d399b34ad5da7d4f5a2c90b9a82f468f9f4759fd1fe3face16ead7939fd3ff267d29955647b16f9619093252178de76a5c0d499c7ecceeb46c77925b4cccf12665280122550e4d30ce447bd2564fd0871fdbd0734a3d85ad022c9eb57dcbd0aa242f92daa637d70ba8dc9f2dcfc9c6877a7a6e2dd129892769994cf4be8dd0be0e716fb534c35e86c0c495410431e5318ee5c663d48317f828b96b3fdf2dc6670000021c000000b02c956d2a963296947cd7e6d56661ffa8df1eec6430c80f64cab9a7e88037aa0f9024d2dccf842af03a97842b3c2ec90b6ba87ea5744f7b5d0581ff7f469e46f6523fca1d61853959e49baa54562387f103afd92879f3134c299e8fb08d0da78dd7b04459602fa83ef3e80921664887db21c0d7e5e569ce7f4a0012901f029564766eb1ce91071c54cd60e26a9e6a599c02094f26ca33dab04f6d994a218b97096f4efaeb0affd4095d046edc3c671121000000b015022d37284c82fb4a1e14b3bea1eb1f1be300bad3b15a97e7e151ae8ed93a5549692a73361a0603424fbc6c8a0db013aed1a96b9410d5e08e5afd08746c780837180c7c5d72a91e5fcc317145bcfc4c446167c1c4cd7e9a8a90fc3d4d3da23ec2f292373384cbc7c7322d914119fca92a29c4837ffce2eec580dd31b07ec73a5b088a7ed5a56d1e4dc6207d1abc83d71cd35bdaf9ea5602abbb2ca9aab52d770cd4809d5a5072e6aefd6d7acaa263ed000000b0295241f3add55f0a540ec96136895583ff8b446a2f2c759d996cdb058e4478e1d8f28176615766dbb1ff9fc3177df7d9b26ad74eab598f371717faa37a1298231fd5b3d374239ad160fe46245f44482432965e04e26701f2ba073039fe7c2aaecddf2bdb326f6259610d3d57519471860e60be82928bda0eaa591e8e30dc36f80c10332503c6c58b4a0c5f1de26d98be079574dab6bb86d3b7faa9b3b0cd8170d3c3fcf2e3d7bede3b3c9dbc1b48f0270000021c000000b025cc39faa8e28187c85323686b9289881a1dae51ad96b6d00f8a85b665853ab4c1e8865418d83d9f20425c817af8aa589957a7cd4c209f36734dc5595e1496ff7bb9bd19b98095f2fdd8ec6673edde458185645fcecf870808258eb177661e2d08d520d775f95b1467f49133d1de1130231a3436271f2453170fe20fb91b0d5d44e5ae87795267b112b33262796c652428b04c42686e85fae44a65bc213fe31ecfc5d5152597a19715a15f151a6f5b6b000000b0075270c5022df6dc7bb1a969a6394abec87b45d42a9409ddf272cba25d1d0935f7fe999bf2bcaf602310cb11074926eb298ddececb7760f43f8eb136156c0fcca9b2694a76562f29e0d800540c8f6faa6a78c6762a6732c3e1d111d5a61da81def8cfdda958190e5f00c0cdcb09f66a30a31eb10ff0ba58f5ac44de66a1977a28fb70610277a8ab9b3dee591003c42d51c5ed287ca7eb6cb000186ffade2b6b5200ff4edfe54cabd780ac28ac466af38000000b02901f7aaa36fee61328982f31d2aff2596af2e4909bd135026d1a493fdfc696ddf69ac8f72b4175603c62d1e5be9dd6ada726a45827b2c39a1ff25732e127b2c45a390dfde9d97acbb012b22168f0369d97346576fc3eda5af294c0b4810013ec6965356d461218e8ad7b63b7f8133aa0103ec746ead69f28ab00791a571bbc1e9913cf65c439ff9272e9716a02323c5259ea25dc57c44016ac93687347c97dd313fed123b3404e49f1fbd806d8bd52d0000021c000000b011e9bbaa1f32d696c126391d9a8e2706bab3625a10d686b4109017b1a728d92626bb9ec545d6d991b5082f7c0fb31632c4a8258e98191b9798a72967f16b134d7004a0eb73b916522e077397ecec498a2b676cc05adb49536be6f8345f60d666eeb211475da0aa6bde1262da5c7df1ed25d323848eb74e5dda0d3bbf62949fc52cac5e95d0b2d6b35a9ccfca8032087c05b0316eca7186c39fe8c6322cd7739c38bd48d273d1cc44555f953fc9d83af7000000b006f1ab189e173766d4f95509f7ec3379ad0439fe700ce2c5446bbca6db61a565d8496665c64ed672f777d9ae8115c4dd8346dc9722cdaf87b8634a18fddcdf17c72554c10a79cafb5cc3671c4441904a272fe84bccea327191af2f964180f2699e4ed5452798be035e67ce23e84c073b2a8b5564328f4619378683bccea591699db05a7772b29b4c10ec787d580030d61d0d7c5ebe4a65eca8907d31b7d3a998c3d6d0f9927adefa40e3dc20a0f04c1f000000b023484e27da90b2e41a5779dcbf9bf31d2235b869fe776c7b485844be7fa8d9843baa8a3c0334d6b57ab0f199944ad064723fccb7353f91aa036b45923628643a8e547455194856c81ed4061c12eeec188249410546b2f931e5e9710e6f46117cdb3cf620880631fee63d4d2f7714410f1b2567a87bd525ca77fa47d0fd54f44de3418aa99acfaf202074f3120d6d23e3143c39cd8fc7b49bddd60e2565c533d30a302ed14f1548d090cc79ea9bb53d5f0000021c000000b015937c5d192748d64dcf9bcf2d474fb15ef7e93c3573716392688c00fb1640b72a8d697f1f34b03a341060439ec5001548780f19834b6fc680eb56f241b78a93be2b0e1b6d2ba0ba179bf5b3e24b2b7a2fcf9426c3f632b0fbd66d7841ed7edcbf30289372feb051b95cef2f7299486014d04c409192c559075af44a3320a40933c7417b47674f9a268386ecf5edf1d80f756ae4097e04ee6ce39153024facf967ae245813d178c59200b6346e1ed9d4000000b02f0903cb0ffa36373b2843777b32aa9b0f2d4e0f69b5703760be2773c1cfb2813157f3587e1b56ad8fefb69e0ea83c581910b598d699b8026f24b02c90b649ef8821a7d847e17862f20a15f5dd3521c36257c552af89c4f607b4e66f7952d4cdf754f18edcf4042994d821b4d6185f8f012d2ca6e520202149f8f45d8a1ac26c5f229233a4bfed9f4a00a07741eb9f17087339b7a091c595a77f8778d7f4b7ca066f71b5c90c54da59d315fddbe0ca66000000b0106867625e6535accbeaea1f422a1f5a38db37077962b6d9fe0026a15a76ac1af1ae9f2fa4bfe375f5275597b40e96cb1c7e4dfa93bd490a799ac177b37d2bea5ec32c0704afe6ca4482e15f703e93e3bedbf98971bfdf4ecac465f5e7df9fe6f438bbc1ad22516de06277781a69a6670672478d28c98c73717ef1f19eb25143f81e524778574efc7469d6945d19863a2d76b551525dea2509a9586c74d5754d97effb1e3a64ad752e377f60a0128e4e0000021c000000b01d1cd1ab75d95213b0347908fd1314b442b193b45ee542db3c910d09c0207d9ede42cff393e9c703b2a69427b45f2ea3eb3e9cdce341f996a633924fd2540f94337682dea906cb4df11d29291dabf40c0dc59eff86215b4365a0260c2561f4f4709b2808e2458d5e25ad8b824250a57624cc1bad87e2970d7698c48bc57941b6e3e0454514ece959bf5896808d335db10b2a9dcf46715a87d1b9b7b323042d9686ec174f733da7c6ae841d01f2f0d4af000000b01de90f354f5750c866375e3f424f259da0128945e978c6b3f7e00455343a6ec2b50beaba7d5d6d8cc0565aee1add198de077a3a4630ad53e1b2f67bcc256a774998fdd544bc4270c0b904b1a42a2f56fdaffc5232f68f0dc77d311ebc15df7e9cf01141e8448eb188747739ca140dd1f2bdded586898468d572a4366290b0d6e24792424a5896e0eac9794cc217b8a0404853767d7daedd7c36136839085e791d80da0d5303d9f64b4af2f4e24e3e494000000b01bd484ee6850b4d9897e91a91fc027d0a96d79335be2097dd44980ccf32cb8662dfe8f18b5d38b0a4c35e8e2ed414eef14884e85c98f42cd4bf19e321c18d3973b9f7ea0d314edd74093e439b29a93f23585826423dedd98657de8dd9f1c4875aaab5ac0d47f01666dbfef57160e69be055a651b4a56832d6131b9b74c332cbdaf940d66d7308f50bf00e1f7fa0259b111db6a6dd12807a231b6f43102be6e564aa9b83b3eecf12ba6036612a7778c140000021c000000b00f9ad35bc618cbc5bd0fb73a5abc873b15cdddb68979c07fa73eb3f2a8ed4aa7e599784b4f00b182a12e50c12ebd27ca7d7d4ce5ed7aebbedd63eb6072ee30d19c835dc28b8394c6c0f1ed48426a9125263f98b7f8fdd7ab1ac7d05ff2bef9129166ef61450576da805b9149ea8adf4f1135c1bfb542b879137232209bb5fe3eef2176a3d0674ef291081515c5eea84a03f14e237bd5185c20e71dc63b6fdc63af731432b3800bbed88f2491eac7da03000000b02c2e430d33b29e0a86d5039d4f844e878ca540cbebfae068cd148643514a986685e146b313869ae9ec7b991fe35708fd54fdb3885d817748ccbbe587892fec9da0bfa5fd222469866e911ef4b9ec01e685faa7913aca93d064ba59e7f1f39234b0f1d24af51f7b3c043c2c2210b9f93600ea1ad0ebd68fd4fd91c5bb063a9d2c881936f9d09fccf5b6288bec639478aa019927d285ce243d3902f2689908d119ec1923c1c3b9c68387fbead781a1c1a2000000b018ec4a253f9e7f6b44260b3f89227a8092d73b4e0dd96f2914ce0061532cbeb3978739f92a63062bea8fb0b34de16c54d8a9f9d620e42a2987dace6bd4c8fab820a259976b45d2441e844285b41cdaeb8c72fb3c97955065396871b364f5c0ba33042b916f04b5ea48e3b8d0bd36aa952079edf6cbafe7831adfd8216e0660e23a9b8cc915e5cb923f7db63568cc814d15b38554b25c2614bb1135da55385797ae519b2d51e8a710624a08a3f79ae4d40000021c000000b0214a639aa08ccd527b20865f28017d5507bf6578c0dab9137fc1fdeb338ca1d181b9aac5f15c075d11f8cb57d7d17e651e2d0a7bcd41d719c41c969690770cdd34aa293860e3a79b798547e6fdd1a943b8264455aa9c8c10d3574e99dea654fcbebfbe1d26321b95f6a54b4e3a160fa12c43715eedb3cf82c806a0d68c0f7497df1cafbf47723a75c88811a5668229e00a7b5541676d3bc65f3ee1246ebb0f12d8358a4e4ff972553d8382ac26db50f8000000b0268d6077eb3e67a0c6bde8825082cfdc6ac4e73450fa41c4848f967754e3b4d97070935d54e2b566fb94e356f68861d83a584123511e7e123b1c14023e76ea4e54ef52e473ee4a2f2085a0252dee4ab6ec98f990b38e32daf9c9dc9767b59f2e827f7a81dc91fdfdf140314157baa6c020117e0ae8b07636f45d3817028e22425da937031e7db2189854a734697200b121c09a2bc699511c0d0c01e0fecf1f30ea7c4103b557b00e94740e36fc7b0da5000000b006093cd95a5538a5cc9626844e5c8615d09e7c5a10a0b63cdbebd1a35f4a86cb68c8febb82ca317f8140b06e4ae953f999a2f95c4b7214321b0b2c5b9d14e31278dfa1afc73a352dc113e52b922c088af465857cecc5e049a49f9974fa33ab20a48d2ab2404ce1903af716219f23b386267e4664a85ef6445ee8472b2fe447942004db7373c9337293c12bcf426d0de30e8ef6c28ca86fdc36a1956aad3862d6f522717d064c2ef40c999aa601b717f100001127000001e5000000b723cce687de2ea819430c8532ee479173a23f1a4bd476d3f8433c7ab54313c8be9c9e18620000008fe9298f9ad491a2ba2fd9e005830bfa3f64de14ea96e62a9b09e4d0ab2910488a7e143df679f645e539cb8ce36ae470f0037ea368541d5e0a729ba6562ce08a7a02ab0b41fbc0e4410eeed26b33a6c8a6b044af4a1f06729f8c841828032f540cc196cb73fa938157215da2b8ab43d4f95996833aaf1d725713667ad8bbd26afca225bd41779d9d7889a2cb4681f0f3000001262ac127c180ba94698629e74e4992b90dff7ff28ad800b92a001944b20815d753806c456d000000fec5269833aa0be565f40996c485683768132242a5a9ed9e411950ce920a170663bf1931b40c489bcf25ce482a36f1890f16d30398a096b6e659872cb028caf143413661f3d42556b2dd862c2265a50597acdbb772de00f61832a8ddbe344370e0d8b1871444542101fc2009f31c00d586ab65e46690340ef5a89574e37c09f0405b65516ee5c824e8b991a5446c6c8c16863e1f5aa7ce2b3aecbc65fcd8dd6dc6b57997964dd043fb9fa14e1eb274e0d8ff07e6052800ec7996e2b6db8a50232597d848c1525ed472c3950c14a759e77ad427a6b77a632dc0fe40621e1aab8c68f7d004d76e1fa024026eb23252c4127950bd5622d542acd00376be881264000000ee000000882c2f94ad9aad266f0c5a265240c74ba1ec246b2371e3f690e73ca93e1b9712c6331acc80000000606470ae7edc57e36513b55f05bae66f53f2c08cb16b5e802603dc52d24046ba2afe4763a274cdf32e8c92cbbb70f6150db74ce5b72b591d636bac3216336142745952608d4995c40223e135c694166833b0d36b045971adff18e6edd1e02740750000005e1903c2b7f1ae9aa0972b2c6889ffb663860a1f4ed50459e234db5d6e6912de050adb207200000036d80d91a855bd9baca90f7bee8ff09655fef9d98a33072ec2d2380387db274012dc49a0fd5a7ab4f07ef470f95b2dce4c5e794d55751d0000011a000000341dbb064196146c545ad468b880c658d99796e2733919df3f7585bfd74a3be62c197b2cb70000000c0de7af671c6768566fdc90e6000000de24e83355be60d632b6be43b7ca53a9aac8e45e50f4291599212a230c14b495989ea9864e000000b6dc83de19bb4101f189389205b6662969557da04a5d1cfcf6b5d77db6793f1788f177bcc83bb24ca83abcc1218ee483f21bc5129a52ce71f220e35c14bb9f53585cc6825ca73318a78cc9a3fee1128f99d71cfb7d113e517d03e6f5fea96f57f11c6c4014743c422c8778120be5a6428283071df9a1e19e31caecdfbf3051d71ed8bb6567c72f0478e9548008325c0a0a0596d74e85af272b82120f700667a54d50710d990b557835bbdbc9964e350ad4c4872e68daf300000202000000e7212c388b8e37ea8067ea32c0a26949c66bb9fa4f55cec7caadc220199dd051cca48f727e000000bf2656051776aea7810f6bbe10acc241fe9fbab0efa293e476fd7de970d03ca312800ed7f32ddcdb7b335177c332b76a9af4b8c7749d5e4352d0230ea8d3bd3f108fc15086f148472c93fd1d515221201aea9aa74cb3dfac1ea9010c2a5809b42cb59f20a79d5172599703fe1c5cd6e86606b04c3f626366eb3fbe2ba5ca7e518a47e6215a10d089157b00d925a97405281f1613ad48ec83e5592c07e3ce726100d5216dd82b85e3c0ba4cd134445bf3707ce256c299efc32e67234064e1d3af000001130ebbdef0927b69d51addffedad83f71b10cf288fb66fc19ba544ffe8a7237ce24b749cef000000eb4241f57ba861d2ba123e4b1481d1093bf84cd6603ec02af90a560647562a1f0185dcfa14b2919139287f49cd3abadf678b5ea7ab5b2a6f6c3c711c69bdc77c8a294caef76248cde9083dfb02609e882e04e852a1560837d9ae459ef2a2f61a3971acfe008fb7efb33dc25c80d577f68c61efec9c595e688f1f05869fa224e28194ebc4ae39070c0d21cefcfa50fd5fc42bd480af5910e22742d9c1b496342e569b0e1b723573bb4b0b2de16fedc1d6a57c14fa150999230a37df075a8c64f822f1527860c2e72f1c9ecbd9f268ab179658296a96eff7e8483488714b6f68eb42fc24a030b099a3180f4999000001d9000000bc268d0828d87cd8a502ea361bd44bdc7036ff16adc1a06652bba0ab4d0d48cc13c99fd8a700000094f927bd9fb7c6104218c115d4d33d6fcdc00aa41a9f82394b552f0bee22f966cca3d6a336a07c5a9855295d6fa1bf2d9ddfdc409ab05562cca49a322ef74c15bb4669b0e9ca5fe7f8ce6ab9e7eb840a1e330204b9b0f5e9b4d8c4a6bc715c7032d0264a6fa94c25966c37bca555cd8e74a04b5e3f62d4afe6bf86a8520ca67531a380659f665315c5de2173741da2391ff33063bd000001151da0ec5b88cb23222e1f7af79a78047f78ead987b50d247a0b4bf0252fb0bb1fb4c9c9fd000000ed7b47873bac2cc78e7e08b88db756ef3ce1b0eba46173da87c4819e71d45515125929ce8e7b663ac947dbd64b0797a4d2e8e8cd96176ef441893d5d1f4de852a072c2f5e69cfdf427c220638fab7b6c9a425603c703e42cecbcd47b511fcb2e761d4736ecad8850b44e1b54f59cab4ed9be75e21435c9a17b5b56766d2af330143e4c9f5264e1de012a35e707e684698062d6a8eba60c01edea9c879a069c58f615cf2e57281d12fa5e7df736aaf6a13a91a6d4914861a1a617251dc4c279615d66fb49b5fcf60bd941188f51a2bf96508c353d5d8f4d9a4839cb5bcd50fc8dd95b58996ffcb63914b4a4703e830000017f0000008c08d5d450c42cf013f2621a1d17b1ec7a013d79f2721a8d10626121d693c343efd50e593f000000647cc815827cd672a15a0076fb37ba933ae92f600bd115290090498418743c07dc8dd10d09d8323e6debff06e0e9f8dfeb0ccd3bc93577082c23497966ca5bc964a5492468a89a01cdb841a7593a83a623df0a6d12eed912f8f306fbc4b658dfb1ff3e3c36000000eb261d78e928cd503174f65fec339f2d3f28c853bffbb24085da1816ae9d8c8fadc5f5eef1000000c32e8b6e401b50027d7f10d6c87901b67687789c7c15061fe51e76c5ad4f09aaebc8feaeb6d2c12d8fa7c8d672f81adf518f273d4b487620237269c90f82e29f5dd823a69b3627c2e6ade7803e51375f34b7304fbda528c3b3bb0206cb021e82379c39ff29b2561b5c4a5b68e45441062ce6560b0814722ed6f8afc861cd620be123ca3f1a8d7dd6180ad029dac27b1c51e6faa1768a13ba41174f3fcb18e8eb218c541a2cabdacccadd2d40c67d26f5a3e024773ed888025df906a66b62c03bfcfb46360000017000000055107c8bbbc7ff0a9dc74d00b4a8c05090b10b1bbb00ef01dc96faff7535832df939e2f31d0000002d4608af79a61834deec45e6b9a02b13add1ae2a881b3f3a66052fec374204e54aa832caa12a31e5cb0376ff55980000011304433031fee1618a3aa792f3228a9f657d2f8bebc2b7e17a81fefd20fae4ad57a02d2798000000ebabbbcaedc68c3e188aea28d886ce391a7f4c9208b877b0aa10482261f2cd7e7db1108fe75c342225cbd745e60cc5c03530a3789e8287650f012d5997b2226cdd780ab66cb38a917ccf4bcf9c96ff312a21697f722e860c6a5ac654afd63ee036f0a1dd2d71c9c3b06da0e29049d9211cd4d13e5c6b0cced8f9263229ece7e7bf6080ea07fb22f7506e16a5c7495945b29e1f35f463d52bf4cf5a8c8e90483df4fa1c60264c477808e03289445034c21b115c704ad3fc7c0ecaab36103f93a3622e4b39a94c86c6c09b5cab12385504f285616dce852fba881bddc756289a08bd36b9cc276752346fdfd0700000017d000000892b68e9fd94f4a73ef06e0d36b2d139d353d062b2242e9a869a484365bef35680e3ac62ad00000061cab3845f31af9dbc1fe8cb32f24efef66821c8929770225ac234f5a3c141f2d7d342a1df83c7f8def43663a598c125f4fb1d189986dbc186a2e4a5de51f00f3d59a0dd42ad2b8294d83a775adb563e75527a2ca3f5e84095841f334f55a022efd0000000ec0686aef1af01bcf47e5304542a99f457275982e8081d402755b03d60fa6725c20773a435000000c49e975e32f57ceba055d723341a6381bf060c74be0b3652184144f241e8960d1f914905d3f8e7577c0eb33861ae0be5f367dcc039530c7d381ff93b9bfd57573abd4260ca97494beeb58e8a7978a4f7f4eb265336ff27b5bc9760ab5a4699ec03f13965831e270701b2ac0c0d0959a235c4ee7621ea9a46b9bfe5cbf32b1af0507ecf20e67bfe79595de2778e58a71ad81bb9afa8a2ac5ca9b0dad2bc0c0ca0c1ef016fb781c037c9dceb7157c3e7ac4f43a40f19e0602daa08a290bb9b4b58eb9b55283700000210000001111719e99c634f6d512867357b68fc302ef00a43be552cf2097b005b0910e44d2d5c48133a000000e9d29149c3190990b4c486e8c5c12aec61c1543422fe87c20450e37b531cbfa551d7a8c6f4a889ee0cd1a48648d4a15c4d300001905b59e2da533277a23cce44fc4522c3f6cd29b8a38a50f26b26dbdf29906db7a29cdcedcaa4d03804024f40d8316cdb670fcbc35093b80c5026c08fdf300f7a403cbafc354862a5c4c81aa0d8739689d0c812bfbcc4d9ca7f186151f42cda774080dff6cd04201f6a87dc8b27daeb008da7a9dd7add693451d3e0b42f03a9aa16183104b723b49c24c9272e72c49fdb6a023e9c0963b647bca11b3d2b908034693ee56b88a90b88d0148a2df12180d137e47bbf1282000000f71e970cbf161611ab339dfbad9e69f44d7b7ad2f586b3d018d28b250f901fa844d9b2fde9000000cf67dcd18855cc6d995a4b66f4f8fb43f881f113eeebe3d0309e34140a92976659b8e213bf8dd4282b48ab7c14abd27c9732d122d43e8c3c9424705ddc9063999cb6ebf12641c399cf728c0c89a9ea5f525f045c2309a2570e23d003b50cb1959ef253f7fa0b8c4af5f12a333083477dfa2ea4a2061f9eb6100ced5a0fc68cc2948ffeb2de2baa04e8fdf80641469236582f1d61277bee5e9e8cfd354bb746307033aa852739e389605750e6af1fb3f11c9537e6e1a0fe4e3f37c73f86fd8845b7575414847e8b5289708009090f106400000163000000b62905f8d565aed703d75cf7e60765af86b22d29b7d626a964e7566d0ec9efe93e446c31b40000008effd00e0d05ae293c606f10ee98126d367e2ca4a3933da96a1feb947e6186441cf1605c1981efd51b9a7a6a9674f93d5d712058093b8e0b275875ea89d22d2c46ed9cbc688a697895f749ab499b953ef6d0327393a9055242a74ceeceb2e039d28c9442a449d61cad107c5297ef4b22bed625ed22401a89ff62e942d5a9a383541da32bdfa359bb7aa07733e86476000000a50b1710661d2f924d9213a1bbfba0cdefd185024dc0b15263f9c86db1af12f6bf3ca614b10000007d17617cbd491a9075f479129f578952f366fec92068544d51cf17008098899d2c744ba39b71ee0bb51b56bcd83aa67e4034f3fc3811ab90dfe17a252375174f14ca70853b923223640724d28e0b8cd01796b22fcf43477b6e0713684897d34abe3ba16c008d988f3e5df440d20220957e7c05c26b9c8159b5799d3ca818000001540000008e29aeb398c5b8dc0f78cc1ef2088479a15f42c1478b52db17da2463be28992b6647acaebf00000066613d51e43dd24c9c45d8394ce18a7f71279cbbc01f45dab831934cea95f82d0b6c18f94a1d12db4231da6b54837a1da1b1fb0a511251cd73c093bf9c9908216989a1c28a96bf18397d39b6d0b702118c9ff34678405144ae2b4f7e848be8e4cf705420a72b30000000be117f7361cc7b8f2eb8ef8c4ae9d849e0895d9a525ccc7c595de9c3e8ebc8d9542d30f68100000096d4fab461f46654036bb1019974d4edaf5120b28491a177ee05169ee2cce341f78a73f95f8a1e6c6a850a37e0614aceb98420ad52190a9fdbb906d0592d1d02c8b87c2678da80c1da3213efc6ec257941a8f4c16dc9bdce2fea4ff61d9bd57b9ebb0b8de90f51d658b992c3af27d8e6b0235d834dee59a8e08f75aee8cbadda8419c941d266547f69d990c56c58a2a0d3e20b048e7e7200380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b00835a710663b4489beb637eeb034b93c82fa522fbcb8c8736a6a300f7e105621dce206b83d594d398ab25752add27ae517a8ad9f729c97e1056429b51f846dd14ea079f148c46a5481eac671f1b0c8646389fcbb784148e77907bcd7b62b3160a764e138ba900a9660d24f830eddc0c609b110b75000660aea70df9fd0fe034e05ae86221f6854e299160548f9b096d2160fb05bd6ab8eb17d956daef022f9206d0401990ca616c84036e3a4e9f07724000000b02bf7393edc0568ce52e035af24360b9f57045f66385e882d417c8c466b80870318efb07be2f9416315b0e93d66110bcc7b7bcf23f6251595f93763409e0fadd09042b32c055cc3d829b89b50b66fccc2e66a1412e655f58cdacecc4f136d97ccb7b6b69435252a9168167666d2fe342916bb69dcd9aa1c2a427d01a16612d32dde532bf7334bb2d9129b047557cb254d05a93c8eff133924370e8e96d970f5b20324958c4f85c414292e58fbddf73d17000000b01d80cdbc660fe64c936179fc4a4e7855bb44f34cf241e1d8ca7ffbcbd51120d6d222ccfa9dd0e4502a929f0aecd374eda0e3c9b05c25de75575bc55a39a27b80973c975a8b540f8ea6c8f95ba4cfd6498a906369b6b53bba0b6829cab873318fe3fd32be6b5b87299c2b2dd55e6b69500b725789d44a0d54b57f77deaa175a0d2e5bc5be18c67a940aca664f74e4668102e71866b1be0bd69bdbd90c2c9335567d39d7ce34aa8ef261b44f7822c1dd0c0000021c000000b0123ffc35c22c27ee85d9f9ab8ac2a45980a76cc9a8c9ee9b6c7b80c92c61c560f11ccfa26f3a7eaa6a76dea40c3250f3b333ab943b7c4683a06d4fe312f6232718c7dc9973da33c9d4dbab7ae743da173570c9299c92ea338c8c8e578589d058b53cfd2452bebf2302ec8b65b6b55b8b2fcccc6317e748b127d95c4ea6216747e80f32a983cb4c87aa6710b28e4208d6263f4240d88a403b0eef2a3b7e921e594430cb3f2f652ed6e18bb6466c8bb500000000b02d503b60035a741a120adde47a31256ad5765b4be7db6eb8978af4a7163b165179e311e11d46048b38737fd4b788bb2243d8fdaa796099acf605d99bbe752f74ab8473c1618f8957a918ad3ba1557d6ee77fbb06dd8e2e7ab9c1058c0b510e47032e57cd9472828a272501057a001f2502da7d0aa2fcc761ea0644d523e65223c4115e437e6cb8dd308a3ddbcf43b40505b5871ec8f614a3c60321213bb12e660945e5c04a6cb12eace0def12ca62cc9000000b0067266b0e752ce2e668c7154ec9d65f4091202ca33a726d300f3f3778923c85b75e2dab1bc84dc5b3c738cb3b97b01b05fe2c9984dbb1184d22177bf12d636f9781aadd7ab79620e07a5460ff321d953e152f0a943ae1d9608fde0182b2ed802264882308e1eb2e2f7c472246b5b80f613f8ea9e12756006faf0d4ec73d408a33564749a0235d58a3a3980e856ca700c19b5c602ed018cfed61b4da20f195c39c6dc8079138928b0e24a4126384ce50f0000021c000000b0204d2fa5b0ab0d7cd3ced46166ac6f4aaedd48046bf03b20b2d05900f8efff41cde668f861b5d54aff38865843e6c2b10ff90ac6ffbcb6eaa63417952d59b9d30874759b97a0f13aea81829a573942f7c588f52ce14cce8de30e17d7f307596035bd30f21ab715a0a575cbf3cf7923462be5910c359b3621b7a3f7a829da9faa3e16467b42de6d345f539fbdf022e5c02386672ce9e0c43b76804f02d1a41f1c7f2b779ca27dd5f189ae1e3391e1c75c000000b0083f2d95cc302fc3a2aa0f676323d4391da7bb834c4b03789e07244da36a728e54f825910b6011291a7a12403d4d6d6687e2b21e407d910b33fd3c3c43373fb225c8744c99248add074d3360c73ab0573d27838092580fbdc72d37e559dac9ce0397b2837f0bdd6c92f72d85b29930e106ab66410bea7895c3ebc30ccc970e17f750203303c092e6b393fc3246e6f8152173c9a7692930d5df9f9b8082bd097134a0a32d183d995bb5e981561bd47197000000b017de2523d653b3099b0ac0882ac5fdafe082e4faadbea2f60ee98501e9873a998f512124de80d19b00090c5e88b85eafefba37f6faf0c45429eb64ed20a8b40faf30e8d05cb6740011225e369a07c353c0b850fa8e21c4f65b09c966f80f5dfbda2fd35dd48ea08956018850c8b41ecb18e166449dc34bd6657180e839f1c12b0f483604d21cbd0af919234e2c1c9a881fddfe17078250c3e2eb27d5553f6b7a0167a212d8e66943ecf41e2e7436bbab0000021c000000b0264551e36bdb9cfcae0e07681dd5f17910229c46b0b51b11e3c5967c95567811e4bb88d5f863b1ebcd1243f11e7cd4b6ba27f4100a85fba878b6190b13f511cb1afd129b09934a7dce4d1b3265f848cae8c9c491548951e70c9049918b837a7eb69c858b1ee9a3da4f988c53278676072fcfd15624eca9585863aefb451219d0a3f6f0a753860a15428fad16ea027db52deba62fa6197a874a6a6ee60ec2adb4be052acf1bcfc4ada099bc963fa124ec000000b0217d60ae42b6cca53c2fa4768839ecb3e24d07d3fc2f7e2215524de836a3fc36c8c44d7f0357022e73314cf2f67f179d54743342b8946d49fdb1625257b91a0d30e77fa2c40756ee1d85d7b1cff26351326b2c638e46d4ed838ffae453ddb8a19ff1f7f68e7077091ac091b1bffc1bdc28fa080240d4aa913995b029c45f9d5bd516eb33d555521420a2b91a770b18711f9f4ebff129e974bc2c87740b3909c898e079130a66bdd2b443174a8e3345bb000000b02ca76728d25960e16b3836674f1eec96f748200943c3ca640468637501f14c107279d8bec7c801d04d347b38e88724594943a7eaa886dcc2f0fe4eeed89f6d19bd2eb0e30acd8a4d38d3dd47524b0be089134138ed44f5303e1b14b1f90ada647885003fa1c4d1b1a026f8edb4d0a4b62bf8204baffbac930f99ffb868b07e74dc824f6746fb4e588da71f35dfcbe54714ed50ce7c987df67b8d54f96ebc9ea539761d0cf34c683726443fca37fa0e380000021c000000b0115e4ef575aba95c4550fb2417c2eefeba0885cc78b4b68a4943dcc19135ca0c44967eb18c57a919785c68090e10b1965957bb8a3422b0641064a2b15d89e3ac679801bf478ede8577460ff29f4612f99c15eeee0810e873054c7a7d05602d34b9da717d14141d024c63f57f5517b60a20dd568fcef3414ab963193dc1fd9a650696195e3c9135a5ae36f1b1c8ecf74c1006b2b7ca115a7dad6fbd6be71092735e8b5c5a3d821a757062826f7692a53d000000b00f49882c51677c4640629755948a86bc662232557b5e995ec0b38499df1bc8b759aa48918cb0cb32d4ca53ac822232ba96105936175a2233a67eb1524d35c1d022eb784b7e421ec7abb952524b7df276e6ec7d6ab01c9e295fec7cd72a48f9c32cdfba61cf09f9102b0025f2e612a2482c807979f1ef27ef5ee70eb678397e32cec16d87e4813ce80b75a44868aaa83007cb0aae724b2e7d8bc50db9d71872205d44082c868d4d27a2f8995922e6e705000000b00f46183e7de04dbe953bec4174b80e15f08c6173ccd8b1a4dd82f173cf691840c82ad6ab65b888437f99a59d2c54dd61af1c3563149e421662099932a92fd0ee5a50a723c3d920e25300d7f8997ba5e739af6ea7a20af8c84c09d1e70c937e587a27d3e38bcd56710ff3f98da88f5d2730351554ca816be9f2be5af53f872d84cbd0e44f01e4f06d9f75823f043501581bcefe58c540fd05d83c7ce76ef08cf52e5c6176e7b40e98aba6c2b1b5dcf6e30000021c000000b02ca33dca4713ceddfc8b2d9c21ec0a0c73032bc046db98206b20ed5e8ffd0763ca0d2738799fd22ba06ad8d6db195dfa09923cfeca2efd2fabeb25af64aa40ab7ab79025edca6356c4c6bfd7736f2d6709dbdb23c8e86d7b5e4cc82b46219cbac7b7128cb4a5f39a8715a2266d50c511249beaafc93d7977e83ce0ea2ad05cce1965d6452a8eacc862722204729712ba199433d241126c7da7e3afbd88f2086c1597333823a0286f8891555086515aee000000b016c8a312e978934e927ae59dff55837b9e03795b6189da5bbc090d669fcab20b413c54e812aa1d24d532393a1d58e39500972fea25dd9875fb81a11ba93faee0c0d35f5b0b68aadd99e53baf894325f18b03af0c7445f46857647d9855d812960ab12206970e92d1fd00470874438871218a107baccb22b46b4249f208e4b84dd904d5637babe93656b92299a62fbf8a0d2f7e8b81fd67914c5b1e787e3b6aa0a96fac77e6f8454fa439b1a66d3f742b000000b00e858397dcb821d194105ce36e2d9a896933c19a76357cc7cf3c4d07dbd327be6484e44d275c5cf5a6e29ffaeab5a7d8d8955f57af4c0924f7560589984fc32239faa1ea2c89dba3429f85a50b80acfcd5754ce73a5f0e747c39a41713aede7b40d8af55ecb2cfbb777e91c9278486fa16d1cd6c66dbab33443b6adc9ff846ada13fa5b15bc64cc97f9e1bb8d56159a10896cddf1a6dba9f5b0717ebc663484ca9c4512c1840f5c99601d32e8698a64f0000021c000000b024cbc151fdbc8c6c0d768f29d026e7c39c2578be134a829b201cc8101f8704cc3089abaed2c59d9a7dd38366b9a27690165d0ae9742fcbe6f389800dcb663e691628a3e198cdd500e23f28abe5cafc3119859ef1529e6768a301840a702d86329c28d17a9a5e7f439c8288153cb4642123a4ee94580cfb8b21ce054f0df77f844c93b18a9bc8433a5b393cc38f23263008c1156714564876caed38e9d4d5c6046145c19f7c0204f31e5bc7c1d2b287db000000b0038a09bbdaa184fb3497f2787dc3d48a6f295accca2cd330e7638c5f948f3ab0e4662b939101d61cb6f7ea64767630c64eaab653bc1a8a1229360df34fd31a2dc9711e140fac090763e93de5aff82cafd9fe2136a157e573dd9a36ab4de42b7acd56b8edf960acc8fe4f5ef4eb989dea217c829707b2be6a875544dbb3dccc1466e2766d589e7126c6763e974c71eccc026650816d7f9247339fd8fb46abb1928e3b934fcc168346f44379d599547678000000b01e614542a04733b595c6e854329c73ddd9d668fef3fe932174b645092620fee4277484677b3064b7a27cd20fd01ac11e6c57a5cca7f9dd9b97b3bd8a8bcf9c663fb1a95ea672f80f987ea9a5a1a70d004d1830997ba53348682a3befe7bc9432b047fb291cf614f317388d031880ae181ac4b95c574b5cc52359dd56439137c24e8ee3fcf5056aba6ee8a33c405fc1472c1168ec9eaec9f65609b1cdbb43063d9922277c7dad9970a4a94f8cb56eb5ca0000021c000000b00dae8a8bf916b66a6000e5a98b9cf2b8b4ed9d4686d9ed85d89301a9d9025a21bc7a102fbb77787e015e9648a12c5ae56bc5cf4001a6e02336f4a278caedf524f3b251adacc1851e16efceb15a9b6ad1fe73329f91ad53134f94bb69413e6d60e59e55797d0ddacd0060faf8b97633a80295e4fd7933fd73bbf5132889aa36a6d56955d25d6e49f13cb7fbe5bdb55fa529f648a34d41bc36712577f2995adc7d194215c0a6eb0ee801e6e41e90c9f760000000b014e78d831778fc508f45c9231ef14853f4570e4ec99e4b677c48341a5095abe2cea22573182fdf9dcea388f5217bf295088b3250fab691fc46aee99404305f6eee0c09060045fd55e23ab293690744e4e234e5e652348258af966e3457e516c2d601a6e745f6745a2260d6373a677a7016e02469d1abbbd61a1f60d8112e94939e7114862bb27413fe05b0139bbc0ec813a0af5052527aaa69c85cb72d5bcd574c09d9ba654245061336a3d46262b2a9000000b00dfec3f55320a2957c4fa2f3f5e018539420c1144ee5237d9efa4798cd5e1790beb68d5dbc89e5f57ee1c7d6b321a1c4c316cf7c03ec2626cfb5db01118682bd0dbd4ce26898cc1245f0fec8c44e1993167dfdc5ccc4eec6c9a1b03635d51f3df7bdc79526e085c7e478ed192407f80b2d6f697f068a45e579fc7c3bc39cf0eb6b19c0d8be475dbe585a8ccb4c4dddcd1be22370373e4248b4eb6959474c4ec9b8b84168a5df4942e2087bc9d5d5fd0e00000f83000000d10000006304547e11c24e65b20e1bb4841affc412f9281f1640e7be338811d4832e159371fbf0c3240000003ba902e6d9289665c31f44af4f5b89241a525a35457f4faa2b3ef27d1c164da88461b3d8b94795d5a54c28a55a524f8bdba34bfbdb6313013dca39520000006616ddf1e7acf66eaf8073988d44161162ffc07a5758e34379df2264f7531dc143e60c85ee0000003e2c42f2951a4794d33b2c57424a65bd49334a931be8a760ea0bd98024c84bf3bed573c9b35d794c2e8cd0e5b7fe91f3181b818f3b52f0924d520b07c23330000001d4000000af1344db3f1d330067f6d639ee66b7906796bdfbd466e9e3f91a31c6f71819765cb8d2a8c80000008760fe64e1e3ad5b937e5ef89a6f3eae4247505178860897d82d7fc9aed011b5b79c4bfce93b1204f2fd06b89373a76b81c7bb8784291d78a01bd52cb1d41db69614ee7ed22d9247514318802a33a2034d6f0e55668316f157f14d56e4ebbc2e221eae2fbe5e9a13fbff0d1e1a67df866dcfe72e3bd8bb66add71593d595c99edef65af64e08e6580000011d2e3d162d5f9a32d108fae3375e36d40daacea16cbacc6228c6a811bad18d3fba8850deb2000000f502cb4615ef9bd919fdb7c1a50a0e0f73548238cb86d9b4ba9b8819a6c086891ccc8028f0cf799df97c4224668ed73ae42c218956d6fd0e2bb008a7916b4162bc304d9da057c21d5bf761fa567f83a873f883035523cf30f7e2848a34fed50fc0f1ef4b72ad9d61de6c985e3c7bb660999d8d4dc1c5fee69b50dc0c607140839de5c5f6f4399d25e45a377694df150a7ac3f472806c78e0c0cee48672990868313c4a6ffa817415b521cabca8ed5018643b1bbb11b6f307b807c5764dfb3cc505ba691e901a74652ff91e7b4b42916f1e3a8f6a4a346087c953f1ee681493427b723143de18af1edebd8f6f8a33984747956519027700000230000001240c6e2a25b49845dc42c3a96a97565d8ba28e1f124cf61676693423159cef19151d7dfabf000000fcbcb6a2fe005528399d63c0894860ebee3261b1870e86a72d41e0050800a9ae85e9a330fa6531bbd5ac4a1c28af2d2d89dc44ab17940c1dd843b73423d59a31618ff3d1fdc65bf5dcf71c9df94d22dd5380d64a1053dc6e386db0babce3c56899e77580c7b6dad3d36894e274bfa8364f3c6bad039d5a4be2e7bc51306a357c3aec2e7264acf1afd4397c56fbebc434536152f62745080473dddbdc790334435334fbeef37797cac7fed22055315bb97e1c4b58b6dba47c995eab8382abafb65e6200f75e197ead294c8baff300c7558222618a2df2e734a7df3ad60c967fea6585fbea250cd5815edf7d4ad6eaca4660e1f4a59aeec96e3a46ef5e3c000001040978209237e93e6905b15519a0cf5457284bbd6d28b6fd0070a5167f84879597c92e1b8a000000dce0e214e05bb741c7eaaba6f6de23a93464be2675636ad077b4a663a315e4b98694eb6071af31d463acaf4dddc939303d7733698f9dea68e6b84b2711ea94ddeeb715771c98232b59bb05a1b70d304978e0fa606216a5d7e19412d1087887f97474a6812178e450c721a1b5087c497e64e96b116724fba04d624c0f5b4ba4c2d4d2af41150c1f0c31c37e854d291dcd2cbc5b20effb77dd807482f168129fad6493ee21dd34c584fefb1b762705ca3d09992f58d6c2c7533b68b9d9d3435adf49d41b922a20f6003d8dd0de161c2da3a1978c67aecf451ef930c4e4fe0000015b000000fa142e061ae3f5de8fb03937779f88b9d13202707ec769baf7db2e8a9ecfda6ae29f5dc0cf000000d2f579e6e82c1c170acc3e77cec100b77e9d6b9ff50b8752c4ebc00f15a950f98a6a52fe5325e29916d9c1760264d28e43348557d16615bd893d0875f2a256510fa5fdf6c4b4a9d1c459506bb91831dac4b835d9e1b7e400e5f02962534982d61c4c9696754d35fc28f1cb0cba74b73ef497dc135a6cac242d7d012a2551e3b20cb0b7b400abb5a9330e6db36625380699a96460b6c1d77386ef0ff71d0a51624f9ad9ac214a5bdba0525753909b6246096d402cc33d18eebe65f341e3469a12aa2c95ff4cad6bc74fb3507588c838d39c13df0000005929efe1b08098a23e7e0744231282d8a37531ad55942336c0bb7cbf65ecdaeb0680ceaa0200000031e8b52e42a3a0aa1a0f496c7b8f3cd487cd8d29ea23895e49e5d163267bdeb567463480dacfdbfeeb7e9c928bd657be1a510000016c000000751cd0d627bc731c2c7757090004f0dd600a191082a7e7f20d3402822b3592fe5111132d670000004d31604b8448635a9cce9207ef1ec47048f980d9f11b0ff0998473f859b80117f7a84024ae7e2f62f032c93c398e391e678060e16e91bdd0ac21afff625e439bdb3869edce9382db45b9534cd4e2000000ef097c0ca0ec00756f1dc709f2fa09b83a2c9a896d4ce8b61580dbc39607197c319d72e39a000000c714bc168bebfae0949bacd74fbde297058120336a889fd304bff36b42763206a1ccb4005c1b436a16c206cd628e1df56e0db0b65e0315690dcda9877698fd40880882d59453ccdbc1637f52a7e2040826a73c7de18c900d45b34d029d987446d07c0ff3b9ac11edb1bd3cf3d5c11efe351998744776c1669050c02b920e6820bb04015404fcfd20b60eec34b67ebe8bb37f916bd22e7566229e968ee1542e338286acd865c964263854fd0ca4a5b4436ecafcd712bae56938198b55136cf4ec2a7315bfe1a0fa870000013b000000970feed1beb16f5cc0788bf2d1ec9a2cfdaa4a8aa888cc0f4948c3cbd121c033df23ffa54f0000006f3dd5e729d9b53e1d8979acae6205e7b0d6b9fd232b14da215f0a67d8f0edb658b331ac02f5ed6e08df97d23f5ab036208818c873572772de46719482059300c6ef70ec45326a3e1fd3969b4d6bf406dd9993c1e4c212ce276b3aed0ba53a034684e11bc0aa449a6e6f8bb695984efa0000009c1f996b095a2043b0ff0841ee99c93abf2f48eeb53a0843b2e0368c82324ddc9cec69c0bb00000074c729b8f9ac3eb6ee8c78fa466c825b9242a5ce2e06b837eeb26f7eefdfb47dff6c727f4b4e8813b01a3f3acec07bafafc036dc5f2286d4e1c12b38e688a6d092c7383553b8ac9fe38a3b76ce2a1ab7f9e7c8cdf597d7585c9aec0dea73498833b7227010e7e3ef4832f912f2bed6931f50995b20000000b30000003f0b38241cf9b8a122c1bcd4df24bc20a7f4eb44ba60496774d2b57bad22f12e5d1ff1937500000017ba4449b087d38426ca896f94cb2b458615cc2aac57abf40000006c1ddebc5900a76eb203cce578492c507684dbe16de50f60f8296993572552c82a45021eeb00000044b856ff823928ae48622238d416db3be99afd121d980d491a79afb5ba480c4af796ecabbf6cfffd242aadab846ce382495737e34cfa90ce6f2b65da06a29ae805daa30886000000a500000045133bede0cf12263d7c168fe3033c33280e5adc3221dbf814f27eb1a931fa3890c7a192010000001dc0054ac1eb800fe2bcb5f0c846ccbbba0555f558f64000ab52ef9265630000005815456c532bd1e4712aa24f7c2f8dbca47d36f2756b0bf32d8dd909abf2cb97d014c309b800000030f6c17de5915c5d0d0b47fe54dcef3946cd6da7c53ceeabf3602793be79a200fa883026f010bb2a90c3e55ff63b0de54e000001910000010a053ac92ddae83e54e5eec6199157a93288e13e0bb5d4a8aceeb3759450fa36c0cf533be0000000e2e522328904a04b5515bd3cf4683a3861f53f7c5c8c0172b443aac624d84e98a1b2e55663c855d90643a12bbcf223331061daab8e9bde78babbaa4069a1eede64f94bf8f5d952aaa32bd4460cd30178520bcc2717733abb398d69c870fc447124a9d3b7cd90a7833517ebbb5763dff5489dad01a5843e9469bf18bf44ad4f88d10e63be5816c99928bf3dc84b59427a9c501518e1963da20e858a658c5c8d2ef324f48c9a5296c6474a36f91cf675ce223b34b04853c69972871df5cdcdc0e85b36a8dacf955631ec1bf2a7fb64afb2e04de1497e48b18e0d48840a8c269b7e7c3d1a0000007f18a8b4ee16f694e6e7f7f936cebb67f355d167e19ba17efb590ecfcafbb039f1ff4221bc000000574fecca0eaedd773b4912c24f1fa9ace29b18f91e0786c1c3350635cc5979f032f3b1105166f04a6958f815b89a9792df8c1bafe1dae3a75b6f333db5e777c3e00f443971967940d8b8aaa712273e855c968573b40bb47e000001820000012b182c97923ee71be1c093316ed41e94d33fba3b1fbf14b21135be08a2374381cdffaae4430000010309209bde91b9ac6c09ddf08f70ea04f993ed2a7b551125cc81dda7f874b1c899440b2173c342cd686be31fed2a49393e620ac6c95efe72ec612e00864b570f1119ec8290caaec24a036ee913732ecf237eebea28b267ca29c54ee2723170219ad033edabd86295eaa9ca1380390cb8789df884fd2da24a555b758331fec1325c275306273df3114e599e3f2c1f61504daa15b63d4d5ceaa0330c4256139ee8ccda4e625d3593dfd28426e8891e088d42281a7e31071d65f906cc590780ec41ffef0ea71d55ed44a9b732c79289313e79c9d70c9c7a35386846fcc4cfbd9954770e6baab46e98dea37ba2eb69e6cae87334951667ee0f02b9ab30a641caddb75616a1f50000004f1594893dbb60f9a24dc98a2f749da9b4517eb81ece2dceb13331720818f2564aede76b6f00000027ec36d06d0738214d57dfed38502e653c85112948d563a9e6820c077a599649220ad9a26f646de800000215000000f30aed587306ac7805d328e92453976ce8af6d7ce4728f18aa5786dd7653f70b3a0dc3107c000000cbd0455d983dddfdd1ed9263dbdd367bef1c6f7595befcb4ad2911287a4cedd69ead05b8e6247f2bf9b96cca06d630d9798e0c9b7d4f3d1ae238591a8996a05c59e387c8dd640b1ed1d9a6806c70f6dc2a07f2e67cde377ba4f461bf3c832e50346974fa6f7b84570dfc2738b6b87e26854dc73e89eab679098c953782c69872d406e25355ca256c2143e1f5c86c544bfe57090083e82f5c4c0cee06288a881c5592e0b0b110795b1855bc159c71df556f6cb12f825a7c2bd70e3d4c1ca0e5ced31a1ff6a2879d167d0c59b70000011a24259cd6d0617c80adafead78476c80d15b9ab069b7a9a30c1dab4f1da5b1013699de5fc000000f2cf825f14ba1c5ed9cf9ae1cbbee1f2f988c5a4465ab1b4ac68d70e91f7ce85782798e993d4f56392f16285133fcaf8253fc6360ca4e4bd0578148209923a625efbca2bb1976bd651936aa27fd04ac4c8c327597163786a6905198c4cb423f50228dc6fc1dfe89c7587179bca89ce6d74064b81cb0cff4d51bbe9c72e894ca2562f8c928058f0bdbe6903aa45f8a1625708d0e89f8841ef48cf7aa2593bd5adde9cb0d27fe1e59dda5c0eb522149bf7e82f95664c442c8f747149524fad0589b09ddc61456a34f4a205279b7d0db1376a5324700951c1c4a4afb2e43717f212536451e25753bd4e3f39d884d7e511179689b4003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014ce5839704af8c3867798394d2ce67ad5a83fb5afedf9816fe86ba822dad28d9ade82540757b1bbc4282a967c8f9419745aeb3efb57c71290f5a98f52bfed3050948c07ffb6468f6d56c9df473d4fe46ebcd0b438cabb9921049d9052b301dd56389a7211e25a5f3b1725422096949f0c944fe86363b3ece31d91bbc308e31325831e3ad5728290aa57df3e0cfe75492586ad9dd64a0d212336ada5360d7cad309f6d71c4b14e5c3e32c2c1900dc1bc000000b03051b42a7c8577f610dae05dc65f95684751bb20f8c9a55229fa91ae4a91243417415f309679a316cd0a687204a7cba51861c001823f8d7fdc396118835f3231e9731985442e7c6b35c7ec7a078bbcf855c56bf34a7ac4ca1ff3ea4f8ddfa8dbceb13c060126537bbe4d4b95162a7da51890f0141fc37e6635f235be4400a92ab839c06de3998c105ac5e16bb515434f1dd24430b9fb5c631d72470db6bb59f17d84cba4a1a0d081405871b5d8d302cd000000b005f19ee0a6dda9c7895c0c2faa7771af7a9cb4b54498257ccd3aa2e45da619f6eb7b5a27d1f0e103ff25c26f9b40e1d11e05d14c4fae3acc680eb23d917ce092c7695667cbcbee159bb3fc17a5894ae39dcc65abd66f6ae4ee0b920fbe3ce9876174632eaedbb759653b87a9606cc3f21f1292ffe2c8bd847afd7983475d8397ffc26e572aef60b1a6df7b227e1255e6005a111acd59744e368472c7858bc59206e44eb8ee6b521e1a44d2d179ed0e8f0000021c000000b00fed4d73f883428e8fd68236fc0a44b718f30980451665155802dae19882db6f589fe994f69889611cfddc71fc4884011393c0625db2e30483aca72821787ad8e9fb40b1d056e8269760d79f2874d750cedaefce4525a69d50acbefb7c3962d7adebc165509e4bcd0bcabef5014bcd5a07d9bd6469a38185e0f1266efe9c939b68d017dfff122b6c34ae64658fae042c243d16939fd891ec4d0615d601d789d066861d3a077794970b3fe39814c7f9c1000000b019c1aab72e60b995b96faf22420e1c9244d85229999a39378bcfa7c07c872a035f24d3fc759fed54ab73080dae960235782d73c3256c64a152e6a2a085fd31db4d97e17a451eb954c03d75ef246ba84365f236cca1de3f2de4faef46659150fbddabce9f34223e8c0342ce967ef546610c801581c11ef655408aa7bc000eee9e7ec7f8ccff14fde54a153fff303ad69804089a822c348d0e021909de06ee1053d9b4ec40df21a37c94bd2fae690cf78d000000b010db5b5a9165f4d7b76baa526ea11f008f2773c7b2770b0286d9ca04e4501220355d1315fdea1167f1d2633a9cba600ac6b3988c76a2ec86e9e4157af08073a876c1d6f659a334f8125496baf26ed124d005ecb4636f07c3623a356710bbae95a318f4394987ccb526cc0365b6ebe6290cdaa6d07c2505c073ad2e36b2ea7d4e1b8f0397ab707af7f3eb87ea94a666850ff8b153871539707a74765462ad359215bca20b75d6d247000ca01600077bf40000021c000000b02ca309f0d0f5c3577b99bca236d21c0c92abba2b9d2f4bd5fa3e727b9f2caf817553f8eac7d552fe72be34f8026fc827bddc6cad7241b9b5b85f87a24acd28307f35a2d4b03260decbce34408bc63b73deb6943f21617c8ba9b5485cb329ea8c527cc00249ed3036277032b61887c5391d06fc6c591f6500e4edde713fcce41a7228b2af6a7af6ba2621a4649d7a85a72da231d554e6fb7e1e1addde2dbbee6989ee5bcddb95b0b3a670ca9fa7ca1eae000000b00223319658602e1d0f2210a0c65d7950422bd531528e533eca2c639995de1bc035d2ddf8f2caf1c67d921865301c36da24594bb3b5250cc63ab70940d4cf39aac59595fd9f26be1c3dc86b581aa79142ce660ef0f61fd1fb6935eb73c18a738a63062687d4231c9f0838b472605fd0540cf7abe791c03c525db33be3019791ba1182b257773d48bd1c77002a9396c9501f771b042bf646da39c7d148c7f4ca22b870d988b2daf2173f8d1a05a92403c3000000b0138581a37b8309942d55f78292ed02cab3477afcdc2cba77545d121d97455ccbaf1de43ad65b07d776c68adeb4dee0a54367de16d71eb4adbebda3253750f34c2858d15471e6508a09588a8e2145457317bc89f87c3f0e1d16e1edb5242f4e5646518da8771f6023cc9aa4052f749ec70837290baaf4fe7e9be3da4a5c528f514ff3312cdb7b719ba5982884a34e2bf20d9a5b3f26b917ede43b71572ea8b6a726e2dfe9f84c91bccb6f29de52dba1c70000021c000000b028ad96c95aaccd5ca0de9575bb5eb3335239896e172219b3f489311fa8af7f08ae11db6fe68bd9912e2baeaed861501699242253b11631a5e0c5932bd88ec66d78dc6fd2ee9b8ebdedafc6b683f94bc80dfc60c387a1508331b880861980975b30b749638ec55b0be96b0ec34f97eb2729be9a53ea0966086710e782a882105f4be677fa0c01bc39be98ce184c90a3bf1c0f9a60a43d7d645765660f01ec3bf887eff2aaf6e9964680a6451881eaa40b000000b014d09ae3d9c76ea297e3836f35a67b416838fc5cb3186753a7ece7fcdaceade9c25c2038d096297c7f3f441a64325e631b4169533416605dece247556aeff741d511126746890118bbefe11ae8260bfbd8c3c17c4606fce0f6b0bb68a374ceb237c69a11175219b2f6a5e8a685d1ac201a72b2f26563a55e55e412bd86f7777cf531b37c098e2c57b6d41e012a9bcb54181ec77938a085fd6b5e2d70b3403469c5c16986de6e1f9bb6ba69b37b8c1f89000000b024cf4592c0d2f17c209c9d6a3e92f5c7a5608cc8933cd28a3b7b611c56a7ba497cb91b385f8d9734d2af03d119277eed8b821a6815ea362f9a043b16775b2c180eafb300281398a2e8b2890d2729e5bc2e30d02e8076667e352a1a8abf499e7debad5198b0329dac3922f8e361cfeded266f79e1c4f0ceef03cfcc3e2766f1e0e70ecb6a4aecd8cbd2fd429a2121c028215bb50037820f39c7e50e49858e93dd5dfd9f2edd182de24cec3ac8663be41f0000021c000000b02a0e705a9a5b75f7797853c997acf23d41ed23a1cc7701475e51a7c53c229778af7adec2f5d993076394a8a91a938b4f2dc819d760853b5c6482c8602410af11b9b95fc725abad5447dcc3169a4c88dcd1314ea5273f43e4848b2ec1ae4c90f7903ada790a4fa55b797394435eb54e8e0fe539fb9669f490786fca4ea1b29fe8474d0159f4217d5eb72661f3de0b95c72588999f85185cd4aeeb0814c3e10612dedd1ab1f5b681ef3f4a1ae4778dd949000000b00ec2563bb9b61ed6380feb879275097edbaef180d921e7d8719c8d325ff30f162806a4ba177c485c8a712ef3aa2e723ae9a434c9c02fee5dca4c93f7206fedba9820c7231adce659278b55257000ce2d2cf41b326142ce780b87a8ebf01bccf33ef1a3472892375cd46ad9b9118baa9e266b4d4e13150615f5c8eb0f74cece1aeebc0cb2503ddc7c7993843c3a1fcbca2d6125ad43eda023148cd6bf253913f828cdb13d00500c01433d9b77b6a6e4db000000b0109d883a91cb709e2671450b9720dcde887c5766dd54a2c5724b2c9a8476d2593994d8283d28dac6eda02de12201b06b99874f6e293e03acb80a0c761fe2d971ea3847fb32eaf2855ac781669a48c7719801559a83a7b738958af72b1eaa74f771f9d0f6d88954f7698780c8bb1a290505d4b009fee69d4909975004fd89c0f36aec0f4ac9f45d5f0975de77d482de260096d7969297203c7d51735653103e001df0b6c64237a1c8ed2f902d4a38f9160000021c000000b02c2f44ca477dadc43fc536891395320bb20a11e4bcd1a4c4e77bd09ede8b6ca1e9c50c111b9552bfdb485362aa1e82f075d66a118d8fc1f1171f408681b08931e58d99aac757ac04b70a72b1e4a9b7d067a3387bdca3dd922cb8b0f1e2ef64e89140b6bd6a93f13950e813685313d9042c9e5c19694e57155c05b6d83a2356ee187c156259549c738e6d7af5d045606b0b9d06ace753a0eeaee13d97a2dc226f82bb8ae653a7dd967c170d359897785f000000b0100d56f3e50c96961b37bd3980375dc79dee5be04069e1cb0d5dc88ba8c7ecd401c31c9af686bf69e773c1158c248de91f0fc8c7fa234749f59098c6a8e55b5554b0be2a21335ba4b9b87dcae6683504c30410eb5f3f17b91f192f46ac515a65205792ce17020a6d51867c9b5b8f4c5c02bff2ef883f0c31c61d393a97bd330fb9498283fd5d90075d760dc7158d1b622095d4770f77016142c4c6ab08e0c1159e8748cf3e2d8ab3d296ac8b23fb1db0000000b00f7bfbc9d915a58d5beeba7c8ebffbb9204adae462a5e46fad2dfa87550571e74db4e3ea18f1289c907628b19b7d3a9c059f230cc1d43502a75d24a4e26895855339c957cf690573500c4da47b0b5d0a6cfcf7d22076726e1c1b9d9a14a31992b9a038771cfb3b7a37c38955d323c8f726046abbeec5fef51288a6200a27b44f142f6f01446d49ef44639de0aac418cc08c646e9957f239c4b75606ed7a8924b56adb0eca1d179210dde549efbab65860000021c000000b00cbbbc70408633a94bad1d9e4762bbd8af165931ac3972218bf4f01b8a4b2c8359d16950a9fcbfd557b803a79411f4bde654cdab9762044f213b11dfe34853c226d8baf5c5ff070722b4cc6b4aa765723753a982a12f9792b89b6f19883872506c6e8f3967539b935e7537e5af9f31a628d7f1922cde18f33a9f8719d470614ccb6167c3ce8d06e1743592e45be052a20bfc33b10356e4516609f0f59e42135056781087b6434f4db5e19df309d392ab000000b01c453e7e40f0f278807d62ee15a1d164ea0cbc1c91b5d50669641c74e56d878ce76b085f2c924dcb24d103c8cc1bd3ac553999dbda4a3a4809c5fd2c6928bd87d07e203d918a954bb785e7bba2a9bc88a90b4417aecca0862a18a306e69a7ccdf4001d3580ffad0d510caa3451b5633412317c077822d7f03d3669e77196a959db230b07d80f06fd1d1ea6297c51d67e23e864de56bb974e1de77b364d39d6e48a104f41fa93732677d003815baec022000000b01547525fc8cdaabc5a87162e49b72551351470be9422d5dda6724bd5bb44a5666619383d3e5844c517f26b9d25321cd96c18e7e97883ba336236e0b041d7d61c9eb70802f42fee02411c7451d5f67988d6c85e61753817ca64a5a053ab76a7891e95b8b69d26523bea9e7e1933892094027044d0ed55ee92dc94ff291ba93f65e0595072cede768cf78b882544b3871b23b890d4d93fc01867c57f303998468ca060d81448bb886588d54f13b64c44ab0000021c000000b02674f1c0c2417679801a2f2531c88dc17666c7300917f81c09f2fd7cafdd37438280642ab4937e704f53ed20468515e8c0f082c88712fd193e7704399fe9f73d53bffdfc6b46d4225d23109382942e071a636f9473039e1449a67e0193e433a1a5a03e1029898491d2d77cd8d6cd3c2a22bc186fb7e532851bf31296cdce95cadea780e68f692591dc22eff861f009761ea71de3c0772c2f70f8ef792df68a04f4d1df4cfad872c017df8213bc206268000000b0072fecd7e67de0de6600edaf2acc288306d6d81446c27e21ef229d20da7c130ff65d661d75f935adc2a1adb16db04e9305616b79b6a8cdf2e900c75dfb138f3b144cbae25cdbad630af512dfc8425b3e02b7622a8c1f26c6d1210a5d267ad1b5747004e641fac733bb2d2d4be7dee1e508dde0fe577613349f69bef0d29bef912e68f4678c6623bc24d8c5bc8142df122d699432c644f8fd39c9d6ab842ba27a0e7bac782be9ea76a1b964eba2b11e84000000b006c6aacabfc9b28405a0f6842c2b7afedd6b1bbd11d1a3d703d5dcd531a7bbc595addb225021094f716a0c48828d0882609109bac138aabdf9b3db72bea2b6eb61628c6bcc3e19aeabf40a9671a6309ab84a80ac743969f82c2efa44c7ac9e1fba7cc5d1445c1b7fb0c1d84dee172f58269ed295523f524a1fda52fd58e07a40a5b30821d9dee2694f5cdeb5f0ece8422bd87ac4ddfb9d1b1bab138121a1f7a67bc8b83aea349e7d611de38d608c2f7c00000ef9000001810000008d22eb91d867412bce1e26b03ca2c880b472c434561674fbd6bd94dc7ab286a53f355108e8000000651ceb3468caf1f1600a2b674ed3a1bc9cd14077fb525d36df1b8c36d19b7d28f1d31656b565aa506f07c2f0e2e6dd2d87c18ab99242c8a745198c801e4d5b62d22b11d6c492bd7050de0d91666ab343ad90b7700dafff49596d544de7b422fe5e0bf0c699f2000000ec0c671b005f8b90c7d86515fd4b63fe97d67732106f7acbbdcdb4e5e7fd9b2dab4c077084000000c4c31bba1d3a0ba21b141b4d182fa8966431ae382f565bfb81fc46f10211b4434a65aa82d5ea72e0d9ffd215d3453e5a520816f906090a81a5b58c717aec98bff3f761189c1dee87d01034848fe453ea0dcd9adfb79e5069e2d55e77bc014a9d9eb3701b026a9c51f03cc825950ce7571b033f9877795b80dd56ac3400e2709a95c70a2410847a08225b4aa157217d0129c02e8a8cdd93d595ee9ec3aa3885f93050013d35c31e501029599b486161ae85ebe366ae43b84181447367636c8410fb5c11b3eb0000017a000000a612ff30fe22a693f5f447f5e6e616099da0a6e26f0068c7d78e0dee14d2a0c56ee7f295b00000007e01d60e5b5c09ddb982a48956b2452a08caf92a3bbb60441aba400ca8c07c012a180bd27cf0b1bca36994b96e32c162b166ef0de5ef409771059b79bf1e0648a5141f5b0a85785036986aefc81fce5e759a17e2ef9e7be4c8d1ba86e00907d2f666c11fc394b9bbcf0c4c97768eeb9968e72ff3f598c567fe6ac81c035a8c000000cc04c09bf80fda134ea24f8eccdb27df79aa7634187e58897ce42a1bbf0cfa57d5e1c1b29a000000a45ecff77a9fd19b3fff16437df47363307482a22bce48b07592bfcd20adc54eebf3587e48ab3788cdb10cd94e02b375e595451f6ec8315673d41c29b308f5f9d1e984278b3911770afd610e49a263e72531446ccc8b1ed3c2fd70e7ebd5246b0c0696614f03a0f841a1ce29a6546fbfc8c073d8aff3d1208fd95be7884f5873010f353ba441af79f7581e5ba3c9cf7197a714217eb9deccb19366e5de13c4bcca282ce846000001d6000000de25b45244a72afb167af04136642c12325f9b3b33417fb1981c351079a4c49e504d3711b8000000b6e58f9e0ec1d36c25d62df6b6cd2f9d6593a95b853ffc703e0aefd497f62b5f4702528c3be758b345f08535c3f9ada361dc36a430fb3caa200a2684c0d065efe1f79a02b5ede3a3ab68713b3aa2f19f5500b14817af9c8636ec74773792f139fadcaa310ee8c26d81784df654c84103d99eefd7cbacd96d8ba7698b919d5ad3a6d070bcc4f7d200860e17e35ae9feeb71742155bab03439dec52b1fd18e50a48d1a82bf1f2eac7358a508b1e1cf838e7b09eab8c7b460000000f02c9c272f3bbd59508adb32be35e6593cb0c1631c8b91bbaffe90fc67660b5ef2e76956f0000000c8a5d8a84de84b980abbb76dfdae323e222d6cc84c145e2d7b6490fd132f7f72d030b6da8e4736c2433258c4ebe31dbe003bb531754c71a80e341d316a79af50ac1e52d5c75b142d962ed64a7eea72fce98482cf460af9344191460ea3af42b8ca86b4859e1378fef31b155c74d5d2d5f30672797a5bbf80566f83196969505de9a9de8e1ff7fcedbbdba68a95684a89ed6f2ac84e6aa442c40fd959dc8b94fcc9b8a5d4c95074d8d7bb4ff214166bbb06a2ae5da967f27228ecda0cb23a1659bfea10211b451df34b0000018b000000fc22022804efe1d7f2aa883971f0e9a72fbd9240232e40448a40b7f85ea29bba6f3eacf3c0000000d4b285dcb0f7889145b74c9e8dbc8d04e0443fbe1334c46c46b78cb04dc314cef7a2d4b353478715f3d41c53516ee12ee06c330d526d6f50a64f944fc81e1f0e3181a5cb279c3f7cc473e782d982269681d91114a291f7845e580dd570031f05144bfb17cb7c2e3a40a67281f7c2a50fd94cbb75126bff7590ec9ac08d23709177b46939155ec9ece5733d288886e9b2bb032576fc5a66829e8d9a4451234fbd82ad526ba9b213c4c2c7309e4365510993ef5a83da30f8d42bc5d8ce85d0cde0de4799e5af39b58d8d856f7467805ba8939ed10b3c0000008704041780d54233f9af845bddaeb07d73c25d1af0ebec0415820ae4abc736e2c38b8107b00000005f9ea94771cfef9c4beeea285a0e6798f766db5cef208dae58b10bab102f795402d974b4ef1abd9234e38bcb8568aff91af9b818f42ef387d77bbb2783fc11c5e1f9136afadf02a37c41227750d36cf2efc49a04bcac68828e3269a6800bc460000000a8000000380cfbe93d04ff38772d38f054f75dad993df3904c8be0ef478b1459c4b98102a58465d83500000010922714601b9bdeb6b85d25369b08f6d8000000681d95c9195b00149d435164dc6e801cdd851faefae556292d52614598c5f1ea5cdd7824ed000000406b1a232b40eb467af6d1899cd8a702c8131d1cab43f511b2ee0902695168f4d1205df453872a771faccd53212eada674118574ab35005c65f3b4d648a8a7621000000227000000f50538aaf621653229e4dbb5f8d77e5c80991a9e2748c284ca5a234df7a7871b914e075791000000cdf5d5da459d220552fd2f93023b429c544c4edece440c2b709a3ce63cedfc7c783c5f10fce3feff687bf08d1d954713d78bb3d82b28acd5214ad888419176ff9cea55957334ce5600772681b68f07924572691ad335d574dc48f64e54c3e4150f8879e8ec60bc0f70dd9a78b4fafd41e9766e24b13ab1c873125ea6afa47f2903500af413ad199de87a7dbbbc103fef7f30a8535cbaee825d691ad2c1ab9d8540194b81e5bd57c13402aa6d31fe953d313786f24ee5c0519c182b0607572adf235ce449eec1600cf6ec98a800d40000012a117699c17ede49a33e870ed430bb91bae8176f5b115f548daf31555625f6982df211ad6600000102770bc2b5e6eabbd8fcb5b4b0bd51630d83acfdf671e25d92a34712850d9dc5c70e54919da236a5030d1dbd3bae07894165e69c51aa90fb2929a8c84c8ac4c7baeb8c65e6cf73fb3061cb5c98f19b6c888ed162997b87eeba668db1a7ed6f108735bc0d21ae2ba9c83db71e1889eda1b934b029cabd409ed815778ef97b18dfd3c30a1e850f18126f06de72886ac955efee40661e1fb7cc3fd056edb8a0cba04e745cf57765333351c4b423be992c9e181cd009bd00d57e79030cf1ca145e8c1aaacd7db911443513355851e016f9369d7894167b0e843b33e021bbd1b722d678b348d67fbbe1b6fb1f667a74960bc8dc975ce296b34ab31084073181b2ba782ded6f00000146000000e32b71e151f447d020e94151aa49fae4e0f07d6a4ed5438da7fff1d4490978ddf71fd0cc50000000bb125283a3265b56aef77fdc3411e9ca81024041c0a343645e8a6d6684f8751496e962e30b0a715156447e65ba87b85c6e42800fa71fc83c06f94d7d0ce31f38d510c02bf7d44f953f8cad101cc506fae9fb59c10186a5d7ce2e6dffa4e95c357346fcc2f4ec364d1b1bd8d182b1ddc5ab28eb88d60b2051b9947e6b6227826ccc9f9daa2fccf10166eb57f391b0c840a053828b2be29800017e76218a8cb09aa3ffb79f3806bc0976d6089a35ea028eebc211c7d5856d8585b519c50000005b0d19cdee2c7fda6f632e2ab650c72cdaa34c9221fa8876944b2f91b744fc5517a87620d2000000332697f9161f8692c1581ea546eb03859b04a4bf1e67eaeb67d9029a7c16988153a14f7f781aaeb436fe7f926220089a635fa813000001990000007a1e30ac69e7eedc7da1b146b990ab18f0e1990d739dc5feb8f0b9bcef52e3e25c59d273a500000052b59dd8f282e3395cde469e3efb423462db516a6c78e923546fd1a5c6413cb9ed98a3a0e8de534843c5b4073920c9cdab2e9d35c5d43c41004c177f58bf2ca476440aba151cd1d307ce9c3f7123f8af42984e000001170122e7fe3d21b11302af0a8f7267e7252e1580637e75481b4ce041626eebd5b564add2b0000000ef01761781e19e8d9662422ded0b359c7e0159442c7211c69496424d25c3fd5f5eca6a40452f9206b88fcab7c77a2c682ccc5a82db449d8d9dc9809e9860b0732c8b3363972dda8fd310e6e12c59d990c7f090919ce6c76a3947ac46e2200c7aa22249541115f3a93de9f57b0d6783f00780fc691208928b990cfddbe6de2379f386aef938389597b4c6c0994bad0cc2a1f050664fa5ffdf7326cbd1a6a4c65ab3902cbca8da47d28b2563b58d8813904e9302542aae4cc8fd3261b91a9975ad9eef07b37d11c66e13f09f279df1a8108f9524d4c1aef9afe09def0c9f4d1e6e6c4e99d6a2db33bb95b411439eba9912000001260000003c23aa6b5ff31456907428d74f901a6de7160a2a41b6249565e0ea456e246817878eac2d1f00000014d6bbf5ec7b643c516534dd592a71c6283ece039d000000e21d1e09a3a06712a98ac837e2e98f9a4a476c82532455fff44caf068a74d05513bd0fac3f000000ba00aae9b812ef16a177af83180cd1a02863f8a448557a5b5e796c13518f808e61ccf4274361304cda2c498cae4d110ea34a6656aed0ce8f0c29142eaab278741c607670ff198cc5634dffea117b94288e0436aab1ba6e68d06209a0826a7f98294c8cabf49a63d66329bddc2a183c0638782cedee25593271353e74532e560d1f679378b9516c1751aadd8c5fb90714226010331e646658942aec2102ede069b3a204ad24b4d14a5e223a030a6f85111dbed1240972d07aeaa3fd000000b20000004e2032f7413791d5f8bc429ae5a6fc932b62f493207035a9d8d404ad93c0656a11b00a07a000000026defd966be5c0fde792bd4be9e7ab2139a16ab71581881e4fbfb55fe42d1406c3ee68a07f1fa90000005c1fe0833a7ca6a30a077d56bbe6999ccacb759293a3cf9cc727019aed9f0075b3d6316d100000003415dce71930453f29b9ba46fe84436e733880915d85042a7c2e4ac7f0ab67da012091bafe28fd2a1d3addd1b0474f5c07697ddecd000000eb00000035053355c3804bbb639dd2bcac9c38eb29aadce8c0f27dd0d0779b664017b1a3a0948261fe0000000dc6e5f90b5284f23ce6e0a2a52e000000ae1c2cce85ef02c4a0b1ffbd0498486332d5bf3c6fcf16663dfc83866ab85a29ba9bf819f40000008625ace777b2ecd723bd2f526c7ca055c1ecde8809ecdd988e1d3f31dc0a23a2c70676bda3d95b766f84dcffb1a898309f67ffd002c3a68e6a4e94e895be9023710f2bd4d90e6802de72730f2590c1721cef4fe552721b6895e572091bbf2b297b1649d471a1e2a4adc3315ffbf0621233e0f4ed1bafb393b648acb7e66b323f281cedb508b99b00380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00dbac064a384c043447678b1da39ecfd8588aae4427cb979402b0fbd43663205c8601cb3c73728503439e329eeccc5d4f2ae091c8e30a647ac8f0a3a925dd7a58be19da555e8b2c7027960ac80fa48a882954dc6577cb24d69f090831a294155250b10d59548de3f62881cfe684986b219c826c6acaecb15f0f6a985c248161c3a5092fa66a5175ff202f89d560baafc2e3530351bb3748aebe814bec2ab142198866fccf28d672f0a4934b6d5f1cc44000000b0021bd9591f0cf9d3a4498a1a4356a6fa2dec7d34fa1e19c178bb3c6f16b3a66636cfe9bd372efaab947d3d8058e9a2bf86f7619994f1e9ae2628401d5ef849a0fc81031f5ad842f1746a88fab104bc2df16628abbe8a3fd999a9b48388a1bdb80f6cbf9ac275ce7321947c45954086ef07726e5151999ad0ec1bf1f2a112bd11aeaa8a6bb5354561ef8681782d19c0fa0841bbea9ab97a96e1f311fc0dd38082335c71a3925655e0c716e088b1ef6cbb000000b007fcd6874f2f47693a9f4e77b1da068c677c718164c76022bb3f0756b45682a84d53757bd3b32e62e8c6b6ede6f8490e6346aab770e82929198cb25590fbee113f791f8a88c433fbdba332879d8f91e94496d40a191685b2802dd5325676128958503afcc3533b8afc0c3418428c15ec025ca52a12e3fb0a49574734c470a6220acb116e5578910481605931503947be11fa0daea15dce1ebdbb8d94795c6a9316688a42619ca934cc8c4b14a69db88f0000021c000000b0003409a5419d14105bbacf2e555f6672af564507fcc5d396f99e420997fd34d6bb6caea38c45a36bf5da78594fcd592ca3dbc5b64dd5e7d4f209e99211c97b3b507da158ad5dc408da5b14274d6932f597754109d6db9cabde43abf7feff46a7abcfb6fd23838d6a79ad1fae9ca9fa7e0f9bd810c7eb140d9102ed998a1338c0f94ce63f84cb92da424aa1bc563fc75c1298cd26b5675c6717b9bced6e94046663855dc0bbb8b58382f0f8ccfb404e93000000b02bd173d947cf74e085217f74f0f8a38aa199faa6b4564e4e114f7796d7eccf387bcc1168061e28ac0c328bf7511cf2d9faee27c7575b94e83786840cd3d6bf170356dbad653aee87f6f0c69ada12947423596f105e503c572dffd081fa8df9fb4f3e902609c29046e75665dc30d3ec2804e7a2415d75c734182bb9a04eff4f7a28dbd0f2dd02bb52b9a958133aa2fdd215726ef684b2074e2baeedd61eabbb1de961b6b2ec0d207d4d574109bd4aeb06000000b02c55e9702f1a42765828c984eb7501623cc555dedb5957e690583b70ab9d8605c42ea5fe3e055aa686fb3ef2593978db3ebbd33022171cc02cabb5f90af5af8937236d505c97a7eae2512722f61f952114eb0e7b307490d9ea51a64581b2bb23cfe6e8579a1fc7d3463edebf261b8360007a26ac4f18b485c36e14484c1e49df2c5856dfb5d823682547e2a3c9982eaa2519656f6139e5a2efef1717588e0bf781d684d9ded11fba7fd58fd3aee06ba60000021c000000b00ef94631171be0f59899cece98b8d8cb3a791a50ad18bfed698c5507f2db7deef919e5c3f0313aca37f7209c25a0c9e67ce56d512b28fbf6dc6f94e44a1e4939ca6c8968d559980d34963881e82573e9f2ab7bb950e729df4c3a02c96332a90ed7cef3ac6c7e29740d540a2d7d6072931f759b18dcf60433e5b2051ec8659d26f77f8e719a33653f4f93f475698adb0f25b3d776eb264cadfa2908e9364e4bd12c734303a6080baae48e6e7767a9a4a1000000b0177792389c74936da091e08679b528061c0b71601fc33d732cb06d54c3e1aae570934017eaf594ce5b0e608642c394b3af306c8d1707414fd574a41f0554d875d4a014e1c7d1fa64d1be81712c6649f5140a44af36b1ec3e53e2d4d0e10f9ccc78b8453414efb3f3586530d3bb62ad832be390394706c8211a4f7d259d7d7dfb2b5ce578922665370945852a0c36e4171384d7999096b6f802373c9eee8e764928f7cbfaa12ac61f6587f0e5a7d61d36000000b0034109305c350100fbba713a2a27a043d24918d6c773e2b6604ef361fa12217d7db1106f68e6e4e2e01bec6bfbc7979a334e8a194958912c6bd3af47c5ee99921b4513cae662d22b4ef54eb8ecf1c4496cfaf251301d0734cbefb6e82e11b7814c8d62d706bf56c76dc3f01149d935cd0e364932d061ff0d3a05bd4726c34aa70d7256252b0de98d9a15e939d169ead502bff2cf793dfff12adc60c2cf00dd330e470e6167d8efa5f68cfc35cd5dfa130000021c000000b011a1ead04d18f6dead6099ff8fe119a7d3526cbd13d6a1360c93310b16982e8f4f30d1182ada61b5924a1b94cddd57fc045a3ff1e21477d0a2490db7a50532479236fb60e9664bbde80cafab811422287b43bfa3f80fca7e71540b5a0b4da54f7441ddb9c2f8ac076e7d070385f5148f0ebd54ec4778598152ef86751e67f6614d29da9fd12979afe4a8cb1f95ce9ba81bafc9040607d6e3ee569cd6d98b49dc0dff5685ec24317d1a6863a53ca8ff13000000b02693ae75ad666a65079b5d3dfeaf013a46497c6fc6a0f164a5646bb1384831ac9f9c1b16a4a3de42d5da4b64e52c1f33eb09ee6d08e7474a17896de3a676ea9263c79379a1377b48f067130acfffc66c00512774c7860171f0842ab1ca1d71dd75373e3560282f834de75ee5f43f0e090061e8e7ecddd552d83a216f3eed5531d9d00fe891280de9adb7e6fad7693d77059a131321e673543e884812576fd9f7787b38dbd0f0358ba30d57d7b20cdc70000000b010f36cd118ffe8370f19323701ff7399056848c8484d3b85c485574a442dd8abdb6a2e8d2dfe4d566c27b5c271e6d3a4dc231e1cf944d6a9ce1f9f815bca2254a7b8ba16370939c79e876a9cd0aca722a113e1e07a00fe2ef9edcfad2309db54b0cbae7b4cfd53da51e6f7c351e2439d23a646f8cc81f5f39368bfccbfd94d01631552539662a9217f15cb2569ad9b8627c3163435d0d462e66b33f0a8af04bbea156699b438623457a15cf69a6fb7ac0000021c000000b02ca893738be1c80c3405156468b23b343ed26c3794888e73775fd8112a526b900a3010b96bc6ce047fb25225b4bd98f55a59d90facdaf0d2613d7b0a8a31b12cf0e84acf24643bd2cffbe81857f66d129e69cec7515708048fa843380542fdfcfed451a40aa2cfdc96a914a400b56d1c20341ac68925fcf7fa425d8455c58269f058123abb39c0bd51f3e82193562b4e28c93913e78dc27d0e77a39233af220e64a7398c8a1ff754c63b168cb7c076ac000000b00f4623b8fd08b7eebfea75dcbea2d4850d1ba00e92498ff9c464616883e85a452011b900e01fbe81d79a49de26a169a259a896109296afb0fabb5a088d753eea0e1fd3a706ebd0fb243f3bdc736774dd628ced16b603110e46097653e00ffad3591034e205cc65d596cdafebbf2bcb09031f24f58c822d05661783b56809555b2c0f898fc4525adb84134082fe08bf292c13fabc4d254d3c15aeb261556b2864b03a150fd37a1e82a34f7fec5583498c000000b0010dd479dc6e50a565007057b6a5e1621f99127575e58b43e464fdeca6592d8784f5817dee4bd01a5f2dfaf728699bd9b0606d509e5c8f5890ce5a9387e216ee7992f66f89dfb9c354275315facf778ea2a3d45883ae3748885f34af866e167eb83544f7e69dcfe702e64b1709eef5ab10514a87cf7dbc1895a9b77f92f38a6e6599ef4727ea6da69d0a637bd4bc27de25a61d508ecea5b52c2e9c8f212c838eaa9d3b0f6b967103e6817f06ec244ef30000021c000000b025c3dd37ab57c24efdbf60e19425af0fec5881a5352cbde3451e50e71974964ae10615088cdb1097ee5f5844975d7ef9062a9f923939e83a455887a6d3fe4784102c25b960f67d2a18fce828d88b4f73feb84ccde9ed9ab3604aa8b183530430e00a738ce112f1f9a64feb4159a4486b068607e8ff2acece1d721458148194a2495f5014e40715399274d5300ea672fe1d03174c6035422770033abd6cff609397af8faf8576bba7160f0e8b0b976a28000000b02328f187d5c9cda5102c04e0340adc3304d0463a0ecdcd4f3d5a6e71b7c36000f9fa2c743f22874751514c50b58d86ca88cd4dd1c137e07dc4c281af1c1011811c54333eb366803fe35e57fe87784722bab8382d6a377748b657f5f0d0dd9cfefd3c31960c16281bbb6589f4e4e691f7265acf3ad96d0439858793ea98f96af5669f54d8799a8a758722f8bca410aeb32f2db4f139e087d019bdb3224ba2d482d1f9d21f74b22935e819a1c958c2eeff000000b003530f64e7f1739743342378f042770fc5a0802ded4c480f359f2b62a9d3b33a3a4d47c75eb9fafd8ff800fdd736e46fe2a4796082983276d3539e57d939d4df6c56f517f6eac07d495a4b8ec7853d56544e45daf3229a9db64dfa1fe1f1e8e73ab0934dc663c1fa6b2c1a2e8a08198b1a8e9ce2cdb1479350c19a29c0c32340f12c5726d5b8b9bb3e3e9344f7fec0ab0eb1d4feac09dfb2bef2c0d00f389e5f9d897fd7b4ef2ce902c21bc1f66a9fd50000021c000000b0015b85e680e2d6b0c1f0e65caa93aac1c0aedbbc4e7a76492981a5c5c8b60cddb90e6a87cba4400dca56a98cbe223227991e458ff170e5bc828e55cd2abfd24749791249d7668f848b57a51c86284ae66c6de2f487af8f4cd741f3154689e8ddca4b3ef04c181661b61ae4726fbc5494006ef48479ca1ef22b33c18c831b5cab901988c78e4f9a4b20761fa59a94c6a320bc8ec962b95a819cac856fe2bb2e73dfbc2f01845794ea5644c210dd613032000000b0078936e643ea7e744cd43af507812213d05f6b64fe43d0cfc647fa7018e107aff1f7ced1c3fc6749c18cdc18990ff1d473ba5ac7349a3a9ccd96da0e337596176ab646801c2f5829bb885b9352c51afebe98b1dfbca4f76427eeaebad7dab838cc8e60b7dd6cbd6ab9a5e6c71876b5d5234443b6227a317aa25b1f31f4e8a63f2b0b996e3431747ea5e6810462d25f152c25a70a4274b033d87c7799923ee088c9109c149775d3072166efd2fcf377ec000000b02c5194726b59944bbed678cf3a4ee907c3406cc682d8202ef11501b37b75df5d9d0c4b421c7bdc46227537a6bac1c7b19038e25b2efe135a2cc673bb8e9f3aa153693e179e67252590b7fa4ca61626eb013f58d10b4e0e6e8402fa0a7578b1b9950f3de5096f9b1ef24ced1d76371c8b11b09e3aaca0c307a3839a0b4face6d73fdfad998ed85260f14b14ecfddc65fd285530d404143167c7d1fdc78adb8312f27cc277eb1bd86c0f0ad8ebcbb09b720000021c000000b0191bd15e836d9e6eb9abcc11a1f731270e8e804499c6a6fd2b27b0204b35c2a5c2b3fc8ffd1f00422fd757351caa6f2007160921f0e0ad0becc2204587b8a17670e2be6f8aeb8977f6b95de851cdd937d9461b9b38bdaa6804de9cb81b79b1494c7f4a80400ec99eb06d4c724cf002e90dfd303017c2c2b4e13194deb8c722a773b27bd032cd522ccb27cdd2c1e5473217dd058499e32881f24704b5665401760059c44fcdfec39f80f6febe2a16e0f4000000b0270f9629885637cacf1698792911cd199495d864cd8ebd878200fbfbfe67fbeeac022186a938e7df4ebbede71813f39e96d2d0f16eaf07038322ddc34aaff9f46176d205dcb478c6ae3f5ccdec54a97663d5a6c64a8d46a4d5a79342d8f79f05b64562516d454c2997590b0c059ffa5a13fe5d102b9889801188210a1b92b17aea9db40e5b0e5a710730b1b6eed58d782865ef7ac07ede4abd7cb3cd8b109a235b6889b66250df858db51a8dc1f14f22000000b00a1bedde4d5ba24b88d7369103371e2340cce101589d74cea0aaf233dfe7a8ecfed44b1fdda39c58a99bba19f9d79d1c266ad6530c0020658276886bb849e9b15633900c914fbbe4f21d7695f9b75d3a6ca6e24ae560d4fc181ebb2bde5fc3b4b5af35856d5ed8a3f147b68acffca63113004ddad1c93ae485cb3d4d3b0cea2bd83a4fb28237b5505027d496eab2fdfb23b5669b684f985b3bef9a9d2b178e65084cc0382306aa8483cfb254dd041f0100000d7900000195000000ad06de06a2aff183f61addad43061ac7187f15cbfc5775141dd2b549bd206d2c04cdcce1690000008522595f0bae9055978c5d853bb9312063bd857bd138f48d593209332dcd389610417f6a5a73ae926b004dbb1f219afce64d11b608e2c32f572156c9a0a0476c21939178da6c79cb1abe883c106061ec361fdb2e7c90a93b92cf0cd5e40c92ab0abbaf854ce40a75caefdf1f53f98cbded031f4c6ae8ec82317ec0bde7391ba063e94bc7acca000000e021bf9c824acd6d654ed686be63d2526586d7b65e3345cd0c099809368a86e1eb0c5e603d000000b8553f2e6ce25598569b45ea115700f71ee46cbe0214a1cb3c15f73b0d09e347b08060a8d5170ade8e2011a636f012c4499c71d32e5b7e708071fa801028aaba32df888ccb7367fa9e86ac160eed9c3afb2469c843edd898afcd062bfdf283fd7130a0715b194e6c3511fdfd13ad0293c35653a1cc0b88766cbd8a540291278055dd65d572b6909f28b1c725812ecf6d47ebc31fb26e92a8fd323107f6779085d81a1a1553c779143739dc8a93584743bd05f4e65642b498c4000000930000004608bc098db439ea1afe79e460c6beae0275b2a73f91e93ee938f60606fdba48ed2efd444f0000001e3c0bc40292d999b81f9ad6700172ff0567ea49ccd41f7e1ee22b5347da3d000000450b6092993fc24832f40083affd12ae0d62b32fb79487f6c24bb1bbea187044e96fa2dda60000001d0462266f11a6a247885a9c321ba6af5624a527695189feb57d3badb4fe000001310000006927632b3517114df0276072eba99897a94d2ba7f6d89e7e092dacd0ad577177ea26ce0674000000410b861d719cf211e3648f887ed0cb2c0b42d1ac1b129bd021d71b8da2f8acb9d04cabd4001078c04e3ac995d9af735342552f5881123bc05dbc9bec08ced7ca6187000000c021cbd06c5f112837588b96888442b7b1e0340170d5a728524d3ab9dfb6b5aa5bdd9415a9000000987de69f0eef8c645692f0c0c19767f1f4efcb10b6c4589156551d2a48e819c0fd5adfa4f02d01249af6673b8f91e1a13d39b6a8b64146dc7bf85beec29e8272932a44132c76413bb9ebc1f9203445dd53de241d3f4e759703a6983c2b8eb1c4be891a333dfc9069eb70ac1a7e1e7de44476445396b0ac3ab4cbe14ca696319e23274f9751c54a1d7ceb1f2bf7c3d8e49a731c6e421586e191000001be000000911e687b0b5d122d439e5c6760b6b850fadccd9c31b52d59f49b63d0b4e4e385751b4edb2b000000693bc7f122b488387cdeb326c8d27bd3d5a1fff097d4b02615fa42ca4fdbc647e4efd0d853fc7302b2da57f4512dd315ec630213cee7964a34db06eab65387f79ab524ff20c3191b67ac8b0584d9c8e269ffc18bbf6b65981afe2d794343773a130026200e730a72c0450000012510c72e479e729018ea105e1b00a9ef364725ae974095848288a31758d7831d683e65ac54000000fd5cb2e3484584039f0153c594c50df298b06a7152ba738d41de71a0226ba2049e0ff1c65302e5676254bed94a6b3d9ac22562eb357e075e0a46a23a84244d67dbee2697a0bc7234e807ce1e9994e08e8a52063f178139dde075503efe7d2ad8a8d13e933d897330c2d3ef52ec3cb2e93192c0e17c9489b4e352ae50b5874c4a8de242885afa3f06cc7383b85192e9f4844de8c048ad224a52645b753345736ce7d78dd10cd0331831443bfa35c371bbab34fafb0b22677c5aea8988012db4e1b38d1f83bb838c6787338b8650d892787c9a4864a100d94d18456fb11e70444c6966beeff4c6c3a368a754feafc9dd40bda6423e79930cc48d17c04da0290000012c000000892ddc61d28ee7420ae3f9cbd02e5506ab62f51867dc296a5d2a662917651c2c754f118e0100000061d715f6127661f7628b657fb5b71405f71db83c1714154082fa09286d927f54e2082251edf80a0f5233d2a77910e00bcaba9af05d121c0ab262129a9825c40a98ab7d62c55d5efaf292fc2bdbb35c0017d79711c48ce48d26bc2f9034fa9954fb530000009b1365afa8038a85251a1b35b4443c8f15a32c3d68f0e875603ff9c44f4f17f0c59530a48000000073c39e9cc373c4d00b9e6d318e64a75cef3afd60c093454f0903e5d8040fb4d206943cd4589765461fa864a996143a376759ca9158d36afc4785636eef7503755aae46f75248afbdbc4a25c278b84b1c79bb173541a1eed907f5280b1ab4b314aba11258d87807edbee6414b8fafe6075e809cf9000000f2000000be2530fbb2120b916544f53ec287f6aa4e97ae658f8705d0fdab3ae2a11588b0f79315dc0100000096e9f37f4fd5849cabcc19919df2249a512eb86fe9e036f3db4981994cbe75b1abcb9cd73d1732db76b79c0b2f362d96339de893378527af2209099149ba46e353e94f32b3bcb33f1db8203425ba45735ac27dfe842dc9901cc10300e732ab8c3feeab88adbefe7f0f4ca0526229eeca52e011af8bb626dadde20673d86de0a6416af20a095a4269edf3256fc00cb7a57ba032317de8350000002c1576e74b66416199778534eee3819b4e327d1bf6c84012e15f0389165a4dcdec4b4376e600000004d8131c40000000df0000008b11d1cead1a2363fa5b472da68350ac198e6bbc8ec9195a34bc2fcac9f01937e3b0f561a3000000639ff00449c66060c6eed4c7b82fb521c25ac350e966291c96dbdc2b5bb5e45700d74bd982e77dd5bf5fc8383e70e41f2ecea3e9be94af79b602406fcea03f5a29cef021f61b5d96add50126395e7d09617b2f9cc0888fa91f732df1589331a8f111435a0000004c21606f6c13cdaf1c91f74d80892a8b49a645a48d230cde0924d0e693a3825d682cedf56a000000240acf15fe87adf1c1a6973aaba3a5afa64a484936c8adeb47ca69572ae51a5d357fc40f150000019e000000c115287816219a4d3270e99b22ee49d268276dda1c1a0d2fecf034f9111a8ce02cc8fd29d0000000998ad96e126ffe34932452500eb51e7ecc504b1125a9c66d77db6b02898760ce1e92ca8ccd282716ae7b355453fc5cb24aaacdf935a626dc63fe384e7458b9b0ef74285089d84042766a7a10ef15a4d3f1cddc40fd9954bc2d45c40fdd94ce95eb06710e79617c18879731aa2f5cd124f56d8531bbe21fd74a1dc91d54be95338b75364fc1a96a86cbb0b3fed4935fc872da551278f95842737b000000d51d01384ecb8e608647a863bf18561aa36cba5bbb5c116cd8c980dda9076207dae7751d57000000adcb883aa141da257ffe237df7e777424bdd0e1d5ee9ebde13c6ccd3ff486acc026b3df86f71a7fa71d882e443b978c1648c99aee4d9cb3b268cc383f02b42c5b70cd0ebbcebdb301413db462de93912079fbf9017cb15e96b500c15f2a82eb9ea0fafad948cf5c67e96f39ebc74ad1be183e4a1bf12eb4b58592698ea3a4befc9c48313fd19b43cfd9ab2a83b8e7d8ef25718eb1938384d95ca392c3c5c3988a1e1571df6c4ab2f761f22e775c7000000c10000005b2437a2d6fd24363466a201bec6647bc5bb60664da7dc82c52889b4ee9fd1ed3a88771340000000338ece269dbec8a638968c9d8787652c10297d654453d46b8291c0795f34fef1a6c991abf3a692d89e2be8de5953784066a5e3050000005e1f1d70961e741d20125fccbf25e5d2b5deabb7d2cf913e311baf9d39f84fb30ece3fa6310000003680af7e6ef9246253ddd8dd45ef763790eac4a24c36a165ab141c56d02fac66a36f483cd0abc327b97283c2eb623a558dd52ca4b43478000001b4000000ac01e777b533149d8a99e9f7163c7f98e33dad1e81f05f548a6cf6df02b74a8c26e239ec3400000084dc3794fe106fedc53aa5331ce4a5ae1d0ed41428e4505799c9ad8270f02bd4bd4ec918114f84b2e86d8fe019f237d24e916eb025f039f096a3c5654c059b4040d34fc68331bf5280534dc3a5edc2070a479ddf8c214a87731840c0b1b9143c2c5b1d25de7740974649e46a6dbc216ec89d4ff511d59d1dffc304c2d449630fd7a2523e4c0000010005992562fab9871f0fec7f52e6a1b8f7401292b717a0a6b5ccf2ca5df7c0e74240cc6c36000000d85b8e1b8257b97fde4705408f2a016d6938056277a2f9c93a3bd29767976793abb6996759cd47bd60a56fe557fff4b6b32f81e73ae71e10a2dbe2d47dc4d5f53b94d3e8eefb42142dfdafef8666f3a2b70d7d95cffca65e566bcaf905e9c418284d2df202acc5ac925af44aabcddf5c1f6c415efba2a6650ee53abe5007ae2427c814f25e191be625f89f478ce58544eae6317caf7a4e3a5e826921f28a9cdc1e592b35c75bdbda23a5990ec28703075bbe3d8cfdb09596e2cc197eb2c6999cdcd5f73beb89290c388c7ce391f69a6f5ee5703d56ca843b8e00000126000000ef223ffc270394bbbe68b0cbdab8080a8a42156c8133899270a70f092c1f87ba61c44f9a90000000c7174b49942013a1bad14efa89d81a4f5903d2243f1386b3a4ff79ccce5d1d5bfc908d3358894d9d38c10563c8f9a9d5ef2939447329b2c918ba768bb821ca45e208dd34aa879527db5ec6bdbc9f98433d26001d62608c895b93855b70ecfab04893c4bca0ee958b92c79f63c7ce6c3108cf13bda44471688ac2fb5ae5a317ab25a8d91d7ce746d63b41f8869e574b977885362484fbed41e9872dc9ed9fbd3553b5be52a391146c238020f44b4af692601ea27e7997cde0e84f19c5bfeded9377773bcb5621fe420000002f169ab4ecc6770f57d1ff1be8df75cac22b7e6d35ebc00cae05177b25ba52cb310f2719d900000007264e43a08f9753", + "txsEffectsHash": "0x004b4ddf622dcb5a2c6abc77193d6cbcb2bd5de58f5d443cad5f25b365bea885", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925" + "txsEffectsHash": "0x004b4ddf622dcb5a2c6abc77193d6cbcb2bd5de58f5d443cad5f25b365bea885" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", - "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" + "coinbase": "0xd2792e76d3571d2770cce1593643b82c9568ea0a", + "feeRecipient": "0x25b77ee58939a553fa4b5c18a2198427213eff66bee6398068c01f0a3b7c77a8" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba192500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", - "publicInputsHash": "0x00efb18046515e61fe5ea99224aa9d9ef6b4330521cdcc698b4810c6a4167309" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002004b4ddf622dcb5a2c6abc77193d6cbcb2bd5de58f5d443cad5f25b365bea88500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d2792e76d3571d2770cce1593643b82c9568ea0a25b77ee58939a553fa4b5c18a2198427213eff66bee6398068c01f0a3b7c77a8", + "publicInputsHash": "0x00776b1c095bdbc616f0c1c2617015df939fa8cead8d0cdd983fda42a4151e1e" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index fac2fac552a..9601e763195 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x069b6a34faca1d26293c7b2180bb3ab11288ff97ea64341639d846e2e16fe21b", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b01cccdfa409e3e14d1a02be06528e7e9a1ba8c822e7b4702d6f83bfff18eca561e25bbf87b7949778eb323576264464cff4897322d6ea9954e20963cf5c2ca4532a221d05feb30ebeae425190a4a30bb85706d49e102146104b237861b801b98ec8237294c89ea946354bc2a0800107d82c61d6958fd67b75f885db8a9d7e4171cde0ecc8b2cfa7818b28282bfcf5eaad2121baf3606c6522616ea96d73105d9f57ea7744ba44fe10659b2f6c07ff459d000000b00b6d781981b272e312a56e4470ab4f546e355c8d5adbc0d9c20e449a71e02fbcc1caadd4794f476b4907601e64c6a5ba935d02cfaf4ffdbd3f577d592ad3cb6133d1d5f8fb7b5c13da6cef9206fbf6e8f062e2660e06782b2559d569a7ef645690663080fe6e637c6a1b6ad4b5dd34161914b8bb8e9d47673cb4b0df16c510d238afb5fb90c6cd851096bd84deb227582292a2e0742a94c9a262c2f903e020e7a52418a23912a6a1254a0659b860e3c2000000b00dadf5ef1869c869c14d46bcc3bcb6650ae555a77e74797c9c89a6f9d54f8a8c292c408e8b844e49cf6cd8a7f77c542cf4aa2985ccf6509619db87c7d2999d0d5a4ac9899e78ffd7b203dbc82c3d7de123220ad8bc6d492de3d37c880ff9de082c884f9c789437eeac9a0863588e78d40643141a95366542c203c94ff6c5303e49f5a784f5dc5e546791ecc5a69276d81657ad82a5c4d592586328904111afc95c9edf9290ed02cb2e03b398c6e87f650000021c000000b014b0571f7527574e32dc1a104c2da8b1d0cdf7ab040b52690efc4aff99235840ba8ad70743428f4a8031537f0c3dbaaad3fa7683c268a107c4ac818b138c1d3935b5ce5c0b8ab947d114a4a430dd0af62b0817f2b7e4c8d180a68f0765bbb1ee6d991609b1d2ff3e3a475878ea44804925a07be18c7485977db7ec5d2aa9a12bbda8c7aa803e0b59eefee7f34b4330f41f6d12daf1fcbd49c0c100f91090e65ccff5d9d83425d19133bb4d37b71a2db4000000b005f4a5e38030e4e0d457ccdf030b91984d62260af471fa1acb938d4994e78f15107c5ffeb82be04ac0505f0005e38f4f823db2275c2fc048df75a7fc27d7a429d52c4c58f28944f58bfee88b744caf4a7a7b1d204c2b8f2a1b7f9a13b5f9415870a3bc95f5b83914e465f6b26a1166970db39039e33b8579d15ca81b3b4bb274671348c374aa01b81bb0422cbbba09b017758604899d1cce743b8d907bdbd0f652efce605d1c8c4fa7ad9fbf4c90941f000000b01ba2ff8c40759d6f152f9263f3768c930c1efc6af0c3915df1814ccdf47c14880bff5a2b5296c61708eb8d3dafbf9d52203abbe57289c434790d23cfb11014823d20385ecbfc3cc5cd767df7877399420dab13828efa3a0a7cd46214b001cce340087239d68b8a6370202cc0070b8bec1e2ce89bd452081f0857c77e47394ea9081235ea65a75d8dddff1a77410833472b059f47021a71f1af462a63af445f290aa5644051f565613cf47ef766232aed0000021c000000b007a5abe5d5c17b682619b68ec470b2ca1c09532f6407ae7e407505ae760c8f4abe8d2023b68f4bdfb2df44cf7cd6a27b9b677e61f8966fa6239e035d0c8d910cc3a2ec5dff26d8e23f065e447753ad2706ec21e7544786f8c2b3f0763c69b955f1b59c50d14647103e156a28d5c93d402b962165ac1fc769866dca38d31529e18cc793cf289a17abaf1a914079302e911a003396bf0179fd26004da3e6861aa9d5862f9ea50d8386d055c65c013dc159000000b0272d22c9320210d7ee823c7ffd20235fd9c33e99f103903f65d08c9e960618c6adf96f9cb0f73e1d01d133c2b0b5117e3e0b450bbb9d54bdc8b4b7ffa7df4ca8224a2d5a9a428bb56edba175a678afa78d9e108dac2ec27df14a92cdf808a80a642f8c4c39e84471ccf428ad2f19bff422ee4d5fe484a732d11b3e969ac97c1f7b0a5123457d80db58403877b8b8bc680cc8ce1806869a0fca21a2afbebc81ba22ebf4b52456df67b01bd6d7bd7ba900000000b00fe0b1b55f950413528b351ad5af93f13c667f01b10c62bfaa83555e00e6f0851e668c967dfbdee3dad61fad6dae1231b53251a5acf6889fdd2f90a95c5dd0c0473e6b34f35dea0d3e0e3ca22c3ed25137b97cc8b2df5230e8893f5379756adb3e4d44576911524ddc0b84fbe1118b080eea14f88cc6881654b1d88d02711b491f436c7069e21332c7008df05454811b16a2e323bfc8facb305e47ed3420e1c2e0d157ddb2762fd8946d8ff3833decae0000021c000000b02bb35afe2bbbe7d4b83e3d056972a8d3d652edaad506941f87f76211f19ffeee03ae3bd84d5590fe69385ceeffbef9638eeddedddc88ea6e2f2fbddae258b13724ec33c4df23db53758beb0b48bcdf72d8594ab2ce907aeb36ad29ebd9d7c299e95a470e8f9ed8f2bb29271571f701421c28a41125202e211ab2f95eee4ae034d9c977da10f5d95f44d396d86aeba00e2259a7f0cfb3f16add3187c1d0d4d5fb6c09f56ab2c14a0e110c515b64e26323000000b025a6bafd1ba17ae5d1e6d091fcbe083e40239f465c27ff61aae10b708a08d4e8161111d59e2cfba652e099e00c1670c25c7fa6949d156816724b8ce1889225ec820598b36040f41e799c54648aaaaa27d5ec64e7c63b1b46ce595e67246faaa69a01da8ec71c145aafab26e7d5c9627e194d3e85b2e65f80624c81f874cceef400d1a0e16fd49dd8a3bf1ff04cf408cc2c2855bf2fa7b8f260e7e7809c77278481bc64a172d9b720c718f41fa8227020000000b0166e0658c80af6cfffb0638f75897ac5162d510c1168ca0da1cf4fc34e0b6db08e7998cdd268eb55636854947c37e4cb50333456fa5cdc212e79859d9dc161c18704b51e02872f57b44d3c18b595a8e5f3aaacd6b64e8f8382af61435414797afe4d09a17ca2782d83ca41fcd01a8ea22e599e2b78c80b4ef4009ae580d4222d121d7748d2cdef2506c0971fec142375289309533ad9b5660798ce5b501b0e86aacd7c6fc150e5b957753d52520ffadd0000021c000000b01c65b3b8d35f7bbb20df800d30e76bd0133f10900fa3a5fccf860449f231f047014068c1c8aa1c1eb24c813239bace6a9a0dc31e49046189faaf1f71ba87d74a0dd421d32c045e85f18abd3a0a6bc33c70acd2b95718172e9dbda833c3a0a32f892f902a52c17b08cbbd786edd582748210e00c94645571863ee6f8bff96b9dd8751ada89928b581736f95da5eba8f3103c7d2fcd20628cc9b154225f07b49f4e57b98925ff433ceb4c6f232902941dd000000b02c7b6569a613950dbbfbb5348d8bcbea68ec09834613fb7070352a9b82dfdcbe99f1766eff480cf0307f54e4f0f869748719835f316dae3d23aa15a089d07a109c6afd8292e2917add56cb3ce01fe6082964d38b82800ef38616999233216f91968d068b1bfdcc266b13f4fc8607e3d02bb653bfa0d20adcdf21de48e71cf634115524592a670e8dff95078077b488800d0f8e9b7bcc3a9d2339462817a5eb0b094155d8f9cff233dd719a36b7159947000000b01c4031657961b27709eca65b4a09b7daa002825cc779cf5c14e5de45e657a55aa07fe3e033222256c28170584b1e4f9676b3f45f4e45435d6b27db3dde81f99723d57e63fba10d6955928f4b880dd0ed948f922143302fd23f0dcf4bbd59cb889e34c5b0be0b8723d11d3bbefc2d28b02fb7d1ac0f6691de9dbc893c6b6b87db58c63df7439f4c089042ce23f50f9c7706e1334ba997de6a76e924f3e968239d1010f8186b6cccfbad9457047cbdfa9c0000021c000000b016a1af708c1576469e24c7ece11249803b791a08ded47deba60c81e201eb0ee5e96ab380a93dcf92c1509c112e2fd114df29b41eb6724cb2e5ad409e7191047301742c64d6ca1a603146569e9c2a6d244e027abdba57e35284141a93b760a07ba11dd384c58f8849cb3dba9981bf95012cb2e806206d060cabbe8507716ca805f6182f56c027aeaebf4cd6df9881f82b2727482ddf6e6449374787434e31654d01899bc79f29c9be27081fbf96dcdcaf000000b00378e2be7ed2d6e36f199630071ff360d880f5810647d05c9530b4b9b2bfa6382d82f9cf6d094b533aca287f0e5de21d43fc45d7c60b25a5010b90ebbe7aba46003b7265059449bd55b2819b031753a6c2c75e012f5d3ac9fb4f5b31a5f05fde78c1d38f57aba1fb920852f3fefad26a13d161ecff81e55508e845f5c10782d66dac94dabf72760eb99c69a3f94ec8f5199682bda062b3632a192bdcd9f46d87df7fb18cc1625eb51007976bd752dcb1000000b01d75b72ac48a40e2219493c807857cfa0a3c3ce8ce1720cad88ee781cc3db7ba8c59baffa46d963f9fa4da0c2fb7e3c6cd73607c557be4efb125cafa9340948b8b664741adb8f5fee38d1a309505a524dd525e959ba1839a9d8728b00853a25dc02b900506ae603b25e9aa3de9a15b6311d56f9e0849d4573e1b3fabbf4f7801dfaf50007c6679bf061e60a11634033e2a126a529c16a2b38c2d5fab70d9cacb4618353d5a9857564193bc81b25f90bb0000021c000000b02102a1e2a0991bba7d3e3ee30658257b4b1dca5b0f00447b05411f77d57403a9d0d410a61703fcafd1caa57da058ac59f4fe8e4fdcfd03fe5c1289a2889c7f539a4abb3efebd0654fdb2fdffc363dceb528bc1f0f13cf7b8d609376f78b0ce2982e2ce53f32d984438638f70859c187b2c024960edb9ea00faf43d95eb224ab964271d8d30fefc92c5df36cb2c5bafc3056edacaf783acd0c3f66344a9e6a72fcff421a68f6e6b0c6e5e6c022fd0df96000000b00cad9cbdaec7af0e7cd968d1420847f45401be9ad9296c30826e9e309266dff8f8974221f0723d93485ea05f853ae84504a3416c61a72acfa7bf541d68f647110859e7b55d6191aaf90eb19f7a510a005ed18482997483e22f420248b22f1fba77e439d13020091bd9942964bb5665b5199b7b06a24d8115cfca5e042a216ab0fa84d733590f9d60820822405902579414f90967eabd0eb9864b010da5b424a1d92aacd19ab7757c572a380c4693f615000000b0151a0fa9f0a9d6a74db6afc20a180635ba6a4ad5232d055797ec55432b69b5fd32b9d97da4657424c7fa05dd0eb847406b1313f47232a19fd600930c736b9c73ff2903198e48408639709e76e74e96347bf254ac95325fef3278c9c6dbb866ffaaeee058893f56cba9e7746f4d9846432f44d79665258385fc13da84fd8e6504833cc26ded42e5fccc3e3021e7359cff0e5b3645213b41588f5343acc140edd01ee9985c029a9093a88b434b1aabe5b50000021c000000b00481da8fbeb92f3f955d1de236681fdd1b436dd955b18df77e0a0ace915e3d5d2438e38cb8f170ae5818a394e2e15dd87957a060199a377b16c9f2075699922afb3583221ef4f2f95fa67c88654451efc1e9c9bda6decef0fe94bcd838e3f1b674be82bc9c800cd72f0a95a65770fd8f2b917df09a9e843b6bc2b7361e52bed42ee00ec0dea4e342a59fbc252ced75b829758c47d0be99bea5ada45847f32aadaa563c278887c7ce37b44eb586ca2c54000000b02ac772336dc581e6729d096ef8cd26c8a107b44ffc7a5ff3b5803ad8ea0341f4471541f8ee48170c4486c41146bbc6c1536b51a14aba71750b524e451b83405cb5bb7a6c64379e3094807352e36a8384167fc399ea939537eee7cb25bb0bf90f58e70c2c0c9b7083a4a3b31c61bd39a10d427205c49d534685498325dd1bde0db60ff0acd080d624d26fc98a835804170ea1e5667c92ff6735eb4aabfc32f05d5dddae5f7139a51f0d8c546c8350be9a000000b01c41c407509c96a1ff0d703deb373e51274ae4356575ae35f96d73db174c1c1cd0cc431ed51dfb072600f810467cfb76e34feda5d2de2c3bd8584f64644fa29d6686f6ab85999e1f783f20cc4df97d7f9bd6a8637160d5fb4e296ed441ffa0d158a2d23814c124a7604c61e5c210051b278f287ecdf93c3e870a0e0a60e0c2f8f4b3de785d239997eddcbca46211026c0f04e180cc13435f710e7b3534c16c780f8fdc8d0f1512f60e6b2896a5d07adb00000de3000000d50000009b2e4f97d93db50f74fc69189a5e26b799510243dbe244dcbb44967aa88656da1c48120616000000738b812b2a894b7a041f4e64eb90eb036b6b313837fab63019dffd18d228eaeb2339362bc050d2fdc9d74a5aa679301f6352f34df8e6eb14626d1adf0f6189df161a93703f0b94eedd57c79dc26ee45095557e120b1164040c649df6e9faafd9ea478f6970a67ffb551ca2a61f4b3dd0cdee3a4f00000032118f11670223ee4c0f789d0bc948f9429499679acc98402255f3b7ebda50b7096f07cd020000000a4c387693c78b8330df2b00000194000001282f80912c099d4e3d750334ccdd6715173d17840aa200fcc15ee91c6fed4ccdaa3ae268730000010051a214c092e29d9de3b199c52d81733b911044214ac8dd34dd58d43f64fc0f9171a7fa241af5e3b4c1b3d387586e65df994a647f134b8c66217263823e8d1c006a8a562b88bdbf1a291aa4124907bcaae6d60ddd472e1240adc6813126dea5dfcff57f881127ab5c6775335a6bb84d2deb8712632bd735a7e207c98a4e5b4e75e5c474f5c80743fbfed4889ee8e956156e8bab7f88a635c28355a0665b641e8eda59d42f6bbe125f8f7eda9099f3e503b57b8fd725770312df952ec5aebfff65c6c7db74fbc62af070ee02fbff719d330b08fa941abea737f693a9a5bc31c588167816995c9fc78fa6e2d2e9b62ec0dc74810ada723a1a1a888b93d8befaacfc0000006413f0e872373f0a05a333932be7481450ed99cc8bb946dad2095ef0bc3d36a1beec7fb8590000003cf09a5fff9775bba30cb6ae4d57a9bdab795e6d71ce13552d7a5c3ec83b1127f1ee9ba21543e335453ad888b42605bca2748045d40780adc9f0b71f4c000001650000006d01a0dfb030d5d45eead1e9aca6c28ab592623d752b9aba59560b247b676620d21dcb7f6700000045dd60f8bb788b861b651c0e29859ccc5e52852a7a7f3b437eb86d2a97703b57860da3dd28a042e941f7078ee53570fa5868b1fb28d410229a1a724383e0b8e5aeafca1564fe000000f0222b9969378dbfd4e287d09e00fa2306287855f50665795f5967bd5635fcb66d242301bd000000c80e904f491366eb592189b815cf906f09187d13b7cedceba2d1b3a4e901b232e1ba54320206e9a1b74150c5619f6115cc2045c929db39dfaee8857fe946b29a9867f84944e0679a46a67b8fba76281e241c8375a020c05c4c00885d11f941616d610b2780d24358657adfde07b43fb267991239f15b0dc3d7008b29724c982cd21942a826f3452462a4143e586b99d1e66bba7aa92769d6add1f8fb898be59360103b24f4ec45e623cd1a3750bae1db2c33528277ddfe374a5ef31d37ca67a2e88aa88542b4cbe4da000001c7000000a80a98bd98eff03d49246c898e20a8c08f24a3d228d2786a22e0d494d0c22e32820c939caf0000008039f93f100b58dd0b801d2b7be8a64f3759d7798d8bba6f5679ef91d42057b8d459449c799eaa9b5b8c191cd4e8a207eb7ba51266650f90c2f8dfed258d1e8bebe1b4104138b42cb391fc14510195ed659b0bcbd11160a2efbe35f0870f51c9c1e5698c31c4e69e135a3b309c63d49ed09873f1bf0dac63eb7ca3af14d3cfc59f000001172249ba38eb3735939c2e61cc026438386ad8983b207c9804caca99af3fa5bdbed0577e2d000000ef300c240dc5cffa6ddf8605080ceb719fc22f526b455ee006061582a032080d53df8bb27daf1b8fc5c5a25b2e9755a4af319e62eb62c58828744cbe8295fd1fa35141991069070fe15f412a256a060b9106b0915e7a51a744ed836ea103c1eb94c67a44857b3ab13ba433b5ead0e4b8e5aebf07bb52bab76d0a0524293c4ce1055bec5c5c264ce8a3c3449611a8df668bbd386073cd79c92c5243be5751374c2b41ecdb4bdee00726b8316df2b508fa6d20ec0e1e256b073ec0a179ae35197ce51189f7c8c2e2067eec20f1389d35582f02dbd70607c6f4f1c33df710ff4f984da41e8a6b095b60efa66146d6781da900000180000000b41fb23fe3cb799b468d43176b118694a984232731981b6076bc1c2a4cb61f41faff82a05e0000008c41644fe8d4771a6d1cdb22b2f57d330ca0e86e002f9274875f668f8232ff74edd74b2d8b95d47f8ca39a3a5da8e1c7f110a4d72592e51d7663619ae84a5511a22a85f8205a4dd6f8d9b8b6158fb6b312204e3fce0a6061770f294083988b5df9633ec034c9e734a9fe6ace25a5f9df09f2aa099222ffca3033a9e972eab906250f5ca43ded2cb85a868f75f5000000c40b628d5dcfd23e3dad47f64a87a243c7fc1f7731ce3d6057078a488f5554df298ad232770000009c3599a096ad019f2903d6634573293b7fb88ba4034506dddd538fdcefd30fad3514e7f21c1bd8c9ce411b37be709505d7546fabc0db27aca6a0cb4b3fda21ee3498919f0946e8205f20f2ad8ddf1602ca41da42db96e661cdfdfc458a4368571e07fa0d7be2936c0a977731c58e8b1ccd1ce459d15ff4340532633b7ee24eb7a8e35cf808c1e2a42eb30c427cba0cbbe2142955acf06115994319c80300000123000000311606efa9cfd20ed91cca9e235f580523d5f688f8c5bd7a77100753f30a527c25cf37abf3000000098fa3449e18495ff602000000ea0abff8101380cb7f2088ca38a028672ac02ecba172d4ea76a2a54938cf20e7cb181af093000000c2d8150b34763f7fdb00164344294543ae357ba387f0f3281e3c26ef1d2cae588b0ca69e619bff5e406abe9df4377ea421c62a13259fc49a098964bc128d6f29390c69dc1eb524df2b07cfc115cab26b494bee13a6c348b8bdca248420ef8e2bbb5b172d71f67c1b1dfa60dae4faf4536b437c036fafff99fcc260f718bfe407ddd2397a50d2bf41da4ad916f4aba4eeb8f4fa548fee97247a74be476ba95973a7ea7059a2bc1a7af577359eebac6fb04a0603bfbd04f17fc70b1e8eef821b2d355658000001a70000007b0958e3b34f839790d42385d30cc4e76350e55cfcc2b869cadd88f74a6720f5514af243ae00000053a0d934fe40922b10bc58006ab871ec42789b6b6ae4a3cbc80e3778b2c4870e69710058c8362a4182c1f01bc2b1bafa5716aa8a9ab0dd1dd3447393cebae338d486145cb3531ae4b2f54568f840c41c130e54800000012422e40a9405841ba87eb94ab888332a1c1fa95bea47d672b5171c255ef4ebf9d763afa19e000000fcb1ff0efda2f1bba8f64569b3c07303adc88a6592935bac39bdeb3be9b9eb3978ce13b15be0f2fbe157cb8ecb618c3b231f4f1961521d476c6384371222a8de40fc580d6cbc35d4043cdb842b7b8f74bc7864b849ed5e75d0d81217db8937837c3add7cf7720471ad30303ea7cf26c44f2cab9907bf3e0434917b5905bd17720f1a81a8b96a063221234d18aa0d9d9d700f0dfb5d229171a34cdf5a8bd4cc0b0e8537d5188be1b53e8839a4f09e249dff35f9f68514ef9fc3a25606d08f5f06162a356cea54847454734c82a102b5a96b261415cc06ae8f9cd40782f5db460c0632fee0294a9b68aa0b231bdb9bf641c11ffbb277001d6f0a1789aa6e0000009f0000005f23d5ab95807762ebce1fde33b83bded8251ee6f3ef81fe0176107d520add2ad50f045a8f000000374a65349448438a651831277798edccb13b33cbdebd0956a2c44376626ed825b87e78ea8098758296d6a5616de77cf25160162157c361a200000038207c2a9878a818da875db212624be3bc457853969e58ef8ccc5eed8fdfd856c2988d7dd300000010eef4ded52fa70de2c8d475312dcb48c900000103000000ad2663696aa826277ff4591cb8eebfc3f4294d3bfe682cc0e3f67eb3711e7ca7738e7bc793000000850a889f968e38232b5e26d158aae10328231d03a3cac72ca51a9d2f68d46b6243e6e29a4588e5a644db4be38988b245f14f1d0ea4ceb91272f5d7c6acb2a4b39ed6d18b704a55addb2f00f1c4c6bee12f4fae4282847add62b1ae229f613098a8ca155e74322d1629e28f39b58485aacc331f7b9a8e6355f95f8c74c9c0686fabdc00cbb8280000004e0732d1e5a52368eb98a0cf4b7e6ea0a405272d3326301509b94a706c9d4cd341329a1f0500000026dee3ef2608c07830c5be2fcc972bdf5407d70201f7926ffa9322d16153c645c39f4166e5e99000000123000000360bb42afdbc6eb6e73f1d19ed5ef0d509efbfcd13edfbe1d99a0c430a439a99095ec8a2ba0000000ed9e77826e9971e62ab45bee72a01000000e50f6eb42c6eb91935993e3ee929ef6e3e6a6e412b0e99fe237f689e53981293e65848ff50000000bd6212a6de88e2a6c109833e9c377915acbda2338876f8c3bbf74a845797587d8ad5d7975c9311b590deb07be644047f0ee92866b195ff58fcde99255417d9b3257806eddc4752a60761c1054c34b5732f3f3e7c51a545cea98d06e6952173a60238714a138154e3b1264b12a9a34ed31ecfd6757d9c3eac373d4af975e7474baaa76de3bdf0aac9b119e29527ce5fa499719b6cd7590cc6047efdf4293390fb73af2ae91068fdbbf42c75665cff5735983c86f1144ea38d23dbcb4f42bc00000113000000a800c7d142f82bbfa67f1a6491909ff7232e6a64b3d40d117482a37dc29629055f59752e3300000080ba4ba559520b295908c8fb35c27a871b5f5a6b197b55f3dc60c896019297c1e9d8f641e6654b4d3026f0b2b232d7dd4253c3d2168bf372744d195b8e62029a5db788b9d811fac55ddf2e244853d90e21b979ab46b9aa89c408f796d67792453353e5e2dde554220a2d728f24b55ce796883529ff119796e59d3b4bb6fa13dacf00000063260e879899ff5b18f539c8c37d10e815c7fe8cba209e846c8763af3b93717c2d3d247c280000003bc7345ad89e0cf0e6c48cc65f16ffe90965a1fc55216b03d0855dcc33683388cde4367f0cdb2d0187411dc121c65e47aa6861608c8bdd2b3e02e2c100380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b002d138300338fff5b1653e32c746ea38073699f4ef36b2a21d544285079e89de39db6178a794f5845798821ad7f8f14dd60dd8cb9614160e9405a64d4dfeec5cea589d74d3c9c9317399fa1fae51ec10361e5f543fd00f08e2ae3f9402dae18ef8284aa8c5701af8d4de603b1d99f11b218730859b17a392b5e1d7e369234026b760af3967cea8ccd9a91c86f2126605003ce399337dbb636cc26f2bf7c03bd041476ab3b8967c77a72062da0a6e60a3000000b024f0b88c631a7e3df2ce8cf5f0c2e7a0d8b17c9e3e9f9af854e2c2b631ff8a43b33fbec6d3736d3ca80fd714cbd7f7b6ec31fc7656a18a4075f0c14b906b4989234ebcd779ceda1f565713a9638fb2d58c5025384fe7afcf25a0a582ef98f34b4f83c3929a6cccd67a2a039d6aaff8e71dbda080c43590f7bc2b714ce2bda41190201ab88b57a008dba39bcb6bf822a20ed738cb8cd9daa9bd682e13ea2509871736e790a8e151c9f6ae7f95d8be60f5000000b000386259a10d7a31659529e4be89565f21880c6d3ba12d7244c10417fb5e96e9a362d14ec37e81299d7e3ba40dc6f7af50c76243c8a6fdd2982b943ba5d7028ce7ec344af7594d31b48844cd83837144565750a3ea49d72cf56a30ba5e2d99bd6989b80a571b5edf243535c1181cd90c1d4aa93a5cddf369e6ae2f64fec586cf2105b2a268a93fe97c2c7e9e771c32c42f87391eca587989303592a89fc680edf7977b77bd0dd714ca588b6c0a544bfe0000021c000000b01234b682808dd749488ca128a9e76a02a8400856f51ddd96acbe4d8e0b3c794fa2cea7b6f1db493eded35742434709d9a520218e5373491ed76b45d3a717260256bb5b50c9ef75a24a3cde435609f2390cdb42c1d5abe896e5325e911fe7a5eb738841aeade8ec5f890c62c1f195b1db0a724b659935175e15ba2628dc73479b6381f8a5e00d4b08e5dcf92097564dfb24a6d53ba73c39194ed975268a26e4c1b7b7fbd7facb7a0c57ea5f6a7170fc93000000b0146ea07b5dcfeeb9d06d7fd14d26de1af602bef14033c1fffe24ab22326acfe59a03b99f82d2794779594162b1874fc7dd839c6be40c7b20e076f15184f49adcb343fb0aed4c49e05299ed9de33f60853d4abf346429c4414cb6e4a0351a5f049daf8f60645e304a1e29260b5b96e72326f06940f5577aa2a2cb89ec88228cc4621953a2ca8ba4b0ef096a9e814bdc8a01c01762ee8cc425d3f8dfbe799fc3da781bd578025356ddb74ec5d6fa77ea97000000b00996217a379524f28a6765d437185e898801a0cf8113fbd093c920b783c7e4f231ec155ad7254a8646868749f5cd89e5ea80b676668f870110f04b26fd0d6447df541c566e441d347d681bd6fe86b987012083fab5455a8d3085135488285906bd85322d34c50b1401e97d20fbc40cb1262c95bb37e84055e5b7211cf5b384ec5ca9bd67f36b96cba45c3110a89b01ac0612197fefb167923856b3f335e8bfc5dd05efbd7536d80a1649882e1f17db5c0000021c000000b005102fdb9f5901e8533c03d9584de61486060ab0fc485fb4574159c8f190474e72ee4cbac06f9970901957326ef1d7470e19dd696c402a3a0b57f80839fbb28509b44fece2f8a40aedb0d06998d6fdce266f2b9c12bc842a6bb8aa7aba0514f90f1e9389bed6e157b7517afc8a0ed7461a93179d5b9ca381e91cc7f1455d2d52d26524b0c2789e83010e92ba7711b6c606705bf746ddd988d1c5ae2541993de61c07d46c91e9e427220509e8396b35e5000000b027e413fb264edb09d066a05e3cbc3543c6197a9fbc8ca0c322dd81a5dd16b1800ea842326d6ee9df71111f880bbdf96dc6e90c7a3b889f21926f3879a28063129fe264b0d442664883c3f85ffc26da1a1623996d985b5350c7dae81f09faab39eb347547305a3fa724f41880b8c1fded04ef041be8d2913543dcf303c2cf1753cfa12f470b91a09baf2658262c2440b8285b26c4f97280a9b5477706fdef3fe0237dd83b3e5bdd926cee40ee9dea1705000000b01d9dfb90f09a1b71185761de45cc865cb54c2b6aac6ae76183edd2c35031738d05be9f773bddc6b7339f2739a16c707ab48e23f028c6f324d7e93d9291f671aad09f27680a9bec589d0605f5e10c4bb8b43a7e435d215a49cc1098e1dae496e9526cb585dafbe19ba7c066da5be254ec2c1b780b2fe6b7c30a3bf0eaacb20402d37ef413f32c5aee48d71429b64da1502cc15bf075781178084724f59bb8dea6cc6d6c01626a0a8f383fdfaec67f6a3f0000021c000000b02aa0f1e2fd4f68edf4b95fa0d068d06fdca5f70fa42520b7085ad3ba58876cc5e0944849fb175d764f6fff08005ebdd9dfb2ee60a88c9e89de20d5472bd4e8cf000d1719ca5ad0e4645eb19f5e2e4bc3b2b62c417c5d2f2f1dcc28dc3b1f351305888b57e69d8cb4c4a83214136a7a180f91b5938a9b0e13ceb8e4ee2349ec8b907a9b83091140e835ebbd10bb7a0a171e4b73bfa6a3eb5b5efeb096bc4c0383f2dc3130fb9498e99c79f77f7359b64c000000b003cc88f0da61273dbd7242f21dbfdb54690b8b7c659dd3d8079e804bc2f43e25d2cc928917bc8f94d27206c002678424ac1b84181e81b02776ea2f859d087ae049aeddae848311781df981a4a3433b11983788dc2f1aa585386741939e8e8042c8e1dcda7e5cf459a87ab4831e5148ef2af66f23029b2d69779eb0ad35ff914ed1cfe3a861e198d1eee547eac6e99daa2046573c681a1fa29b3a3f41ccbc102c5861b507bbd2caa203d4929849128df2000000b01c68d36e5cf3f902614fb0b121ecb10082e8f1dc3f1276f8ee0c9893a41ae203e54c9e346c62943e371e975d6df1502c811c812a96b395738526a391f2e313b8c8d56ef6b66ad663ccad684ece91c2f35339a8bab06dfecb430cbfdfd298382d5a1c61c9d7f06a6ec753783a304f72ae0bb462bbb93764d5f203e7d93e8f33803651164dfe3692f69faf03976e2c9ac103ae845f41a49079465c79c48bbb86fa4a34e8a3541933c22f6edeb2814d31770000021c000000b00e6fced82f8ee7992c83ad30f647aca340a48b9d451a5582f2097eda8adc8449d548a635a81ed3161c39a947bdd1a8cfe87309457be5378e4eea667f7ccad139820b4dd04f9b4aad9c504f7616c3da49c41d2cd93153a416f8d991cd9242566f4fcc190d363a812ce0a9a0dc033f22fc1650c90786bb579795957ef69a1d7887b5c04a0fcd5a2e9f2c7003f94656d5dc13ad9891206f48a941fba5aad1c37aed6686f4b711dc86708cc351a836a54a77000000b000f888ee79ce01d4fda2e83d1b3af3262cd146e5cd7daffd8e0e1eb172d5333ed54d3905659efe44f113ebce9813e3fd390aaa1714eda14d6ee9f84fe2090d71e8bfe4d7ba04169013613dd473aa895a51db6be8bfea959e367b21192c307f18557f02030d33a398a7ddd983aa98ebd62ac0e9ac9ddf5d8b738f958ecaadee1ae28fa8928b809d98b972e1c2e8235aa10e9574153a328e59b8e9a89d4161d47da551d83447573d2b9a2ce1164744c651000000b00f093c45aa424186d3c06f5b9588c1d916e4650bfd71e67a557630c0d64e6202300d8966b6a7a121c69876c09a32746277fc7345b627352446de8d6bad366e45829aa749fbfcae203fdf3772658a04679123d3886d2e61a87fac646a8053c59b2ec75d115e7dd32093ee47e467a1fdf5066fe007a5c9b03484c53958c0fa87ed4a174ef1ce0990cd368a6c6b9a72b771073bc5092c8be169452e9fe454e7ee7b3be310dd6f83926299ead0fac4dbb1400000021c000000b02b10e168ef98c93fea1c8a5bdd82100c08bc7de4ecaabadf0f3da6e8cc6a8f643573544fdd3ad9cece0707e1a364453ef6ef0fa5da539b47927bd4652c03b03fa750cf9ab7d10fdfbfabbe5fe9745288dee4620290b0248401ab7b383f6e218e650e5431d7a66ca601ff57ce7e5cc35f0da5eeba849497ea3a2ff814629b65661498c05b3233f2290368bf3f6d988b9a0cf4707a83d21f57c2187b2c7aaeefd775430c2ccf680e55f963401877ac4922000000b01fd699509ef4c41d19765e5d0215df1de62745265a1d9e1ff49ee4c1ae8afc43da19530020e159aa277212b66f6e79541c853d74586df22b80f8d1d08fed8bdc2cedd081786926686a620dcf249f09cc81bf3965a0def2e7833c475ba23a1edce325c15a6e1ae85689e93c50510a18f31927c5528ce6e0d4f1f56c6274869caef378c0c75615841200a0e6f54a7deccc0211c02b197178e7bb50d19f19c41c9b0c473d46be326505923003978ad334a0000000b01b0ab0a7187b2fa3c616ce04cfcd9034aeebcb71a9c664baf679166240952bf3068ce1e523d48ebb34219b2d3e6c1bf49992fb027809570f883ed562ddab5a7524b118db714510f7c94a1ba361b1b35bae5e9c75195d883185da3339fd133390b4a2ce917d0bfec800be68396f904b4c25f8f21f39ac043bbcd9913626879d46f9ec4a2ae0a6d9c1beef149005a7a1782c2dbe04b713e1160cc59606f7a2fb44b84b57851b59b4e973f2501c1e65d0900000021c000000b00fb61a07c968a73ab9dd7bca90e7b1504d4edd28aaca0658c4268718ca3c26a2ffb9c70a49c7b6844d47dce80246cfa480851a4c07dfcfe42062cbc46493dab5fa06aa85afaf8e5d4b90ce2b9b4dcb05dd80b2c207befb067fa9c31241897d1bc52aba64034200e5a0b5b5b09e07670b2a4660dbcc40d954ccbe16703f868dc5bbf80905e4804b015db9048aa9c4890012c5a39e2439b5ed3f518517193ba3f97f5698e4fb4fb988eb19ae122f9b2493000000b02351f4a26cf29d1c8dd03c70d98279f1cb0da27bdf17069307ca797ea057313afdabe2af76ad7c3c22fcc3ff932e63be29ca771836517c2e9a27e9a4841df11165f0535294f35bc5e8ae1b90236c4ad5c676306e31ab751043d3d6cb4c646c9739a7c142e8197a840dc77e42f9eea2230eea1bc00343bf9d4475f8bb68a6e9c1ae99a935d97e6c9db24a6692d909be1a11981a0d252f5c6f4d4a1e663a12811a5b3ab613ba6b3a7cffcfb1a2f6aed03d000000b01af70b0cd480b355656fb77756020148b6f7d55b8b19b842253467ecefa98ccd8699c69916688002a7990f3c4e473563c6ac9cc8bb61cdc6fdef7b8a93d56b31d4da866aa8b377ac3ce483620c1d458784a1d9622f4bdcc4c690596f0cc866d66c63ebc4c52bca9c553628cfa0f9d2df2d01bc243405773fe443c716376a9ce2959fb4603c55c2739a751f5d3efe5ec6215092edcd13b4009f7c5af7a1d3e03f1a68f0454bc396f28b38d6d84cf29de40000021c000000b02b163d735ec236543998d9474caa706fe1b0042b46e4cc5353399d40d4d30f07fb66297a71b9cf1b3baa1b90bb8721e03c2db26f608754cee24769c864ee02246285ea896639546396d4a745ddbf1de7a7e376f9e3e7298eff823c51b5184ff11584219ead441328088c2a0ec618b4232871565ee6b842979b45aeea7b1509e68e685c7d20a79b9abed89d1cbe26dfaa1ea038c2fa2905f5046fe7a209d50dd4173b5a7b5db9cb8ad437bf38541d89c8000000b01d0c0ffcd5b00be3ecb12fb048d4f883ceb8c50616583503a2e337a63100f11f73682eacd16716ffa106bb86d5e213b2918f7a419798c9b24f0f9f781ae6772d36d53711446985f77a27dab840515ec0b6212169b68b00b72d849d821b1d7ac11e606f28800a443954298ce750408c2024bb9c3bd1273a3ff0a77f636b551a0969476fead710d56bed356f59e3d4df4909f05dbbb28a995ce35276dc9f5afc5cc2d8e37998fe87eb3e91f7190721c22b000000b02afa426bd8e9101af41eed38bae0a85229be42ee8df899e7f3cbc07fd92d5bf94dde99f6dea56e5dc8a1826f120e16e44badcee18194ff0a7d4c74e51c1e075d5d8a94bff1820d00f6a645a2f0251f24bbbe764379451cabd25df7ad9a220c1de42718fa47b7af5ea4ff34027055cd070f263f74b5e9bd5e1fa07bd3d6cb00b24292b350e8f7692ab8bc70b7d9eeebf805b3d5892e1a11cb3b75295a447346ee97cbc4d8ea18d01a0bf4bc7d4b88a90600000e91000001d3000000b013a42923f5b03d3ede2b2fd2510bcba6ac256d21a7334d63a5ae9d9ec85367f28f8ecf0b00000088befec593f5a3c9e715bb9651cab46fd76a7b4c510a2a1e7041e7f3207b48a6efc38e753688b29348b9741bc34dc3a2c3b843cb4c9aaa9791151990f097bb4bfcfe8b25081259f94040fd1f334f8a4dcb772cf6ffd183d1b73fa3654c485774164b40e633ce88a53ebeeb24520bff790ff22295ac8f7b04911139c0c300f2d9082a553397129c04050000011b25e64a494ff9f9b3c735160565feb34c2b1e0516a05cfb07d290fa5afebd12388ed19d42000000f3dad49af3d60c5df20186090c582de8b40bcbd8836638accd1f0bdd42075dfe00931d6da54b2024f8a95f534c27bd8387daa2331bce2309b9070a0867fedce763957bb20a0e312bbc2991ee7645041e30b9e9b20778b5bf4c1afff4882d214f146b8e56f41acb18125ede8e1245ee32ca2724fd48714e5d487f1fa68da328f7504872e3dcd504ae15abb027d6da31d266a75e4c3fc22567b0f39edeb04bf9fcd02803e190b694f35bb3769e97e76e964eea85fff90da99d511c755a1d61cedc2f6e2bf170b4a652f87619daad6f6fe4cecfbc36d4fac222a3fa0fcaa7ab63951cf67afb9db8f659bb6f16a60a118c6d72d211300000009c0000003a1f6195a09471343198b23d748383316da63e00d27e4effcc00e9a83fd1f2ca461b880d9e00000012a447a201a852f05be7211028cd24f3483df70000005a230d26c308ea38272218752855b0f15b165c1cc43c9564060c099466a21345ee9268d7e000000032467f0a48843735afc54e569cd2aea9172905fd0b2aedb9e6ee3445799a0bec5452db346211afbb742de696e7e79ac2f5aeba000001c6000000c816fbdc3297a99ae6b1db1a03ee51af8d8cb20d675f190485e7b310174a149521ba851dfd000000a09c7e6183ba63e024e6d14f83efb6b26dcee834b83d21f21074d6c9d495417d3788cf9bea259f3f0c3067cc7708bc68abe58435b32d2e72ba67b107bc389c65105b604282cdeeb720a632fd30e2c6cf78d2b1664d84288aab4580054b7d2e3ad11ff082b67701e8d458b66da10006f5c9b7b7e258b36ee2fefafcb5b1caea706b2b24e7266b779a2ee8d475874d742220c4089bea742a0601fb9d9ea541a5136e000000f622e7942f7513801020f84585c9d76b890f01b72f9d51821731d01b024eb39714ca54d2b9000000cef2a4a7fd5f5e062cc5407c27a3937ba2f534681ff399b8f6246de9d6163e3f9481ddddb09035ac4e9f3ba5a820ba3b9e3afdb130b7a49da329c1101e5536e6bfe9d89cac52f6e96737d38262ea5b61a263d582b3852914e64ca731a3656a98941843ddc0487ec723ada9c87b9582e34eab9851349b95f011784ddc61f1ddae0252f8642f7eb44c8a82f0caef56a7d54bfa3221cc9518d67550a844da240cf2686f3bd159b83c0d5a8ff46501b86f103dca7a81d71c75970e6dfd12fb800ca1f2868eb13d63718d4d53491fdef15d000001830000012417fb3c79a590567e0f0d634f1927282ab7fa052bdb699e4f1e2470a5cbba70621d681d44000000fcf3f6088d01382f03e100756b18f23902cf3df58f43009558bb42fcedd429d0d3706680f9a08278385efd5c9a9781ee22423deeee5c6a3fc83cacd3f7961205855e3a0b6bd1307519f20ce7996af086acf1046fec667bdee3a2102cf90bed3d1cd066f3df1b75b26ca6c5b96a346eab80099860535826aee5b0a2363473658fd478dd17ebf143063102480089e6dffe059990d822d6c12ac858b58dcd1e1bb0d8c47f93c1313bf99129263246cb6794aec95afdec7f95e10b1009c52cf71ad12be436c584df1d0823f6c9f4942b0ea69e6bc120eacf9a256cf6bc72ccbc58a5b00976ca2d544b3789c2ee97f50990d5ebdf600b13045017b112cb969b000000571d7258a70c3b346e4d801b03d5cbedf75a02cc73c183c765363f9173440bfd1b3d6debcc0000002f9d59915a834468f453abcec3fa7434c6f558619920542e65a56ecf584c433b967b7a2041207af80f63e6ef977aea77000000f900000082245d10104259594383fab7c3af8bc14b0a7237712579d6a1c0ae634aefe63185889041930000005abc1a0ae2555535fc871343ccb992c97227de4647adef85aa61ec1d4dad0c8bc794bf9ff66c7eddd829ad1bd14859bacc90e4a70f16dff95fe0ab4b4d333834633e040405d0d17836a80034bde42717944cccd32244b10fa44f1b0000006f1cddb454ccdeb8b43e9e34020a20bdb4b45b68a9ce0b2550f66332ff2c581e837da6b1b500000047cc8488d3c323dd0086b9fa0dadb7218989dd430c68ea47c145bc0a79f2bdbac8fd6ffb9494b3ddf1a11bfc73940c93cc3e60ad702758097308228e3799375d5ef9f650d31a74f1000001160000005a2f29cdcfac0380774e7e187a8f94977c3e325f42a03acf7f3967395a2afd8ff6233ad431000000323c8836a04313f74cb629b3d54c73f5da57ab4922facd0692d734c21b5e6a481c2fa192c45f92cf594eecbc2771f9cd4be510000000b420f21243ca51873a32d0e0226aeb03fc4ce2d170ae81ff95ea4c66f617e897fcd3017ca70000008ce87cef36a8c6711aabb16c17ef90e176c9eae684f4b8541c1ce12c345ab5b11c986f9a1c535da67f5c5d44dd51ce14d788958ae75fc9c10b0c07e71c6554196aea7bd7e9ca7a28e39febfd90aa967dae8f58ba7fef8722f2363800271a6188718180b88403857c67c15561c298146c6a849fe1850ee63c74157a3605ac515d7bd65bad911236e0f4357a30ba000000e80000003c212f3623cc8cdc74dccfd3f6dfaa1ecc05c2e53648146ead3d744480c9dd040f00050ea2000000147569a0974428f2882959eebab9409ed0bb66438f000000a423a3685c0a3f63acff002700b41285495664c5a5b9cc4a52d48aaf79949fb022d0c3adde0000007cf0a6c74eb735a06ca74f406449b33ca072c30a7d9098ce4635453971559b470d50ebb7fd88d55bdd3657cb12392a2ad40b40836d31b6a048ce725b37d1943a68c58f2cdc385c6cb3f3c4d583763949082fd948e3e6f301a743cea76cc8f58583a57bb8d21ac679395101b6c64146ea06fed81744f8e5cc61720d878b000001440000007a1fe214dac2ca2d148fd63702c5a5934b234ead0fd67dc7d4a338e717131f86b0ff1d0a7000000052b8bd812dc1446ef298121153db53c3583473bb0696c84ae6b1ad6a9451e2ca20dd0e0efb8cc855c174786b9c6c8d97ba6de8c9952b76c150fa51ae55a627f29b61df4265181580681395924ef0e308cc0ecb000000c2155809b85c0a0123154af087ac094898f1a321db717523db34012822c91a666e2329e6ac0000009a1c944e7af5fb6560a5a551e1982456408806d99fe052b12bb177cffb17dd958b84891cde3577f2b570d8686b0684c9ec23609bd871c7c0bf24b17e739be1328a19d92334320f8244ec86444d10b5ab6bbc60db29ebdb67f620721962bd018fccba0f723d86853bd6f16a22eedae6f238c4686b232c629908dbaeac5bdd1f0fc0caf4037f98e0ff1d39a67a2abad0e33238067fe3ea16c79204200000015a000000d811b05ee9a1070ed352e02f5f5271a59377ef551be432409839c1ed17b9c64decff32c766000000b0450d2ba78ec6f2b72d426dc24a4fa91dbc52aceb9995ceed6d9d7c59d92238e7d9ca68405e206b740aa5c7d04a7ef13439c11ede22d16c2aa7af4df6245e969eb463e7fb6474a09067f3014647258ca5d6a95cb887e2fa6062b6791dbca74b63e3c40ff290f14b028be7449a25435b12fea5c6aa1351e406d32b9e417c9fac568e2868112190163e16900f8b38883a1b0b28b2c023d46dd8759e4a063d82954c9419fdad6f4649aa69b8422ef096d5b10000007a13018d350406e32d12023bde818416c1ba1d837e22df68e6cc4dda833b872521d7292b5c00000052b94f0c41b5ea84e799623440374f8a5d447ee6d2b7c3055fc32a5f75562ea4e9d1127581b551eae06c6accaa99cdf5d280217fad02d2cdec4842ee2e51790406d3cb82bbbca57781cd57259d8d87f78693e9000001600000006a142a679ab6e1bc1bfa39e11523e7c55498f1b20791ad60456253870357dd86c444531d74000000426ba9b970504f6df1ff25ff894542cd8a764b01d6174f849e2f0f44d8c020b0ed0d75fcf8f59a88bc3bbc9c63832a37eb2b44a2e6d19a28b811b81a6516792e58b341000000ee1ea2fd1d20c6664d10bc28cab6b2ccc9649733ab8e159fc26ed67ce6f1ebbaeec0ca086d000000c6a91b3b3708fea3f43a74aa4f330e2612af26ff587998ea92b55a6db0911c98c0aeede0f5808d5c8dd9fe4f1b40813a2c811b2d85d06e59962c3b852b387b95e73329e791e02ac6ff35cd89e0534053880e52b1fce1f4b9e43f2299278211b2d0996d953c2ee6ac388a874b095b9b7afbb34cf5ed29dfa0ddb3ecb94cfa879d159eaa538488a0a0eeb1a2109eb0473d0379d102d0163eced465899199116588d75203e375940e42705cba51b3a5d7ca039114f9e20aa85b1dcda0df8da5f3edc179b2a035d1e6000001b8000000e426237a4f60473d3ff7ccc6a6cb5f1d794ac968c30ea8ecb26419a0db2bc3cae2f1e2af24000000bcb062fdbdc63bec9e9328402d76e8e26b27bd0b885ee44af51e2090dc3ef36f360af1e7adacf7e964b6262bcf327bfcdcb7ddefcda009bc6093844002551a33a47fa21924d7f348cc5966bd3eabb900b1c216f61380a26a5f249731131a7d479a72b18eda2cfe10d2f4f4dca587608f473c218d20f344749046c96433b1a175af4b07a87d069ce4638eecb069cc13ad52c5083aacdeb2de1f40b75b1a207962c0a5080564a640b063ae2138f8a94f84300e694ff3ddfc30ea29da22eb000000cc123b0ec16fa2c2fe7534f44a7c1f1f6c5b78f7a98bdb1809e5369ef5a3830368359a5c30000000a4541fcfb226e5ef28532ea338155975a7e36fbe38795fdec2998fd58a215319fa4cc77dd97b5dfa9d84c18804c0ece9cee0e4069edc29df32678681d36cea25593ec8879f46330bc71467f4f8c017c1b013a40bf92255dd65d18a08ca91b656cd8336d335e91bbe2934cfb843616e6f029cd2311165ad2522395f127a09dbfdc88028de578af77d2df9134a3edc31c6c3cf9f1c985c810224b9b8d85b25ad76bd42316ca5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a2570e1e3701f4d2fe25ae5dc1c68c960df9114392e97487d3cd12dd9b5d317f8baa024fb9b9fa92b2291538a539d311e2585fb32278edcf24d900c7789269a09549a2b5ea3527c3edd26d632894512d8503c778dc6a490c288d0ced6d8efd6f44f1473c786a373f470906cf87673807d796af040f695add3afd32e9207859b9d49e803e4149e6c2948eae1b5a50972eebc13a7c0a687e5749a9cca918a1615e68915bdd5858fe89cd05b0d49b726b000000b018de35857e0f419d1a3ead4b465117ba3c890c59c1ed9191c9c3291003f56697bb1d96f953684f32e52e429ed7e1afcd7abf9aa818ae1c2d692fb202b859706f14b3dba6c60108ba78d0d70027faae12575e948cc8760e0a9049e60bf99205dfb4413f1dc90d93be810962074d1e61f52d11cf11a1b63c3c58a43900d0a71c2678211f4e69a764a981b21f804a77b2df02f13500e13c72045d0f43feccf6a159222b7837f9bdfb722340169601814205000000b00e198c9cff8f270d1d60932deca0e07926026cd0b04c0903487b295bf7809df255b48ca5650727265293d1e0765f692e64aa52d28a17cdc8ced83fbebb96cfb477869f99dfec107b25e75b3c95608ac843f28c8e075f43b49fdeebb80b1981cb2d1f631399987e6562a8817591314a8c085f6bedcf2f2896b6bb03ed9a97e58a85c7eb4a1c444ac455c8b391990fec08267c4ba97af12c7e966cc7f9b975a9bff138fcb75ff26f0e1059198b6af305f80000021c000000b0023951f9f22b58e56d3f93898fd27b2c841b8f1b057c2d79bb465ccb17aaf405ab960e09a74c49627cb5616fd3eb72799f318591515a8f89c96e2b217d48fab693cb7b2f398e424d04afb1218e73632039113a5b40947ebb6a099ef5af7fb8759150de1ca2c1e97af9ddb7c269a546e123ae06f4b4f7febcf17da94ccc54f56c596aa67df2482a744a3138450b33c0931bccf55b2590d689b7522c9ba0f166f4471e4d047966983861a54801f1137b6b000000b00efdf77bc3d3a494eaad31b66218f73698d242e16082f30bb8d18d5bc25bf2847991824de3fc4640a1c1b49a2b67b7308446dde2110bec701662e096780ee0bed90d5c798b573c3a98f120413f68b35d25041ff9e454aa137de31e67ea1f290e073ee8f6441478f89cf80cac66a310941db9f2c7d6a531cdbd2a772e0b7faba6de775aada1149c48c7d8c49dc0bfd3351b6646d3f3b2ca6d769c149fce2595cf2af9188cf4108141c096cd57badace19000000b026050c122d1e4ae2bc25b049dfc65038d7456aa4de1f37ee0f00834b503ecc959fbb0f84e8dcbe88355c055aec73719ed67b244f8bd91dd41c754ab3107e647c0a711d05b34d6376f66e8ea61a7036d44fa56c5a84c803d47c921ecfb126cf3e5bd79459bafa51ddc5eecfadd1b6a160284ec0f2badfd197059e33cd2779e5d8ea5e545c9bc9c70ac6f167b2cc12ba2519222b34dd5009ba90f9a62db3d28fe0a20b29a455e80f0803362ea93e374a010000021c000000b023f9b29b67de5928b813626dd3839543d23bfd90fc546c1b2b94c47cac98e7a91f670d0e3b0f38228e30d147c0f4f33a7d70a7814adf43df4b511dce47d7cbd6ad892ea9e34720a7aa1e972ad8809255fa8640fc1b3865397f44bd1d21165ea8e0e87b266693e4e5dacdf55a92b5c1451637cb08f6e763b742547902112dd3e1835c7e48981fd47c0a0c26fec1f08f9115877a0f42066212aeb9ea1734056dad89c73f4af1ee4eb4a19745f4b614ccd3000000b004466a6318698635afd6e60c19b8148091f34082022b366dc642707e0ad8df4a99ebf72b82f7dbdec1cc2382132ec761feda380d9ab3e3de2cc078ec966716b506fdbc981b6de8bcf73b67d5617cc282d7f8d51c9b85cfaeb715b72c42040292526d904ef1ac8ef654a75fb07524052e1202a30ba2f297885fc7612c75d474b3afbb82499d2f3b5de80eec8daa8ba3222f5751ba5a0e413089392aa0614c9e501aafc0a06473ecb5af8e13925be362f4000000b0064cd1c3b8e8b0d15e6265705ba11690f2480d89d298dbf93b6b2e045094c8c08305d48af50e34a4f6ec1a941fdd6ca1b666151965618a8776361f56bf7d08ca1d87b49a5da3edb8c80c6e4320e470a8e0a8815a7ab1784f44bee758363c02dc9e572a21ecd1b9ae8458ceb377007d711908105dbf2d659d83b1b6327447b81907ece0707484ee0ecead9927b00cc8330d9f03b283932c94c105a2db5d3a9445cfc55a9035c1e1a8ae8d0237f642c89c0000021c000000b0044c5b764cbba19ea45e17804cef8516b4a2d1dfb659782c5f734f9947334e7f25309cf99656aa2d36c787bec6e406df1b5be655ef6de066e5b23789eda4f9471b8443f0177bf42ba3743ce8db190a1c585ade1016cd0c8d59c028f9823cfbbff664ece3a6af269adb4343f566e93269044efc214928cb5e25c7135a12cbb541a3d824d857dced82d76c76ec1b7a63ce27ee659a45e94d8cef8700e31ca29631b85b77e7b3da94540c6d9adcdb52aa9d000000b01954e5333fa8e85b0ca6766884b963e085c131545839261f67444737bbed9cabe16bde89f434a283ddec0840a6329c9a951a816909faabd6828cad28e75aecd67c3d29c1b27f9e04b86acfaf1c2cfa49de62262ab0ce6ac7d2b721232328afc560563e690847ecf0ca18ec08c4949be41b96001bc5266e9cba85aaf3c5045e7b13f42a1c454f541e03ad944c1adb79aa242573f592a21533926e11a4b6fce488bf346a4fd8e24ffbc626a58bf86ac63c000000b02de8cad17ca0fb0865788ad8ae66c5d7a4c8310bedbf0a219c60194de9e6bf7eacdf8ac5e50a3e86bdb56d6e0a12a850c12ced7a19665fe2e18af942e2bb00e7af5e7e120a8b574c5cdd26fc7c223d598b9be0b451fe8ea74eda49b43037cd98a3705720bbebd6dd64deca163fdf3c852a16e001fc431e3bbc780a0e1d42f5889e21a9c76c6e232b3f397b04e7c995212ac37d68bb19ef173c50e018f1379b9e9eb23d4217026d5a19b554fa9c1171200000021c000000b0056a2f6ab7f1d6514711d671148c93560d6855c8200aa6cd353e9a0ebe8c4eb3e60751fd95c3a1bef9d436514ce044fbe30b38b46d74a0312b213a37594e09e729bb1b06a482549e216a8628a0c6248204e1f6a3ab2be8ec73bd8d62dbcea62083cbe118638383649cc0cd2d3e855a2a144a08b28fc26e3815d20056b8103a9cbd735f4a8a8976b4e3d7a7e224bd0f9610ec99b3e5be1866db64251fe4ae07531eddee641f1000dac9e91188a33587c6000000b012862a105817d5e8b9fd001b077963e9c3b95ac916b83c8a958929419157854ae5da4e4704e0a6e6ac6fe1aced358e45cce4fb5b772a2642d35f53625262ee01e89f11b2747bd70c0d100975500b7e7e3a26443f92c4b86c721bf34b291c5c1b326c678505b79961de4f7ec18c6b85e304b55556ad9def7631c9f07208167768daed15a13ae6b104c0a2faea79cdeb530c758413a58913b9aae60143d15c41063b7715abf23a665a8a56f37fb2eedc3f000000b00eeaecc6d1af12987072bfe3e8e52ae0e2d267c0bcbc6b762040fa89b6478f5dd75ec9667456b67b0bf556553902bdbfbca5c1907b110749ff75e583e1f00d982c4ccf1c70425a9ee17ed6bb20d0d1cd54cd07de20afb93c4d51e25a97245207a45faf08dcba75b355be397ae585b434149b48647c01674ca4abbd38cea11a713294c0a1c5d4644aa4cdba9f4bbdfaac15a631b3eaee9d167f9942103f25995c5ef6b11f6736a45feb622c609ba63f9e0000021c000000b00374e0b29c5a094f20e996209ea9456f39b12ff8b33cad3e0852cdbba022fb322b9a2d11040317d6c023cb916a8b188f05830bcd96e91a2dc73cee40c59bb623e3e4e3fa8f7977b2c871a9d405dd971ba88165efbd303e6c364809c47fffd36b4e40086cc8e76f71b0b9d7adaf202d32278e56a4168d02c0f37a3c7fc162a2eb8d79bdedb13e14d354e867a4410c0f8428055c43968838e88b32ad473804a957670386c4f2f4035fbe543e769e076b69000000b0244f157d4dc1329ba218137ef130db59947934df118889b43a9d362af8df127b192cf334e284ea140d5b907ed06c79753e8c7bc03d856426fce45d412356b848a7f4e20cd1aaf7ba88f031e160d15df2febd3c237687e5b7b7815433054b2ebdf1ae3e5aa4e38ab5f0285423db43e02e17ed23af36c855f2762d57af35401c01c938418123f33c4a2c0ef44bcf3fa6572fb904c068064d525f1d24c1af7827e4ff3d06c511226e73c5bc4388201b6fde000000b00ec8308a45f792d709ee120656a561358391808271b959d2b4557c33f1540c02efb75d4710c393951e6b0979cde73eebf386973462317a9a62c299190001905208e622e246bc8b6ba4e49d3bcc3e138e75e49219da64eb1bbf40f83740f24e948190ec71d4ea08e3a37b21696a1f3e032bada960e85295b9495c6d69b6ad9af4ec5e91c66043c89a6e0f444f16c1aa760a40ef9172cd15ea91c4cd3fd9acdc21e757fd798d1ef7e3d27d74080ee671220000021c000000b0230b530550f1d85b92ceb8f9700b038bab1290c6741d947415e8ec4e72dfcaf311e8fa6e3a1dc862a1e3eba0ce9365787ad9b807aef4a47070515483905534e427f49d9606c4454765380d444e56b09fea20d73d94de65619243bcd8a1e728b85544206585175aeb6576f4c7841e7ba609faf94e848061d66b0d3cbcce1fb8c27c36181f058d679ffb126f7032688613070c0faf9d38ade608833ce9d3908118dda6ff4e86e481d2c82129401c394687000000b023f5f0f768dcde7362da46307c7448d004cc5b0124c89fc627d06c8a069d03d3c78ec4159e407cac7e3be5802fa9b89f364b34ae0f6462b6ce2208183e74bc87d7a231288b052cd7c6211472b2d33fc85bca30e2c93f04a6f32d8f557d1f2e08a5b0a59c0909a441f04f5406a8ec8f96239530ca1f8d3c1884d42e2c7db77749b6d4497ac442a6175b81add20931facb29ef3c395053f8e39d260889b9ca57ae3eb41625351e73d06913a073394f9057000000b022b0b5076b20b24e11836a76a522d572ff638153b8422200e80797b8b73f365ac9d322f4a1e4fc7a08686acba10db6263c1c740547619a058ed93319c7f4db22f1863163868b82fdbc7f16f004e5348969507f9aebf68517dc1ceb63913b8f5408241440a3b686bae9abc909d09af19f1f6eeef10a73228f2437017979ec656248a7f31bbb54ef4a6e1874b9fc2ff7b003b643cf1d78e137baa5b826f9945b3ae9b7b181ad5b15ccb78541ebc245204f0000021c000000b0058df20aa9e2d419be4c85e2ff12f0ad9504f6d184b068b4a958ef6e1a106f7db13beb3d3fff4800fd5124d7e7914a3caf644f97b85b2aa41ef24cbc80456ac8e40f4fe582cbe47c0aefc80dfe08ca72841f92b2b140bb30a8fcb91a97c5528e793bd8f9a54918d17851cc29142cc70829ea267731f1f49378750d6b27419b75112fc81008cb9f2147803f059c449efd14b4f168cc483f5dc459e56ec8118bf13a7b05acdac8d1634038488577a0f702000000b02409b121810cef898432ac406937a7bc31d5d66cb134ed00e5e27bf2848702b8eeacb29474b730fa54db88ee7f3ae2276148e70693cb1a026c74f0387b8956351a70118bde8ca189516cf15eb2cc337f46991f134404687672f95c449a345fbea43f947d6c5d18e4694f8104caf7b1ae1098d518de03f9471e5c1e6b47e77435dcd541b4d3fa0b8e6bc617bbe46166a8130df798d6620fd55fe36bc138f276271d3a811751de32895cfa9cfd2219ca05000000b0185256a98a495fa1fe843337693442ea036927e8f61b33397ac732722b91b959cd1cfac9e5991972f907eed2005d693b9ffc0d78662c58ef2bd32aff1407a7a87503e69457754da59b91d3f98ff8699c25f585647e19b98397ba2f0bb08824d9657d6fc4b11d64fc82ca38943538fd712361d1b32af9628073572d37a6e7620b89de9bb26c1f3fdf805f312b03f6815d111a3ce84520cfe46b799ce9002b60ae51967e218f21f87ff57e170a5bb6bb700000103b000001cd0000010c17d9a481b492021682f9d98909e7826a8cc90130fe1dec54735faaa2e0edb5a12524890c000000e42c81f2011c27513d18041c5864011a88216a3f23f529aea49d93ff8b90614218e8eecc655dcb7de83a4dcb465805ee1f6c306a6435030087c1ed1a3f199678b0d2eabe48b9dab926046611d35be886a9b1a0fbe87c0b1088bcc4cef405c0c5b286d204d79200fe0a5ecad48ceccbc8a8d4f61fdadf826fe5ed11710294df686902811d6e9b26fab9d053595332793d950428923a2bf61ed6ba3c4519c47d5a5b42c4d7fef26c6c34fab0264a8dd21748319e47b207f02f2d2430723e32a16cf656e920929d71264f6a4ca594df091308cad375c62e188cd741bb2c83592f2ccffb40ffac000000b901716a4aa86886a1dac02f2f9ff903ef7191caa8c4d7018438ce0dc349f0e47893b7b38b00000091ac11630d5228ec825a616c0f869436d1935019421d104d8758fca35c2272d14cd77912733858c15eb73c93742f57eec908aa9242b9970856724e80edc22edd8d0466a746fe3c95a5b1f5b1076e8266a6e1dc42400c7603644d3d1b6d9ab1fd94744a5722da693b310687c24eea31c7e744f10be6ba56de2c21625c145d9dbc1d5558c022a6a8bfc093b69d389d3b660d74000001820000007d1e45d2f6a0adb570c46c5412de00213e2f81732f7e99b130d0f6bff4be1b479959054885000000550ff1549bcb6d4e77fcb6c743104c3b958a7518c0c436b0d9b4a2e8c79fe41168f945d5c3a6769775e537015e385f7771dbf43a6fcc6432ceb0b0a62cd30d82af8e1bdbd4224e69bc463870aea40b2dbb5bb483f251000000fd285f862161e85895d382d356c34840373495af46021f4afa250257b88eb649374353487a000000d5ba9ea72123a6c4817924c4e5f9a237892830508bd858d12f4584fc89fda717b82202eb18b619732adee8869026381f86ad752e6f64608c4372c754c9c05faa0811b90f453bf07cf05733d51ea5d530cd8ceff191d40ac290d1c6d88dfebd7bf43b034d453653528b84e827158985341090efa3d549882bc5040f225a9006a20e5716f70436f3d806bd3628b49a48b819d2884cd087dd9a5249be12033425270542aa445eed80d0c741640bd180865629beb4b25ebabf868f0f0ac95bd1456fbe178bc9a33b29db5622bc8f2f7faa666a112a9dcb3a00000146000000ff265a06d88459cdc9958206d0ab2fac4e7a46e0af7f05cab2743c6f12cec2b580856362c6000000d7f592eb6485998575fc3aa1d6e56abca597c09a0188a3425f75dfc24981bdf00e656e704d9f4acaf7792221606f72f721feec2eb29548e3603a99cfbb2bb8fc8b185139ef795c30994d0a299d094e4866a51b8dbf8eb6a26047c6d8ecda06c1e6acf4ff3cd76efc882ff17789919a19c8835e5d1161590b605260a361ac12c3c61fe4802dcfbbcbcdcf0856311c83c240bc2ce9aaf804e3003eba09232c762f7be153efc525f1b2249980bf2cf8fe5ed9cf6a663c2d1e69b174ef6a2b45fae12c1c60f29e6761cb69fb306653da78e4d045ffe0b18555800000003f0ebf8fe2ecc2fa1d8144e0c348121a3a63d2e776df0af769751782b964b8018e28f6fdfa00000017a439a84e099126beefb4ba799d8c47499fe450c014673b000001b3000000c12fbc5b2eb2286a6b8506f90fce96fb3f7aeba3897af7139b8e84ff2b41aeb8c686cf0362000000996911ce698afeb9b3590b863ffdf823e811c2920ecd69a5245c004f205b709fe98f42a7405bd38df252e7fbcb49dfe2db0b9d834ae5bd9aa53fade1149befc0f3e5d7975c4d33a46792b9e374212e76483cf0bcc093261ea9b802f5c5e041bf3028092ae8840a358d294e4126394639e3606b281187cbb745076354f2e579e37d725ea689273a7aac9f4507a2d6efe0f153aee1a683056c9f68000000ea16257c20c169a88630029cdb5e28301882ff5528c248117f82a160b09ce5ff96e0190713000000c2098e8180df0485ba0fa98a37704c3b2171b3e5a2b496f48f6fe117139694c21efacaa11223e3377c6349071ac1aa58dd438bbbbf123b790155e75cb925350a27604d2f1a67c18d05c18e154ff9cb2b528ca86c6b04a0be51b02099fd0ac04beabcfbf6ffe2d59d85cb02dbf1ca57837eb3b508dc8e49766bd93996d6a2c72b167e8d70ed0830fb86a9d9e33a1ae9fc19b7ebb3a2f584ab46db37bf44e00c70ca03f09e8b72e88bf239d31272872e33526c766886343dd53d302fd68f86566d89b01b00000190000000840279d64a70b0e4dd91fd0b11528966d388e11cccedbb302183f84ced6f9d3ae2bd5789d00000005c47c5d899c395459973645e2a74c0c05877719d0c8eb2cce957e1fc9d4bed8ecc8b86c98940133054f12d4b2b9a0d0eda463a1348d41511d40154becf315a6c87f737be505706be1636b493248f497cf9e1bffa902d5543573a9b4a350000010405e5b6e78a325ab2f2ac6261fcafe4bc47a73657384a117f377874853bb17da369147909000000dc672b2dab1c90c55911d058c819d65782724688d66307e099939073b53035481c08923754dd708c58090a41ca4c8635184f42263514f2edc33514f6cf5aca8d867fda0527d4b04762f38439cd23d084526eea66de5bf211e1830516b0461ad5e13304e5a17f5d2ade69fe1cf0a8972580621116c45bb56b50ee08aab66f8c0dbd84972c5ab39eeb0bbe3a4f54570ceff80f6d408d9acc0309f9e72f1476a45fb037b9475028cd7d0ec0c4b175f7b98ec7d56b32da11659696cab790329456d8ab27b9aec5ae031ce55700b174e8ed8bb9825c6a258d3d5ad3dcc597340000016e0000008f2f9b5a95e4aa90dab337a7041e29315a20745401612a4951309d1c5b35b76d17663ffd680000006746fce5b0c7f25e5b2969e2f373a45213a78bd63faf3cfb2ca8e2ac5a8b2b08a1ce2405d55919064e3a461fcd56bc01397c48c2fb81569a5336937fefb86e6aa09bfac91cad125594c353451b0219636c01b537714e1b5063696140bffdf5ad6e9786571c1b528c000000d7297ca6a760ce883db88931cba904becc703df116609368fc108573b5c50e4084384ee123000000afed263a4ec6335c5e8b6485ae57618e596fb1e4ff8c7f7c0b81de68c38912aa977a28a8608f71ad9a295c988076b68a8b9fc4888776df2dc88f5798f6cb944a1d5a9221fecedd873dde22a8f23fefbc2b6dd506a973bb3dc55e606d0260ffe40af5a61ec35dd5a9ab6490bdcad5b7680d82cc17a72599ff8d125a507ffcf302d2f44cdb8050e101a45af025c9564c6d55ad11461325f988d7f83e79faf7ea7031d0252c7181ccd15f6ba1665c4034b20000013e000000c4233585eb29fc8ecc2bf2954e2df639c320dea2a3e8e4abe7fbdb5cc7690eb21bc645343d0000009c906f15e6688470cf500f310904cbc9e4448ac2a1ae3852120439b0c11644de7acb7298836971ce8a77a721a2dacfd7fec0baa687e41f5d801aa03f1f80d562307fb4558e7ff0b837d64a98f98ec2f1e9cf93e7f67cd7a1e7eab7f2be671753c8c875597d0bd3df3258e7d2a114e92f176434b347d1cfba2f0747d88dd1b5c6508d369be5a4ef8242b0c02acc8aea8d36b0596cfcb4940bb3c5d7d4bd00000072059027929fd19a74c76e8b764417a6eaf7eb5d9a31cf433312470f02f892fec7e9f60a850000004aa9465dcad8dc5c930f65b92d70b97d23ed2a1698d4a5a3678d7070309e7580b6ae3abc5012e30cb281cef6a7712447d76f033f275038622381162b57f7c74997535c58382e71fdaf42a400000160000000c407e91711eba9202a469d942d2f1a0f1da43bb24e84764653a86093e182ff9610262f6a680000009cbb8d8480309106c8036b7f9ce3f905c23abb27ebcd12d2bc385e88ed2d7cdf2743be27ccf704bd9117631495b1b5d3025e8ea5965ba7941ba7cf17f7c843c74a0d9bfb48ea24270b086d819b92892bc35f3d09b348d4f4c4a840cc28dc4754b77d0ac994dad08a1622933cff2ad1e284d3c1e772c4bd53d695d46a3452329ad5503caa0c49e5703d7fdf912662473bd68ad1200c6ac159146cd3a1ac000000940df47f949b62700daeb58ee3fbdcea64237f6f224ad3f7e83abc20c882a8e6a2b73657e20000006c6ac28d18e6a96965c0d40ffe144b26b8207ee6455dbd5cd6f407cf1aff93e81e2dcf48021d3d2fcab8352f2dbf1609ade831415799870f4b1015c50a58c2fbb4ee328075d4f910da1287e592f95108cd684803a10587b00081f8c97c539eb39c46b9e49b191c0e7102f48385000000b0000000591e2476533b145be9f400bd97c81531cfc263082216506c0e5d4c18bb8e35f4266d3fcb7800000031c44e13a8ed5922c5500fe47d2ad6720018730323452081549a1fb3ec2e45597b0d83a4d4f46f91a4ced9de978c3a2c29d20000004f26c9d0fd67af05560687f3113bbfafd67d4be53473d0b64831d2ce353fa6a2b00f2accd80000002758350e3adf1a0a15a6a1c7b62698eae6b636e02987acc08af467a9c891fa7bb99cff518e193c0e00000184000001162c86d74fb28c359e14f251f0bb40b7c54a9cdc91b5bb2b9008f51006db2dbc520f08a357000000ee5d79f027992874af26d77ea27ccfd07e57d5f3f2be2a5a854d46f8ca5df3e2c3946cf0a20be758291390f9e344b88f8a7b240e908ab8378a456cf88810842e8805e5f36ee3f3a4d2427441592087028df60e56622444b3647502aa2365f31799adc04fe4ac3fb8f43e9f1d19a11d48099bbbfec3182fe89003a77f5cbd0f81430e7a2391f15a7386165378276c0508871eb36ae1c7906294d768d2d219083a7754b834db15c94068f68306475eb4ee6496020b6fe9d4ce71b5eec9db79604c96715eec6c398916b24f838688c72d676c22e5e3780344a13ab3c16847ceaf2854839c68b3144aff1f2f091a1706af000000661534b88f40444980093558fc4cac4bed3d7fbc9598af09ba8255fee19dba106efb9f2cfa0000003eee6be4532e31efd0dd422c8cd93b560fee35377712c92866f775a0cb795daadb4180f661b1fdd0a81ad3798a62be6e1e65981e3ea84432aefc6e8d6a3cdd000001f7000001270b56989daf809628f3a34ec1f6fbcc5d1ea50c533b536362ce24795935b2f5ca4a1480c2000000ff4fc39dec48e20d765f642efa0c45bd86b11c66c352866203c489b235675039e9ad235c936bf860661ad47e39ab73c806720d061327da1a0e4564658941726a284455e1cab7306ededee24ccd1caf10883968ca27f6bdbc8a6412c0a3ffa243c11a33cdd06a41752077519ac59e1b96eabd4dfbabb0c45c0b42f185ba7e1fb7674c6a68f925beee8b1cc8839141b6fe7aad06683a2e2879951443d6b5c517762035126efecfd4a445d877a5c219e39be25c339f9638b554676b9ad197f358d0fbfec0f39b137419192341c7e16a4579275fa6a2edc88fc7c07b0d02cd84e071e3d9734644b6a20d30643fd290a22d9a5551beeb7a4efcf728ed57606778fbfe000000c82fbc94b0a1f0efe01cd79b786d663f0fc588c517134ce5cb3bec5be3a0142498bf48046a000000a0db6294ea95d4a33e2958d922e7efdea814abc45833a04f0363cc1ad72072ccd4aa350ae361fe592bccfff827cafd9045af0bdd3d5ddb06991292ba775523b1a084479621eb2cce66970d9fa6cf2646fa4ddfca9137275152389a0831e25ce117d1d1006628585fd344d6fa5204dbbd21563a41ca90a3fa6ab458fe6796f14f578d188f436decb6b4f0dfc23fe67c5baecf2385d98c1b94ffbacb341b4ec4561b00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b02c78906d743f556b7e45e7c23b0c2b39a7d7e4c1bb3b56e04233dd271f280c019ada29b2a2db7f0568fe0484e122249b38b3c172aa515e0bdc2324927ccd7a2cb1a3f129239fb734a849a7a84cd5190661d036d0d6098190ba4a46cb799ce71850d1123486a8c6237217f2c8cbc6e9f327b417d4dbfcbec7300a96d3ced7313675f8c4d7638107daa550111f5418a9a51720b6a5646d3837d07debf410eac4250491850106ae8b3991e72c216bd200ee000000b027048ce49de31396e65972d4e30e18fdfe501266255a602e67f807bcaecb00c102322428b1d9d8de479a3fc974eda8df463bfde97f39ca6d2a02f165244b3490dc46d840f89f4bfd48c0f5b3b084a95410c36aa6f3dd5753bdaf0090783e8b55121df8d21ae74a9fe8d9909738bf2a5e16c828861ee3d230bc085c49fae496f46b31ea994701eb3c993701651a9299d01630050e38ab319307df9356c45a35676aea11b8c03038dc3f06e06ca0fa4d17000000b00d5414ca8f2b80fa841499ae221e241ef4becc804699753cd85af800fb11d55436431aefc747f26fabf3333b186c25cca88fdce59540d24766aab5e80871c940a5d63c72178ee2c4242b8e47d1728855a8159ba7206202ebaec7844f85fd85e91f2acb82ae5535116d6d654a0486e6472eb1a1e2566f58d470926ae16b69332146bf972e5629d7fd1bcdef2913f73a3c048691322688d956461946ab645a512cee5659c752930f768554b644458200f70000021c000000b00eeda7a6ee4b0d848b36e73d2b99c6192c3facf83aab22bcf84edfa1154572152d9c91c4a2e4ce9c76bdba7de8c1081f78937c11cd400b1d9da278b3c567f2ebf786f6735f6c220a90ea7cde5fb06fcdf8fdf0124f9612ae8ab946f87121bf5754da0f74e45c789354963d67facec0551b72a8c760e9cbbfd9cde49faef2c5faad421127a37369818fbc6f70c5fa279918c5ee5d574a750f0150003e2fd176a4c2abc7c9f39b7a43d3f009d71bdaf323000000b008197ff8a9ce32ddfd0d06add052c63b9a8ca637a4c33174a41c826743dbbb571735047bbc72faf946a536d091a5c632d97f64b2c40e8487739b9e627cd33c4a43a5ddf1e2d0097cf780cdcee9bbaaea0f2519d51bf40106f873e887a46c5948c298e2f447a3cc636edc28dc37a6612127086d392c7f5cdabf96d2593fc2113d07caff464f2cde326e749d62f09ff038270cdd44ecdef693518eedd07ea87374c1a53803ce0622f16a2975943e3f8ed6000000b0088e5cae30c252963d892ad1250035865c18df6ca8769e7b67337e4ba2551ebc02f27e355e81765139c6683d9a24cc41529ef0a037f155ea615fc1bc69c1df5ce661a92891383883f634114392aaf7487ef69c97e57787625101a7d08fc4910c979d74c3b1169ecb0ee2a13ba049ce6303f4e3fc2da8f998ad6261edde004a0d0ff7b8fba33e1826a10dfd156ee79ffd2fc5faefafe18c0cc10c520c2a91dbaee1bce8c9b706b3e75bb5c35589f6960e0000021c000000b02803c504e5d7451e4d96c3b15f15767e10c108245e334f399027529e9141a8d9a729aff994a08ed6a88153614f85fa8a41fe089ae6905f1eab63bb0cca23f5dae2417abe544fdeaad1ca79f6a4f7cde3ddbb2fdee5e64f7c5f56559746aca6e571aab7c9e1c0e70723f9aa048b59e5481a3bf758c0cfc10606c49984cd418fdcf7d09fc03c01b003bef5e3e6f784fae621558ddab0d0c6bc184495bb68f32bcf137a1a498bb6ab347a8d8602e1b82105000000b02ccb40188d67ca2892ce5f12104f0ee18da44e617d00a55b9b36d1ceefc8cfae2f20b422271f3765f8638a8876edce7f588eb782be883d470504c83c6b5632b3557f59288442d1c9d4c88055d72de6b39d9a5675f3e383f5a5eb0753a1129c3d5578656387e414ad38d28ae84ba6cc9119365424ad7db9965a3ca7219477e35a9b06cb117971a07f2220d6970f3d9a3f18989dcc8ec616dcc456f1b0a7ae59ddf9078479d826fecafd28cbd2746d0c25000000b024515b430d9794d13eae6e31042dd8becb04fbbe3f36888fc540c7691ab850c41bc6366fa99e9a910880cc3cd5f2d71976f9e07f9d905181118b64e6d59db9fd56d1d4a3d9c4d017c4113fe341c07d98fa3663310503b6d8c885ab5cb9d7367ccda43dac6337bc824e7dc3c4989ffafd057c8f475bedeb0e802333a20312c5ae669dfb456aef4a23ee7b5f16b892dcfc1437b75c28df5f373398bea591da351b0baf26905c1c563eba06bce1e68a3f2e0000021c000000b016a80a59dfe0f5f874fa4de74cb3fb08fa95ed70cad79d9b76ec570576b994ab97ee3ccf7864a03105e067906aec97464cba94a469c45831fef69f75fcde1de7d9db43dd483ed7249a9ca5ee56f4fbc125e19b81f3aa7bb123e3f5d16dca0a2bb5bcb8f4fb00874e66b4f094a8c1387d1d7824c0176969490d79bf21d6ab6fe18f67bef4a2a4d437a44a6d0e613f21761739b197ee17a3d47a6b9d050704cdb7c78c3bc7b57afd40c063c5f52bdd7e4e000000b0205208881afd9554d075cd599c9fe02c7104b6edcf9e18659ff3bb38c5eb18a8a18d1820d15f599b2c8499875fe301ee7fadaae8a8eb074f61e2d24f1d756d5b1ee7bda0b14b578c2478424edec5c5baf59b6a0017b5b17a885411ba6a85b80122e958aa78b408e389e881052cf3d100147683c69b11f46e61c66c471993e37275d4236b473d87094f1ac7124fd2fff603b2bffb142cc5f129e4724916424bf2b0227fb1f798c547db60ff6a33471f1a000000b0162ae1fb5940c4e9e090acbbaa16cb087222ff397276f1dd92ad00381d1587c82aff73a186234e27fe535e8729e9e9699361583668fae4681036b8bc5626c33e031649ccfbd993443de4e47da04c5be05bced4b15c4c8abfe32058a5f95eb75ef21740b8e9e12a11c32a4543928e71af29227b81dd71df2e67d616751e570d5e242a61286484a03355b965f16f30cb602e7b24d703be3ec37a1efb6cf4be8664747fa29e26ca6708f34d48ec6d278c640000021c000000b02ab17bdf50166990ed6c066e6d1410aaee45920b624716fc4660c91566eeec5a9fc4fb87c9d51bebf05d98151fcf753c026cd0172f90740d3bc3ea39c6436e2924807b346279685628885080fc64ff039e02ac0a2e52ef3e29c2743c4d6e4f348470b326c44b024bef95257e66b2b9f82414721e492b121e7c77aa9252e1d1b8c77d3383b6f59725a776d1bf7ee38e450834617ddf681b9f5dc492baf5827b8ca3ad37f95b9ba73eda63005a902ad614000000b000b851c055c5d0e6ae00eb9f8527818802b52773298191b88d0adc1766b7661c6eb019eeb2dcabe614adeb99137163e6b70b4d26cae56a05ec01d4f80801e6e04d61e534eaa2021916f3edd454fd6d03ebc2d31e7bfe4158b0e2ee3246132d2e2606cf9c5427dc7057b6cca98c346571058ad12371b36e1a7cd3647231deb6acaea80bb568d7a7750fbaa2e95f8aed5f2542ca421d0af798c7fe26cb86d3c41372ce593fa5cd6d34068983322304c16d000000b00b772d5e181cf177b5199f1b8087f3cd7169ff45b4c2e4462ef18db061dc2f257d5ce86c4f14f394c83091c4e6bc4c150f2479943339dbbc09f9e8091e6d53b4edb105dbc1632851b53dffe339248b0f357952bda4deaed6deb6443f2fe6e76b12cb5a0bf7f9396c950380e6d5af487e1ae7538622ecd299577e762f27035644e9d2d824c0e3f55c147e479702e2abdd28893d64a3d128fc329141cfa2521e381f3ca103bcad273f70b0c6a875885c420000021c000000b00a6cefc5c3092b87870a57fb4a54db2b01d416d0f3f54337a64168cf3773131f7412926e679d01a98366b7526df899e96cdaa86c0b7244a2fb1f32acd1d8f6bebe9d0ed1f8aaba4619cb6c06a2ac74ffee35e991826e5b6603b3d3f8ea29d4b151645cafefd94ccda42e72cf4c02dd9e2c0192d38ffb64b7a4d0770c586feb54ec529a680bb78072f5ac9800b976d16103b37253e43f28cb536db44cb290d21ccdfc273d87cf0583a53945dc89bf4d0a000000b01782298ca15548456387873c6d0e072fdea9a5f7bfb1edd5a3213bb8ad8e4b5c1430d6ed42201799fa0197f59e22b17d697552bcfcc4afa97e4385aa00bb338934f3707342767eec26ad51e4fc810d69171e765d5096460267d630b58e9cbe4eeb2f2b5e9f7cdebce3a9f6900175a40819158e4f668a229a477c8e7538ee3fff9f7158c0f167656a05862b2004c13bb9139c7250ffacfc453febf26465d24ec0750aece07242d6343b5e1787cd9fc4f5000000b00244a3ccd5f36751ee6efc7e9e3022c88e7a6930d24661487d327394f71509fa57154b06e05036292b4f27a31216a347018227282b92c282e241e668d0e8f043c842dcedc4cd427e4075530596eee08de8d96c1b2e713b2eb3abe48baeaee03a132ef34e7534c94b215210a11d82918623d22f58e9aed6408d32ef3ed995ab01a36a7d2153b033e742f5dc9099eda7222cac5609cc9bb89c1e3a824522e993f2a7977e116d036f29c8f47793c2e668d00000021c000000b019bde7c6d6b7ec83ab8a3d06bd28f045dc871c70029f037b116a826c8dd9f344d2b2e54e969cd66c0d0971b48673074f4788d5937e9cc6da321eae16c5896d106d60d188fa117b9f42fa8c38580d0771e78a5360bcda19867c1c56eb82089f1f870fc4c4fa1c5552ad30f9ec55cd1ad6106f9db289745b40323a0b42d722f54d0cac53d07516bb49777381e2c8c17d8c1c8e031bab93552655ab5a33ce6b943a923ea311b7fb680bea1539c92f278c56000000b00a1ebd30b7f2846a7957065219edc0399520ec46abb8a2eada35bbc212b9656e95262918257e34caa2666179cfdfa2c195d642a3ec556ec491cd28c22978b0db024175a2cda64ee54f07c88bf6d827ad02ce5cfc52098545a2c7aec3081c7d01a3f05c64459c0b2c559f8d29066dc9dd2eee63a51c9544dfbf3c1ebc81902dc3759e64878ad9492251dbce84a8b5b9e60dc4454a482467cbef1d072f56c0d47744d1a7d66cd842bb725eb2796eb9c2b5000000b00950cd0745ce61b9572001ef02b438a046b4da1774999db21771060be31f29a2f02b064c2946716773656bea88fe8b8ebc7c72b0ba415b8f9ac1509d9d52a62cafcbd4ac37ff30534b819aae04c3603bb669d6687663161a796b4c66deb693c5df82a43b51bfcd282e4ce391fedcaf4524708c60598abf00415c3cb73217b9552cb7b6c3b8b601d518113c9a0bd5f3470db4c2e2129ac80123c151bbc4de31a65012aa1d3f23081ab1e37ffec3c73f000000021c000000b00a7e8edc6f0c3d43f57dfa6880ab5e3e7e56200ba7a4d907711d10f1a28127f8b775092b56fcd173049e0233e5fcd23e7d73313baa578f8ea526d0876cfe1f826df5cf7c36cc4d6a23b8edcef75c11bd084bf647e858b32e0e4a395e6c131d3b26ee99f3bf3b9bc0952575ca6966604d1dd589d9e35063d2990357fa54d95845eddbc67b2d2d39d955833f577aa5c9f72b5fd4ff30b8590bff807e784569207215a13b15cfcf9fe60480bdc3eaa79e93000000b029dc8a0a9ebb5472860398281aa48a00ff20bc41a8b8dd023d3c2c6c0bf85da81102f5756f9fb8d26aea14603bc288e13155876b70ad4fc6841d8f67ee39f3d4a7f96c4cd4998bc031d5cabed8887bc1cff0d18fea2def9664e094043d0844fea792c100ea55e5a7bcb141a3a5ae4cca06f5d1d7a6fac71ae2ccf9e3205d972d90d90f6ded158fccedd68adc7ddcdfe022330a48f6d7303a45f3cb70e4beec873c2c39e922236e25bb3a0751bcfe4927000000b00a22d8825edd32ab623fd236f651b795452847b8861eaa77701c665bd9f7ac4d6b4a52f1f9b175ac0a1d995048867849ff2a47dec1e38b7f1ffc01f9f88377c634e0ad3f3d5cb162fb18281ed503244afaf790b87bdc62710a7190bf63175ce1f3670da4e88d7507e1a90d3767ffa021096edba0a781ab9f1d5464c2465b0389db0f461c5f91adf9d9342c1054996b1e0dce9b403c40a12a8f8923a900264540f9857ba72439e23693a6157f0a41235a00000cbd00000177000000ed2f5322d3cbd2d5931a584ded8fccde4c99175c3a8f2d619171564afbd60130b387f2d49d000000c54444b08d8f1e7a397303c0b2d937e1de7c424af3672d1c9a24f0d16e330ff8dcd5ecf6e7024cb20c8b056c0dfc41d218b39f735b347ede2a520bc09d514f3efa9c2546cb4c152ecd7456f9b51f2321095c56bb3ee6d0bdaf047abcf8a40629eff8bbd76504f59cd7b479f12b45b5d76dfd708b0533ec58dd80fbcebcc741ad326cc1f65666bff3801b51269faf5fdeeeb553674eb3c6359664634f0d6d965286b52df009abed4d9c1c1fec810f359c641faccd09ffe101e758724f5107628a3738ad07911800000082020ba8e8291c76b1bb5df2bc8ff3498308a42a707670c3a817a02495f91b40bdbdde152e0000005aa9b866a9687f33423810c1d11b08b53d2c77a0674a757714f087f89e03c295f5edc628b3934e32c3d858781d5b62d559d4c4149d1cd3b630ac2d4530b086d26f0ef6de92517ea15fb77fe7af57d87e3e55e5316d525943f20dd000000164000000fd26d5ad958c21b78842584f1097ea1a903d7bdfbfdbba1ab112e020a41387a0256b186444000000d5e97671f6d2766f296f47987aee693e0f98d226dbbd2ea01514c24211a1ae29660c7a2729b5e094f924dfaf97cf341db9586063f394fa374d1e12af7f50edc97613c6e29f75e1b7109dc3b2456cbfe1f0c226e0708c4f8e3ef9869c5f14e3accf5e17ae7217facda1e94b3dc5d5e06b67c10061b39426052029c0a14c13b52f9b14eef2a362afeac76eaa3a4110589591d88fc6ac96a643efa46fd8b34ce557136c8e96938fd7ebe3217b958762a73bb03ae71afbbb0c119a28e389f69666bb3f7775dd4ccc69c4309ad69a3751490075fbe0a212020000005f1113fca85a0b29077341e11d876332a1b87e2365d2e44d6aff0ec01aa3fcbf0cdb4d66d500000037df8ed7f75a947b506ddb3e45896c1a35d331f3a8b0f2c842734b6e31484604f258b7648743841c1f1a9efdfc2540836401251e6d0861800000009b00000037260b7b651356ef0cb4a8f727e7092bfaf55236319b94bc3d213ee2ad89e962bc66f34bbb0000000f95a66ad2f94be704ae0caf793ba0ea0000005c10dfd38fa707fbad7c9bc5ab0fdd156c541da800b1d1c763e2ce6077f9656741476e4bb60000003492ddcc1215c2522c5b38b8daf0a6d3682ad3a75717ec9f30762dc5327d2f41c2ea3d4c996d2917b5b013f2d438dfacbfd672f9f7000000d30000009817f2ec9bcc642e34f1e4c065ed45b55a0f91504295df40ac1a5cb7f121494df83b0551870000007017fd383b2d629063fc54e4d5677caef5a42385633a63a9dc2df4b37a5a61a21bdc6e81556d75080ad8eba3c8ff768fdb6ca1b52c6c40a51b97eb8b5fb7051bd3d428dd98ff7823881dc7134a3f75fb41c520bd82ab129c4ae158e314142409edbd83441b8142dd647768b9a9a6164b2b000000330a54c18405c9329fa25dfc6a293a5a0f030162aa4ac39975964af9ffab4c604d00b73df70000000bf88079fc99afd210cf24ed00000159000000c92b33b491a5e72d0d77be48b339678278f9fec7a983e0847719ca48322ab288a5983e3891000000a1c68b5ea4e1e8f6b95ee10b64237884d445ce7df3554dc2c3a51c9b1c16943d59ff7160bceb5433346e6ae8045bb58c66ed80ae208d01ee7bdcede3631206e79664301f9441cd4c9f268611ea9dc4fa996085a850740106a1f4a69cdf2ec6433f6368ef7deba718b8fbfb2c605424d8ca8b657ac5f2f72b479df02827e9df3a7911514b2de9c9c243dd7a995f2b05de69a18724a926db85f6d492a794a452ce30ff00000088043772c9ffb7336985f9216831cbfe8c1c46a3cecd801417087421dc829f906e5e0c66380000006026a68ec1c521b09c6b58215f7cf21417ae2a42efb276680dd649271ce69f30ea25cd61c6f2f138acd9debb80f83cb243723de7a464b353ab9699e205099d1573758efebd36c50d0610f4684445cc3b1a83b42921209ad2bd1b31cdf909c728bd00000136000000b324539ad433209063c818e3c6764c85e5e4f63d655cf83bdacb54bb70bd2bd168d57d10920000008b6b12842215905304a0de69079fa1b065f95a40e83d54e9ad213b094ba7cafede06e90c63012871620e3bd7ab5ed6c1ca532645152a0b9df73bb1c7410082bf9d70a3c7f36642d86048736602a9360a09f0a0164204478d768dda94e5551f7683e8576c53d0b7ca6e0a8e6a67d039ed32853efec4ef3b28463977a80639cd28aa2afd0f16a0cd71892ef4160000007b0c1d9e7095e08218d5d1da5ff57025a24188eff86451e4a55eb6cdfb4484cda6fe0352ad000000536024040f1db22da5e84d5c577d1db53083151ac88848736cd5dd011bfa53092454ad1781480670b650f991f37ebf28c3a4c689eadd31bbb0bfa56a621f09a6e89d803c226b31f1839331b91e6d88cb701f29ae000001c5000000e82c6044bc92eabacb8139f2654bee540f73e41eef5a4b35a5b58d88ae1821cd9fba988edc000000c0e851ae04d8646921e69b2b8098ff350a0b5efb70dd29fd1c768b5506445c8576b5c5b25ba7eefae68ddc6d8deaf3400ad0e5ce9c2547d9dbea51aaaed2b5ed2df9838a4864da4012c98a71f69fa0506f195900f2b477ad74b5eb89884120c28a0310eed3287b61d18ca8de39852e4c1f02c300f7bde079616934e0d1bd3d986d85f4797e841f41aeb2b587aac998fd87fb1db43a883b22481a9b8de4ffcfa6cedc8c41e24da004550746665d5af61782a422ced4f17c704565dc250edb711e88000000d50b045650ed047183d019bc76eaabc2208bd6e672ad7df3097c09ba03783eb95ec068294d000000ad800f55cf63b640705e1398f58f68f547502c0b67099c6132b69d343aeac92d9cc97ea92e8f075863da3d825ee5b92bbe73353d9b87dbcf8251a65b64792efef62c1cab49801bc660695af67c3da2c5357ce07fc4a97a2a81c04dd5ad1d9615883e456a07cd16759d21cd47cc36a27bc90cc931329fa73a3e38fb5884ea6bae988d9f5d9a3f7b9f112c4f91cf980a55012369f82e33ce109df79a0cb992c9c0b63df32bab308a8f265671c0b8ad0000010700000055227741e2c39eb8f434429d52e2055c0c18770b00931fcad22e344a60069140541ac6dcdb0000002d557f5b1bfd5ecd0e494deecfbb84bdee48985ca8d813894e157129db63c1d50fc6518aa7f6a92974bf4428140c000000aa0929d3aad52237aee9b0e38310904576afb3ce5cc792967222c6b8516ce10201ae2b1c0c000000823d64982611c6ba9162f6f5dfc726991d2e60a4366f1fb2d8e93bb390a3438ed624f602818e1da5847449f75461886e00d5503728997a478978317bf386424f446db4a205f852c05a78a72388bc50ef64da774fc028f21dc8e1becd78077cd9ebbcbd1cd7010539f6f62baaaa2f68882034bfae6fea70a63c88d75ed9458ba76fc9ee0000011c000000951a01c19559ef12f89e1855bad57e8c89f00fe5bc1ff6428903d89731b3a26892caf4689a0000006dc73f0091b978a46f94af4e99aac6d4b3da45b28c2245d653191210b51be933a3b6a75ae45ab2637b6b1b3c240622f531c1daf1c7f19e107eb2658fe7b530ad19531657b79068becbdeb13b26f460392fe9886d5a6a3c4af5522960b832ba8d5bde00782d3c46f7671f6b1a69ed0000007f07aaa09870dcb2f245fa3d22382d71fff5f5916e431f561287c6e9416c15a76c642657c400000057524f95e2c357d5433b9f3e8e17a040e128eefccc0608e67b1d4ea6fc446b05ddd588fdab9e75a685dce62f0371837187fb47437b96d067eaab2dfbded1e3103b48a79739757095b58227086c7ad0d541ffe00b52564f4e000001100000006f18b08552aa73404d6d51dc1203466547d09654ea1ffaa11fa07f61c59e2d995fcb44a3b3000000471d20e554434baf94a2b41cf6b32106415211bed84f6350559bebbe38d68e2adf6b4ef45859bdbd0d52e2966606fe0b40320272927d5794744e624e7fcf1a3aa19923c557c5061b000000992e5092c55038fe539347ca410d4f36404126dc8bf97a709232c3c56f6f9e4f971496263f0000007199cd566efa125b9a70de36d83aabb1d79f8a76f7e905fcf7e31086a6f03a7b79627ad2e8dbea975a9ae2324df48f6a5d3d8c24cdf9a3d871d0d108981a5c952191de97b1d732c3265ebfa0158ce183202b25b791d48bc8a359a68c9c58aaca283afbee6e4818eca06d4bc75cd5750bcc37000000c10000008115003ccff43d3d59e3f7dd8377c7c2de95ea51b676d2df4a93fcb5162b4404bd21da798a00000059166711105d9f493165ffb7e5d65b8b3bc2dda3f2d662c4efb0296a0dfb829aa8b014b16c6d2ae928385197e8e028eb80ac05c3e8c8614660bad2b650359aa5633da11fbcc9361a05ca7eb6f377266c9e9a7aab870e0389b5c9000000380ed54ae14d8049d832d491f8fc3d0863a74e931ffede2bcf0a6fa7c98c7f9be2803964b300000010b455aeb2504de3d5001b89d66b590890", - "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289", + "archive": "0x1f7d76bc3235a7b0231748096e35bccc49ae87908c4f85d8564faa12f1154e7e", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b003f6810c9c2680d9f8806aa75394a717f7a0d7b8869713a0366f422096dc17800363722dbf876f2ec7d6b51f8cf4d4e14845424aabcc23f226841ee22c7361f56973fb9711e0a3cc6452e3c02bd11b67f2d37d003f8d48312291134d12b9e85bf8e90347540c7eb8ff94f3c22ad9f1bf17266dbf3e62e01ba4fb0383feced357b3832df761afe76b5608fd1858ee4cc5043b12a72344fd9d330c8751cef041309af73c5355d0db63c5de73b47de5eac2000000b0043bc98ee7e1fc601c8b8f25f6a54ea7a8eab8534b6fda514f0dfae3defb1211edf966042866281a57d92248a6b1fdc3d84e4ace52863442f428b53711a77e0360039c515f52502fadd2856783399c7057e2bc002f7e0feeda5854c529ada5f34823ecb7aad0af1e8a40168bcba9e32a1447ec2b1831d8bb59d17472d559c09213ecb0a52f54040a4286f715ded99e401f5ffdff14d8facb39f6ff17aad19079d10335653ab48146dae5305f62c8b9aa000000b01b89782c9c0d301e1aa8f39e2e2219174842350a1c7635a02c1bef879a82a419baf1d9fcedf34410a983058e42b055e0d9547dea0b7a4d156db36a4e7757e2728ad8acf68ef4b6d34cd5092746836311f0929bc6cb71295b98342656ba979be9c2ebeea0dc5fd7f4e3b8edbd52bb7bb71a9b5ab505e3c7e0c027697ce20e10b88ba68c4f4138a743d368b1f8d434e33f0995a380bfa59bfc766173c606f60658a48632765a68c1a1711e80ace60864ff0000021c000000b02a04419780b7286876351a36627669f6c51bce482e35c3a56c16de19ec69f39e9603cd6d9ea5bbb8650fe8d0e33038624d322f4311f858eab2d7f33b0c112bade5eba4109f127387f781a6eb0aefd31326f67680487bc1adbdf745d1481b28e657a084b6662f24805cae855b24547326151c8ddcc8d2d3e5a522250d295a57e3c1c467075e5dab180010a25dfc1420c72f7e451d59738d744034cdbbf02dc6658179b9faf6f15c01c8bcdf5bd708f1c4000000b02d7e1159369cf16f5eb963808802deee8b071ea3d2afb5c01df76d6054c82125d34eb9ed1fa5c23f4e38970f7473ab18adb1063f3b96c689987d6a030bf27b6ef65ee7a63c113565014c8aeebd2e5e692203cb2911c004d786a994379571c72ec2f6e83947f73feb72ad6bcf38ceaf3c0085af909d1aee5e0a6e633a5cab093b6ba533503d97bfd0ce50dea21e3c0d822b986e10651aa707fb34ba79de5b3258619ee75eb37338ebe09f131d71394ad3000000b02e204c19abb42d1c7f30ff71916b1f5f3f51c8f94cb4c093f58b841bb399925b7aa3de77e9d816a365d132cdcb50346325655d9458f6e103dc341f5878aa78359ed0d120e114b042e2851f768d2fa399cc76a163c1e0c85e48a70b7a1998597d627561fb8680544b85da7b6f16a8a12f2fac97522237684214c8d75acfe8299fe2b08fae286df6da8247f1db7d5d72791368a90026c3e9d11f99574b46309e96831bb4ddea5280355875047eff25292a0000021c000000b00a547347c204993f8d466a8f56d8c195953686f5883e0d1f16718ee7bafaee42ae2231cb5dc33d8b9340c4945d4c2a3476b38f336d9c9d981b0b09ef75aff096def056c9826bfcec8d7c12c1907c6c2babfe48dd1706ec16ea97b28d9be10b221e7e2aa5bacebdd449babb24e809393e276c00aea390f9ea2cda637a12d3ffeaedc48261038dda71998998c3c1280b8f1403d9dd5b48718298f6a09cd75b6fabbed4f31b8c2a33e925114ae81998a18c000000b001793bef64853dacf19273852d78c0afec20297b555413991e8f140017ca80690719fcc9e2afb0792b6efeaf44efb116386e50d8f9cc4f36d47e747ec99b1012905353270c5c13792bd08f5d6e0052cc91dcbba46851772a2bc067d6f2a6e4fa6ebd03961fe80e45e5cb10dfff117b962dee2059d47c092c2a18c71ddb399f9da657eb13b84182a421d552c6f6a1eaed2e21f65233828e4139134ed770d521d4e9e02e3a57b3fc60df3a7814f2ce844e000000b01ef49a178f9ae0494284cedf9687b00f90b3a41fdd76e377dc52759f968e745c796eebe104d31080210112be095b097e3c97b7b59bd32a1ec7b3059b514f76d747b2f0e3cf9722136a95383beebe4f926272e350100b7dcd420e1d0daf2c241c524321b5757080101d8291bc64c109c60773cf27fce0f60f7a909775701a2282a71b892fcb4694192053bb3853dad10226c2fdbd4ccc32ead1c6f6e79ab67d9b892d2ee37711677c99fd9f0bf23c4d2e0000021c000000b00f1d584646f751cfa70d3878a9997a6e99ceae4d07d9cdb637437dbaa2199924c7ecda390608391931c890c85ac5be82bb50c14a91342c6a21b096c52bc28419f04ff614f1fa554a41e6694c12fecff6c8b584dfb35c4a4bf6e1332eb4e0dffe97652053286a3af7db1edc41b7438f6804277bab7701d9b030de60fc47ac6bea85097c6dae0b7d2e7c2fdf0503ed865d0b969aa1984632026879b41bf033a7dd227841ee2726f13432ccedb7fbf867b9000000b01a150d5130a2fc0e51a3534e38b4529df30207618897fe2136950ccefa5eaa65a0fccaf5fa6c2f098ce019f3f1b993b3b2735fa51552f1ba34919451537e2d2d3879392130fcdcd686c6abb7a64d191dc395a1cab683c7511bf7434215f9f793288b735d781632fb0e3d2da30effe01526354ecce2dca30d17a237d9b83648ffbeac3cfd25e5945f5ae4a6799be1423a2bbb9abd6df14683c9794222a3e64138455a9c78e96e758b5c84dec75006d7e6000000b00f8c738cc2cccba6a1ad9f056235c0a962000e6b917616608afc9ab4087d352d6ed595b357f79c384c9604554cc64fdde2a93dd0c2904b5d7e35ca1ec092a28049911f1d1263a31959ddd7f6233e83381640ee7c5e1fc1c8af2bd5c83f9909d3af589d687605e697ae63c42f602c71a52701ab66ee9b984d328799db4aea245680001304e3faadc027732ea719583d2723ab9aaa05e43120bb9c21024c506f4e3249395018dcf7023c3a503045118d420000021c000000b02fef93da1da01931ea9802f574ed6706b75874e4ccc0165f432a152fc861c67297a7ce3ea74df94b0334d7f77864f8d87187f9f4225082da701a57d470ad75c0e0eff0edf3aaf38382c27c660714836785c369a9d9def8918551698db653aa63a66cd565da535cc5ae1412359f17cf620cd98783fd49fa994426fb4c38cee26b5ad6f778bdfb956d51e0d17549cd90fe1a89ee5cbab73f8d5e778831c62ec1b36c5f8851cd15da27db6774b1f79f4772000000b0291e4f085117fd9aa83a964acf5e51157084bb48bcbe8b049d4cb95970f02d4f624d64cfbcc5f6d7acda543de0af56abd40628551ec6ce66d582748db80cfa86129c3c3830af9b5e4dc457c985587f5782e4f73115f60883ed65d117bb4fabb836519629641109d4d4edb6514f6e51e11fa34e8187fc30a5164cbd1184dcfc465a2a600a76fd0b634bef3cab3969e9832140a6609b1e76826da973e08b231c4c7e02e298d69c2d0c7187a9bd2d140e24000000b00e174b06dd1f477ef1de29900b9d1cb4782709034d59601f4ed40c8307db8ac8b07372f073b78d0a3e8947e6c3ba51e55cd7370e977b1f9ceb59888eca323d0af4ad1f6cce8c017084352999be6300900b2be415ea8873c82180aa1d560b4476f8f2f8cb98fbc2daeb02cfc3ceaa96222e096dd9eb6b4cdb9a16af61b27a3c2ebdbfcdf5b979ec78995a41a1673f0e9229d75aa0a8546c163ba5eb887150e1294e5cc198202b2590fcb08938236ceed10000021c000000b0188bd0e15f7053e60b094d50008fd31002b2c04ab0ba18683cc922a97bf21f3184c292e652e08ea029a24ebc9938695babb95a9ac389a9f183ec6fa0cb98d06e88b1bea98b44fac3518dfa1a6a6375590b71c446ded4fc85a89921296cfb0fc070aeabfec7bc008a22b70bdc987a79e82d8ba1ac5b7b0dbcbe71ddb89f12af8578fe0b7ea3aa5467dce10d11ddfa07871a23c8cb170ec5607dd66786e00344c5bc1905e80fcfed12602f37840386278a000000b030408811b2dd9ea67030bed05781f2830e291a2672d133fa6a96a8bd4a1838024e8bd110a9b546c2654631995c8be4f9f38840591292cee551a0b26684e868f8fcc4655ecec7fb73d0078260a76fbcdc2d73f73a99604e1de4b81ca685e958a536b06646f3427afeffd20f56b4fe288315218f7399f3c21e3b5210ab3d9b32c6c79cd5a67b2dddb3b1fbcf7913b1b28e09990e9d6e2510b698bbb102fcc1259f7db2d921350bf59d29c9cde5585b70a0000000b02889bc0b44895cbce0769b657e89f93e64c6a21f716f31e3584114a4d8cba155d2e5bbf395a9f3e9d917ea93f942333adfc6712040e487b46d44fa8cbf157c6dfe5d482a961f02ee9772fe87cca6ad143fe652f49b21d7d1838dcea3b8062da8c0141c843d5a0f4865007df3fe9afaa52dd5b7d221c20700b7a1cfbf95f4de92c6c1ebcfd7fbba4b1536b9af983c23c82f0f6a1e9cbc050a6519a132346dfed306ad29b40e4a93b2f53a33291f83aeb60000021c000000b0272586889cc261d847a9859bf2c9518f790ad8cb6a6b676358b3cee24e7df311732764191cfc5aee63d992b9f77016f5c28acbe1ccf352d1b6dc567a1a4a12fb22b9fb3c44641970497bff136f1b42fcb90e98d0a24a779c6a23016222a2746b8dd8a0746d94a666df04beb8ecf3b1bd162a005a6f1841f343c0116cda260119dd459f2ccb0aa38f0ef98239667880aa2541bcd209c18e26060285669724d98f7eb17fe914b3247450951fef058103c5000000b024ec21554706739f9d011b60edd2ba83adc43781f2873a5ee818304c6d879cb87fc7248c7d71c25d2d0c7c73b5dc203b94e77b78fc2c4df7f178268ca309b36c7e1060800e4243ba13de4aa79c76d54e9d003dc1b2b999ae52c9cc1ec71ef4eb030d956e597dafd15b5a8b357dfe3f2b1f2205811627acfd031142d7074d3abb73595ff63dc0f3eb8e67f2044380e9ba11113fcebffb92c4afbf485e4f31bd457292fe0a8d00374c069ffd1d4c4bb077000000b0117ee8c32c70b3ee8e7fab7d336f3bdd3ebfd567294d0148de9bbfa99a0e8865a5584d537928a7003a7c6ea848a6e95f70908a4451187be3b7c5aca2f80c3107788381663af432ce74fae30207d0bba31f10521ea1a948091595c36759c932a82e71b0943c91a2be7efa1cbbcfe8e3810e2e9e9b05e3fd4be2dce311c7ec208d2a43e087d20e9af0ab913ee00abbd43506d9778cdd7e41e7fb5d1e6423ca5223fb1c67cce7ec7d88689b7c3f81e466500000021c000000b002ef9caa4540c8b2d6ea1e5faf5889c298162aa4d1c169bdb7572d025de4afb81f9d746207282c672db9ccfa90c6b9bb54de8952889ce39ab442e2e4cf76359c7390dedda75ca78a5220f2622c90419734bd0850663c6d134efcd956accf343df0fbaf695973313b263dccb6fce957b11647ac6edd1f3aa0db1f83a34946674528984b1ba4e3c943ae035562e3ef653a198fca09a904bcaf663bf030076c5090b30305fcddbdde12e4600ac58ce287e2000000b002daa13740dcdcd22187b6bc750bbc23433bcaff03ac6c52b3f31fe186bdffcf08082ce7c4cb977c6bf51df69a46663f544e0ed213611dd57d0cb0082807f2ee8c366eb0bfbe0b02526ef42f5e6ba7dfdb3d09f8511d09611311a4885a70a6db8dabe9206ef535d025da7b3b89c1764b00b0e8163c4968481c1b199a92fc5e27b2b1ca60376d8c1598fff46c1ceba1020345dfd059e0ae8c4fc6c639cb6529dd2a94c1952d422533ec03a013a54c361b000000b007b85b3888e1471c3b06fc250958c2f8a379b2a4404469e77787505816d57114c0f7be7f45e68548387b2fcfb5cca9ff32f96eb01a2607e962ada20d64f3a23760e58ef2c2437ed567b39fb2bd0a23700699b800757949f6f98d9d6cc43ee52d24b14ef50e1e3a496ce79b8e9dca2c3205294c17e3e82842efcb63b8010fad15f3c9f95d93d8cee82b28baaa40fadc6929c974d132d31f033a515f16f93dcf1a4e997bb1389f75128daee8cf6d7f7af900000f3500000113000000a52fd677485452c4ec537030e8fd372e3fb3e82cc89bad9c074ab1717fbbc31c66b1a36f550000007dd9837dffbcdbd77b48cd410961fdecfba662611af94f54155e3844f9b80c60d7296ecd49407955d8f9ea8c9e68a367349fad187a2a3abb0736f3cea4c3ed74dd7dede44b0e2a8dfa9e2f750cabfc8554c62c6892c07701838c8c5b716f277bcc11a15f7b29aeae0567aafe41c7631a07a7256a3328640f572c0494b5c300000066179dfd3c85bb5067299dab7b03518363d6ed030e637f3d457efeee0c2a987b8a3d3fef740000003eeb6e75e510aa28fa30d92998f9421485e86a575faef09003ecb81e77d10ea88835814456320bf306aa9737d0a4c04df9be61c63783338b54267cf3205ac0000001dc000000f810575093a1e0c6f7f3194142d96945d77b3f39744fe4501d325220abbab4c77f45dcdaa0000000d03ce14f2f1e134151aac4d40b12416ebef5482f3f8251855d8ebb4d296413f2a44d063cf326253a7ccd908c219df85d91a14f6d75f33895ddb91768c40d5ad2b3ebb95f2cfe16a7afe757dcb9e9abc98392b906f9dd1717f17ea13683be83a71e9f42ea3de32f7350287ca64c605c780395326d7c3ef7dfa596709de26fc0f0a5073662ac2cf12964934908b23f9c0bcca60687f7c47609048f9f58952e081e55fba5b3609197c4e1795d528c7a570fdaf18e93ac7c8ac336fbef7b894d767d3f8b0d42f8348e866dbb21628effe742da000000dc0a83a925166f2ed300738a41910113f6a338b3e38d51e7dea80a05213aed6b410ec6d73c000000b4fa52c36feddbead57d44d5c70ebd4503b1343b59d60972e2548d4b8291e2312c8acd480cba75fcf8ac29c2ca9dd43076b2c6d41d721d54f6df58dd2cbf5cf5c54c73c4ca6f10632d361ed3cf61c521b3e25fa214ce62de721e7f98c145721e2209d669f51a9f7977214848949b15ad75148b3de1bb24b2305a54aac0e9eb5292e21561b3c1673e2d8c77a1be127471b6b3d35a32e7dfb2ed15adba7da1c08c92e2be53a260260b9c4f1668d3f6f5ba26e2a3c25e00000145000000701319707d067bfcd36f4c93bfa242501df10a6c40bfb37cc83cc9cebfdf01ae48ccd8614e0000004820679100b1c07f2a7e0b4fc42db9dbebc2a97ed77b82910eaf7f97e9ec7ca9aefef41d39110e1ca291337b8795c6dc038ca75a5abea69862968c7d6058db8f939630f1e0ff63490c000000cd28d05203822ee107b51a53dca4aced6020e03ffa59fc7efcfdbd8b208cac0f77cde1efa0000000a573d70fa7916bfc2880cc06045f4d5e2e67fbda45b9312d532c898ef35da02b779f1637b2d33a5d8ba619102a5edccb96a2e6267568740df98ab55aa6a3227b828514bc8bf2bf980ab759179366b5329152065ad7a3c055972fb3ef44d70df9752e3a0a7e8d01105231aaef9ced20ffabfa0971c88d8f4a3f76117011530301c88bff93812fd0394ed7c75f064020afe62af6a9a82243e7f83d894669b3e8cfdb330379256f00000170000001121e8f07cb511c114f3acd27b681fc3ff1577803729fe41ab86466eb192a9a130463c46429000000ea94b74aa9a298feef68356a67b714e82155381313326df31b88c921fb7992642092d3d07833f9cbae346fcd84f33b707b094c2a4b7e47a25e9e9c589e3fb9cd72c1109b6b7e7180632a9e8fd56625a6fca608d05d6e8c256d8df62477898eec3bea77660910a70942b48b4cb0a9ef3013405764ba5f7e09524e1d0ff4ec9991d5c519bdf6dc7160aaa7f67e2dcebdfc92163e9fac618089fffbec5847127c05772ecb84e340a90cd09f4ab89e1ce1bd86b841044e5b22bb0421614e439324ef1870cbef9e63e1a22b27b038b9e5ee82d8cb33cb27fd06edbfb7591cec696f392b610fcbaf39ad2acc4aec000000562d6af48be9deddd3e133576ac184287b6291cc00591796c75004d14e4919017c9f2e851f0000002e82cd533f322a3bab016bd927c265eaa757f9583e3b2667149c907f112413b7e50e1cea77527b4b5d66f9abdf49f3000001cd000000da22e256a8fa167799ea841d098b518d1cccbb90d4d8be1f33f74d5b8991ec287d35f50df7000000b274aa260d5c39a9b120f46a662cc56ef4f280550f958bb1ffe0c73c88dfd0f25391977c5e7e34f4e8dadb9e10ab51a18894ef17e942537d06aa222efcddaf50eb0666be651d97c953a067ed772e64883df0e2ca4badf525eea6db4ee16a0759289229106a5a6a389095a27b19e0255471838e962186b3a0009d1e9e02641a68a7de5205eb1e5c9bfc7037a2e4b8f061f6030771b97a6780ca0729d38af0737d64fc76d895844e188c93a4b33a05404c40b889000000eb292544368e6c5cbc54870f2b79f2d080b2024a1ba78619d7f77e201c0c54fe1185d4dac0000000c3719524db43fb16c5b05bc9ad61af79e42905c9aadbfc86bf02352bc57439687c49b3454e2a256aee5f0c054281093e6e0752861294d8b852f4aa0bd9494e3c1cba4ff41e9938776646cd3d18ec0f4a297e6ec56a77f5c2d13969fdb979554465793f03863941c3782a949bec8e7734f1c2a4ca90a0e63a4ee485aa3e53fb66c2c11ba7c9f6493f726fa1c201f4441a57a5fda2b8a72b41145380d76319fe1da0809997c958ebd57a323ad56833375deb3302241da2736436ddb957d9d40d39dbf6e3e0000001c1000000ba16b2f8cb10918b44655fa1f0dc66a61f586ae99442f1ef5f0fa5c5a052990da35435f1ae0000009255b120ad350495a28a72cad6a058be4278b950bd5ef7ba37d2b7f311fcd3b7773eaa6eed96f8ae3a45ceda2ef2a1638f444da0640ad0a1d2ecfc9361bf775ba31d2d380894051cc08c7903ba5a178e104257669459b6a0ae373e8f2754d6a85ba7d8ef35ddae34ded1a1163ab21cdac71e24608ed5879a346abd73e77756d86052ab7643b3efbdd672f166a63a1768a8405b000000ff2670ee30e99a271db28ac1d73b66c91daa51fdc8b30945543a9cd64db99cd4655c7114df000000d7321ff60dd7a78f7946fac5538d4558363721e9dd9c11ac00233b19b54cf4cd40a615726698500a3e7699500a132c2699cb2bd6123f6875acd13964e5c66cffdeb0bc31d38a4c2956bb0cff738cbe3ef345bb6b8890602176eee37445e663c6a8d098f51a3aee71109d1970050932f986663e49eeebb83021e6b9885e48ac11bb6674b122f11bd2b4b5cfbe319e2abc55b8e17d3a82276e68fa65e25e50a6b0a663fa40041c744a9c55eb8ad62e68b46df96c4f775f26f20b166707acdd5fcaa526958845428bbdbea3b90dd21539dad0097ba1ba158a3a000000ed0000003c0aa22677875f13531e6b316b237610663b4dfd94de0ea0850cc67ccaeb27c551366d1c4600000014246f2ce7e4c9561adb54cb82fedf8fa7e125e1eb000000a923e5a6144743d06356c350686ae4c6c3d507dfabeb2b6df2f288a325144549186d7f751800000081961d7f1b4b9a9383093ebe9c89056be8537ea48a52b245c7a7996bd817ad6378e7bbb3262f50028a549709513fce44ec6bda92c6b991dcecbc7bbca3460f18b05f01bf11acde18e0e78c3819cc2d2126070a694d94b39c367c68a6af38925e2439e3aedc4c281363b163299268d4441a95fff238e808ac9f8cabd915c37b0ddbdb000001970000006d1252566d45cf757b8cd82d86c7da34425b39c66430f04cdc43e8b3723cabe3e9f2d599550000004549ad727adcf26aabed22725b2c8b4a3722a7b79c6270f40ecb90ce35178f280b4737d51d7ef3bb717f119f4feace554ed561d66c1ed19dce9a91068062f47168e945b169f9000001221205ed1f3c5b897cd80ef0fe61585453b9929aa9b3c67f480ff5d76aed7b8e7f586fd507000000fae441c9507045de439ace844b56c2185d4255431bf45ff6bcbd2a006741ae94f2f88953170fa2795ec54d05190f7fd8e134b0823cfd84696855944afbe74e86b74b081b5eed522834e681ebbbffb7f6f061941d74d2bff885283a030d6f5d473aacde32ff2bba1f40ee67159888e0934746adc23d8b48853e4e91c3b2fcf097e23e8109ac307ba4a4bd774d7abac7c4202e133841ab07b9129180d7b34db7f26fcc2d5b5c96ea7be41b70499fa9cccac180351bbb01cd75cf03c03530a4c7e086488fa6a601fd7681a8e94580cac4806564eba03fd2ae488ca639b4d772c8265b310deb4f0b8c9f648cd97a12edfceb69f4b0b65b5cd979f9aa20000000ed00000093044b50203043e883917186de1ddec22a32dd024a45879af3cea5179cfff4fce6caa3fa4c0000006b5e960bd3309865bfb9a04e2e6139ebf5d48f8062edc9757b19df0848b2cf8a3bc2a7e0b1770aa294c1d1ad5624abf0ae5c0d4e26ff40c8108b34e2624a8e5df710c4c045fccef2ba94e71d1d7870ab28efc428c6e53df6fc63ef8d42e664795d1f3b48f8ba43526be8ef5d0000005210e830822573e3ef4f6b1b61c6f1487e85d841d26ea2d5e01b69b999c392ea2c351222dc0000002a7d21377bac01cbdf0305758fa48de4ab391712fc10f327c5bc62e591e7ff93df96231361a33811a9b3e5000000eb000000aa28d3f49bc1c71b3f6fdc4cfb3d9f17111a7e6fb69dfa67b5806054ec1a7141f88a2ada24000000821f462a476bad29d28078f6321131eefc1926858be9fe7457b97f0aae4cb887ff780dab86bbf14a29b29336ff931b6aea21fada40b0c1c3190f0ffeb418f999410388d95dcf3ff7dbc9a0734fc2e79b6b30d2f5d37de24b65fb247578abdf066470b509e9578398a0ddd9dbd16a9bd975d4d1f88e908381149fcdb7085bedddb33c41000000392a7e1ffb8025a9ca813b4cd2e055cf084cb3fc79a0be431b273cd0ab44b989ef919573c100000011dc434cc7ef54b3ab2c5e6259ef76b2f1230000017b000000c72fbd760c67d4f48dcc8267e7d7940cb3c986cae076acd996a0e3a311a45f76bc77ad3d140000009fcf8260c8fbd77e0dcf520bae7252061ae05d013c183452a825f4b89270609249e7cbc7de2ec568ef2a54dd2bc5dbbe1880d065f4649ab4b6b672b3166cabafed273a023994736ec68059d55abac0ebbbdb1298e3e3e17332b99bfc5bcf64ae807422e8dceadb8eeda3e7cc8740e7db57b69173db4510453b3bed419018bf23e97f20205326bdebf281bd5ed13df82274e78379ad48d0db9c2b88567444130a000000ac067b738ea83fc714d9aa3121d42cc51b6751a88f20d25dffd40e291f73645ab75b880138000000841756786bef213d27bea497a6d326ddb587710796ca205e8c103bf0292c498d84d9ee04e92a99eda6de9b6fc11fa3797381677e709efd27a6cc3ad4ca98078f865047e25ce064c0ac193aa99c81859080b59aec18ea01a30eb74a904ed3e096a14b3c802bbb8c5b54285ca2493f56124e85d5b2d6c56df451996090b2cd673f2c2a7ca4a100380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b008f9ac5d14a4a9623c8c7daa554d32ace07d06d315bee893214c0f43c1a26747728a092c4b570e47077b955566856850755132407b1c33523ccdcfad46ba890532bfe1e828139dda7f4773bd221933609f2252efea1465a3f786d3d4b0d73948e37f3174a07b3c4bea84b66443a6e36d0ac8a04cb5a7f8ce08775f4fd604fb88d4bbfab9cc86091b6b644b399a9dd505195775f9eaa3a414be7d37342c06fb62141b456f3c46249991d0ebce81abeb16000000b02b91ea2fde2de75afdbb0fe90e6aed6212da98861caa6265e15c34ae7a1bc5c941e0ebd1831a3b36f8cd012d56fbdb12291472de4e42d1eb5cca23af8e9f3bcd5c3f1877c23877ef94a16e528742ecb747d1571a873afae245a63ff2e09522b53d19aa3454371bcbe465be5117af63ed024751c9622e097fe371f3bd66b616827ab267c86f6cfefe63679cd88e284fbc2e1725bf831de14e21a4a7c0d21301cdc21bef2d09a8b3dc5575484a8b9087e1000000b0172356b4534732840770004830752733d577828b3fa38302c8c3e8b0790b992c0b8f1db2323433c7f7418ac43f06fba382f81b2a6f85b1fd874822fd2862eeb2d49a236268e38648ffe2c2d83743aeb4442cca48bdbe3278d6d70c5157a8e3cd01316941430cb06b7ca4443252bc8cb32c73018bc1191ceefb33ebb613221f493a63a0717d825b59cabd26a74eb3700b2d40a128139d7ea781ffadba9d1686e8c233904e9dbcd2d49024de6109fe0ad50000021c000000b0130c9f2e097c857d4379dcbc5e2ffea1202f5c9683290aae9eaf72a5d7c2b0bb8fb307c61b36b304705f9b7f46447294c2ef771df292a7a96760a505ad6b6d231debac17a98b51242a0d7d972909c84663cdaf35626dd9f9281a21d958be9553566fec49cc540c57f77fe5ccbc50a3432da08008303c3425c549e05f9752d016996b7b3d0755686798a78e78abe8c9d8092ed444bd395f201b09f7438896d5eebdcd0b56128f6a024b99ac3f4ea24e6d000000b02c68a5ca6196d430acd793fb4c8a631e06f9d16f15c838bd46c8e8f01ed143a5ad7f59195dd89217fb5356bf0686e09c1a620fe598a521ea0cd3791d6b5b60f069b452b2c238d7163a9ec52cfef1ad943cc6fadc1319caf887ab8a18554e97aee216a28f183abdfda5c9b2db6a69fb9d2f5cda32b55929711469944f78bec8133ae824ad4e423a55ccec935104b5f306175652f211b9447325c252132b5f85c9ff1bcccc302099df313553706a44a61a000000b008bf0a568c1191ca26bb0019a62aadb371fea242477daf28de3fb0e795fe648d6552340234724a92c2da1c5bfb484e754dae10c58df263cd7b7b71efcd291ae9562aa9fe45cbb68c50a23b8ec8b2fa8ef68096130a0a749f4c827ac3f3d8c83a12069c22a2225e85e7439968a615b63d1e3be7c5bd6ba41699cfa1880b979a441ecb29f7234e6d2a0d4fd72920cc762509804c3964906a922287db4972ec2b7a9e1018509b2667148cc66498ee5a8f750000021c000000b00db5c956dfea309496929b7b1ebecbf87ad80db33498e34d71fdbd248e306e4716f12b6f438de456cdd290ee948d3748b8a4d1c70cfaa79b715d5031f9a5be09deaa4e09a118f9b890899c3b7315abd8598935ec761a2f89a1119c404a64e3670a5a5703835a8e55558d7d25b61443fa2373926afadfe84caa645fe164987cbe5db210f492a374579187f52cabe53d8314dafded4d928228477253eb748c4601cfa7b353c969603885853a672e37328c000000b023b476edb4d3c78ce03f27d7740eff06c7bff6585120e67f3636a2f3d6223f0343eef5253e935dc1bef4f8902cc0f206e29dbe5d5caf4c92cb392ede7d3f800d88d61c981a6c8c4621f70aac118d73aa225e2dd1ff4c62f739b19958273dc9453a9b14ad7d8e4aa71966b70f9b20120518f447cd0b90b7107408bb611e52c9902eb42a64b473e1121eef6380ad55fac52199c22916fa254c705de85fc49cc79759efda64e3f43aef3221469d375d45b2000000b005e64febeedc3369ca97401fbbfcea8382a575bd67085abf520ea00d3c73635f03b3cb7166fcae93435c5f5a51927fa6b416fa2eee222ddf6cb08a21ab842a87885762986cca725367a92541488d669c7aab55875c88646d362772731cf3cec4c2d0d5572feb0b673d6d9cc51741e33b06546d1e445eaba6e4357c80fa240fc8842ccf2c7f91895873d3f5c3b0ae35ce0e5c375e9d42597a51c1ce58c05a093685aaa7402fc2569596ff78903f8787900000021c000000b00c8538a255a633032e319f1acbc69811fb67dfb50e9e7257d726038afd6331deeb650bc2ab2b6dedc8b539a1e2f293b32b4fb95abb07b7d6ac1981f2f10a8e15c1b4375a2bd4fd2ad52042a4f333583c95ab8be4b89dc920473836e67b74e017051243e17af44762b6e9e4fca2792b9620e6798e47b6b164047f7d191502d739c58f2563aee67f4608fcb1ef45b5cfa92e108bc1486f161e52664e93a9ea864771fc74368bfbafb89333d40f9c01af89000000b01b383c8cc38a2fff78ca8962b48ad4133b9b65aa38615f72a12eda53c5fc905ce9cdd1634ec7bc6a1f3cd10136e13d43a490310639051910168e822b61761604ef5e28536b75fb55e1329e25de43018105307d99e13f43ebfd8f7a12ed72e6b3fed1fd52be56623f37a21498bd700aaf012a6701cce5dc097ce8029bbae5ad32325ad3e29645189b18f49946894eb0f314b93dafeac637f346fca972b382152f9875ee43bec4394e4083b8aca85c605f000000b00285d2a84fe6f70dfb69a25dd6b641eaa04272d29c7b43e1244712d22188f13efa04086e7d3c8c4d08e9d9c14987bc605028a839f54205a4dc4fcc052deb6027bf029b4e2c1e1b11513dcafad68e0379b5e97fb46ef78c85e65197d40f18b71d2684d149b25afc88d2fa6c4158af50d42671a78840e60689b63ba16400a48b37d0b4f6823b866c73a84ae09b561dfeb81e9083763be69ae39ad13c9fda5cc23d0f763d6bca4073592c34a6f3a0183f7b0000021c000000b02b4c93f8603a2bedd1bf3e14ac316dc567900baa9408e2141c81587ccae6462c194766ac0fe48c1dc29260a3808b6ca3c1eb55e256223268c15ed656ae10f4ba723404578c6eb1fe7cf597306294597d84fa535cb06fa2d26cea94ff00e007913d1468feb8e745d5883a3b2ffbf3219c0790eaff84d744b79736caf7b6349453b3445c32cd1254e6be4a839b73bb04921c0f23f236840e74f5e706913ca4cb09b392913cbca118d6e037ad7746ecd98d000000b02f0716d373b8ea9023e805359900149823332c6ac7c0573bbd30ede0008b0713c57f30173c05b7a720c675ce2aa564b0b274ffa1d0fe4afb4f3bc465967c359052c7b4088710ced75affc67feaeb00b2d2dfad32c40b4c4004dcef8a07096d4ddce9ce18ba047f3af21f661904210d850d795f315341cff43ed921f52cdf446648f19fc7a3c7e7b50429f94175d4fe46158c671891f6c6161b27d98d9340fd6f1a1fe4e414f7e9dc8ded07c1421d6382000000b00003937993ab6262da62fa5aa1da0a8f33decbc5a4afc2913c6ff4fa5428f7625eada025dae9ef818b83b1421ace61c64ef48b6c5f6e1e1438b44dd6784f7407c03f4acfcc6c8148fbd4af3f43fdfdc25e2fd92bdb26a4ca44b90e370b34dc52993dbe3cbd890dba473001c3491697281673d7a7b96113340b01dbd46973546d4228e75ece40875797ab580e75a287d912c868760a5be7369b05264572ffea4e7d9d1b4f3be547befe0d652e9ad7b2be0000021c000000b0297d01c6de33fefc76e89f5552e19caa4bf70de7076d486688873daaebb0f3587d1ed52f619ed657bc71dfcd700809cd4f1a40fd4a63335f7f0cc018c1e8be9796b5d8b92e430f9d0a97d28d8e207c2eed2d0d60c2e19976f7399176ae0f3ad89981226d2a368f1a8b58226649ff4b631d32fe7cce0147bdcf97f7c6b05bc2a901da4a5e6624235053f862aab51bdb851d24647d0da575a7deaefb29d9bd9a46bf302f26f886d02aea8d53c11a8989a4000000b00ca5d7e31b85382344ee9b6f475f17b6f9c01e49d20b10bfe21728fd67ffe733585fbd2944371c15abccb3069a630a4de1e69d732e481ab632b2a0ac9f3dab8e2e1b0067a42fea2c77ef106e0ee1d45e6695166708b7e4b55f2c4e89c01870e33228fbd0e8c1354f99369c6cc0e915db120927042e21fea35caf13cb3804a9b35f259c33805c161298ad492f0e849bbb0bbd45f7613097e15fc669e0ad821c6516ff1ba448f4e69c0a21f3b02b879750000000b0082c4055422b60701db429f56e5e6cf6006b9a3874357c9fa4bed620365763a9cc442294904f21a3113ee82a33e457e1ec10803f36df7f0cb146757e392e810d31f85bf81b38016c8da6659a95eb3b3baa2f704cbb3134f827af400ff3a10a875d5b7f5d80e56f26d0ab5f5a1ba319cd2da16316f7c8cead94a7aafbc7f29f860c8b4d66b98dafa8638b4270c3b0e0eb1c7a1080e9fd3287085ffca3be1b5d30a22ebc3ae64283d370ac8bf9a55b258d0000021c000000b00ff80a77612fffcea95469590bed96ec6eb7511a17dc11a3fc689df38c9a491bd172509b7f93be329aafe114c5ce28beaafae0f04babc7d4cc1ddd23c880a00331585c2e56299c09584035a8112028d961c4f72f42cae9fce96bdb39c983745d8b3a85f9aeeced2afccca438cfe18b0521b9a9fe31c62a6fd78290391ebbf6b53be52274ae1cdd260ac208314bd26aab0dd3644e62d9c04ffb1a323a19f886a273eb7668d0415523c2284390a001c3e8000000b01e44361395ea25910a3f06a6c5ec0c35f70cda9eb4c58f8f3e2319202de5b3ffc369194eae747e26382e6c13a69ea3c00be61b06f129466741a8c9b1e4dd14a4930f61d65a0f2fe50343310a5e2734ca75625a7d47f3cb0d92000163500d352c3ef0f9f29de45193b7d714895c124bcd03dcc2ec11e5185d7fbd1d9393faf7c5031a32c2dec27eef15c6978410d13ac0296ee7d183ba103aff08ef5685700f9d36616575bf05393ba74ae8b3dda1db6d000000b02eb8bdb6931ee81b0d44924260433bfbebb55ecdef4ef98d21034006f59faeb81b50fafd0f257321a7b80e3ae9504b9cbe849d57ac23835a6c1693fb42f7b860da26ae13bcfff3239b3c36c457ed3b9d623a5a4ac742836a51f062299d72444436d60ed7e66ebb9a025b03e67711c47f1edf37768e266dbbc0e7f3ca80c0d5edee08cff47123c0a9bca69abaa5abc46a222868eded386a929696b48df51bd338f3c25a25408e64d5c6f5604eb48b49320000021c000000b000977016374816e6d477b781045dc94ab2272beb9c59f29f23c354e30f46443ee9f13971f5828414e528974724a820e834202ca918ae2eeb691317513efa6b21f43585ae0cf4ac4cf4029597c7cda09d2744f9626d0501a8202dfc861e1b0dd80ba5b5b5d9c9b45d0947051c5e8c7ca31e443d61b85f15f301222d38231f0827a258492b923dda21db360ba6e2355eb82f60541be78e9b98fa5fc62b7546839738fee537cc94401552d6551f3e1cbfdc000000b00f54d2d82116c09d3ea25dda637c44fd34b5cde67cd5eeca4b2f124911ee6184a93ad3366faf72e411a4df6b1f848b72123c67642e885c13fc9996d119f75d75171afb6557c4721e835754157c30e25c661116d0141603287ad87c1f9f0c55896125a581b3ae0e71676b394081175224072ab1e78f730a6729d57c04b2a32b2a4387304c3ccd7b0ba846d3e8ee433ed51aeed60d8cdc15f735537bfb3912de8ae3973c97b7f031708736e82df33d48dd000000b00fb5aa5eb7d672514b0e9eca6b6be8d19cdb67b0cf0c2da1503cd72c700f6a3bdfbe52b6c4626d7873d587c75ac2c8d1fdc91c7f916f5a0145de934b19b6e7feb039395610e218f1af38a90301a5faf26321360e77f139e3e2f46573ba434b3b69dee3ccaeb2e9240f568f84589e1d170f74ad8963222b37487413fb88aab6bb1fb92ecafafb9b40ad9a598c736439bc304c8a5ee9da48400b36c90af84ea58a81e0098fbde8489a8ce77b83cbfb6a4000000b930000014f000000a101d41f81540418a07d26bab42fab221676e6dab26ebde2d074c74ad756c3634eda54c36400000079b29a0e51621014cd6d791d2a7d63e8000c0deb062368f26dc3ab9ce505296f00401ef276c9322b29f111494e09b71217449a15ed4857b994bca860f057e552ffe059bf713206bbc40de2ad8eb36683d1498c33128173c60c848cfb49a3edd06f363d742e1201192db60679e2ed345166a512b3c3e535a2820e000000a629e7788dde656150a39ea7a84700de75131804f72c6440fb3beaaaf711e73b32105420670000007e6b7c8399fed5bbbec5a7a263b5b3fba15a5ae095231fa637a83aa60a648ecd29e7f8cd83dbf786f41038a43f765117004469d8608225138168e3bc3da74b63ebcfc215db1d1adc06c7badbf820be9eb611a4c4c3601bf79a1b5867d69b54354c9c7cafcf599fe360f39c01a60d48a1563f2f9699f0e022051bda92002b850000019d0000009c100be3d6ec553578c888ebd2578478f789ec6c149cb5c5e75a873edafc2924ca08ef15c800000074970aeecce31649820ba93beef6e88bfe827f8c4536e80952bc21dac648683276c762a69f86777b7398a6817b8cfa33985c009cc7515700b9e006eb7a34f42c75861c48fe8f47798e2ed0390cb02186dda319680ca2b68cc277357f6af883f772ee155a953434bde46f6f8c0fa9b4d86c321808ad000000f92bf9fddfa0f5e8f4799cfbe2a699f45201acb8f40d17e2a2fbf32d265decdd488330d31b000000d14e98941cf8810228bda9aa45e079951e45e5cd5d51f2fee91427532eab1ad2c40e69d0d4651fb865dfa1c8e6916421ce1565254e40a45c4658904f62fd14ef9f2dac3463ad9da40fe2a0ec859cffbe994072ffc31de8690306c95c88be783bc4d4d89db97dd07744c3aab98dca377ab545dd0a92415e6784888347c33c607286594282ec2d9ce768fcbac3652366353ad794138cbb94531b1b0835dde07d2354d9dca554cfe14f4b7b6b8ca10584da2b3cfe96abf038624a87319f0fc4fc84df00c60b9341757b36b1697423d930f4a4350000007d00000047176b0e75b4fe03f9d3298870d15151a117c6ef40a080bfad458b174e86e386aa1d1cc0b50000001f193ec88026806a6c6bd6fa13c662745955cec91f0ed3b83dc43573f0eef5a60000002e0719b02a69381373ed935433c25ca344fbf9902bd118d054bac61b8913d583939beaa55e00000006d86cf88889c40000016b0000003b2469bee281be56d64b8794a435fe23fe812f76e72ed5a33b9ae5ccaedddd94245ec6369e00000013a0d8db6d28e48c29da788011669f781c8ac6cc000001280a588f66bc42707be85c62e260e8d25b9f699298017ef5c324c59a58444ddd6cd8f4166800000100afd8bb0682620f3c5144e54a2a82c3b4403f296346b5b19317b3c1390ca9893e596310ad425c1821d797182f5dd7c041d72b3d4833d20e70ab0c3458dc527a20ba1fbbc50be6cdd9da63534288217b12dcddc1ea0cb80f59511e5b8db0cda0db0a66257983e055efcd494981621ab659e5f1065b3766356891b3c8ce6fd4efbd32010b4f4456d03ff1862daaf2813d16b809dc8bddca1c5ce0fd7d8d21f7b83c98125a648bca59bee08344915d31771ca3da65812ccbf91c9c1068d38d7e47f208dd0347ca7998ad710318c246374cd304d1394c9e15a66a6062f6e26c85f115bdbdb810459adfa187b1c290db7aff69995c5f37318ec5ee00f85ec200824e700000010d0000005716443e901f8e6fe25a2df1438005f19e9c9a7a5c2a3776d16df3d094f54bc47ff05ee0ef0000002f5849da382de262ecb6da688f2c40d1976d6531f2285c9033b98deef914e490db359a5ca483f1cc31e33030353043f1000000ae21f57bca27559ff7dd0501b965c6ee157ece1031c3052e3c72d24aeda2fa37618de2dea300000086996167e097d18f77a92159a83e4c2194b4417e4de9bd7e713267120cf4b21ab626e39f06b690216f8c7c60f63080d9120a659a15204e21611526363c75beb87bb87599e71562454c5475b39c56f7ba2cb1dcf074a0895a8078cdda2cea7175870920fe018a6a082abb8bfd9709492ce5edc16edd7bd1805cb0488cdd721aef00137c51c8e66b00000120000000c21eba6a0da4282a9703271618ba97dc13603413af445d779fbee4e0432a1a9c60e75a966b0000009a32caf4bbb0b38d1736a6f752b40ddc4259ed0f760be0cd74dcb5daa58208c036434212cca39f4598a98a89638b7d031b0dbdf81e4f4c2b82cdf7e2f3f782bab2c70bdbde02a8cfdfd11945aea71a6375ff76d43662b4e05b2b22e6ec2c77e14f556941451bc632c61a211abbee874d2aade3827de2be720bcc620822c9b5b109f0c0d72477437c00fc2943368b04e0242a6578ad925dcc62ccc20000005608aafe2d58dd61379655d20e76e2d8698d4d43baa749430d522b34b17fbacddb46e8084d0000002e8392dd29f3a84286d4fbf3248a3a77e9d566d150b78b061825ffcd287a2c0bb97e1aec6a906960c94a6db9c687e80000010a000000ca21a1d43a5a7c620689a7a79a29bd42da9aeb387d366d8fd57239ee2cd9c89abe8b01a735000000a2aeb2b723cf7576614469b75bfc0903ccfa11bbe41045dc2bdefd74fd5b51debfc6043eabd22f83c7f9584a6d35d36571143cfdfd26843339262f8a400c3232033561b62aa626a2d7215788b3057a0f29a5f367dfba8b1c4ecca37e86673dc11fb7866ba32fe45ed39e939e8eee4016b0638f0215123c6eac593b75853bb6122a7916ad5f47733f8edc61655ef9a25a75d3844e090ecb915cb36f9d62d72359762f810000003806b165a0b127c6f8b434c77bd6b15cda91cd6170dd9cc1fee0c973eb7e9deac67d6a314f000000100f2143b40c67efafb2a41d51a4ca741b000000a00000005a1536d7d7193eb6e277b2647861d4068b53366c51eac94a7d631626deb430f1d3890c981b000000325cdc9981fdbf7422f4d2e256f7ef2596f583640018e041bf791384fe78a548bad93c685c080c496b4c28fa3c33556130e4920000003e0844b0cf22121433fb9ecf35836d2b2353c22c945d46d7d261a6cd8e294bf58f3cd7f8420000001636b703f39ca3faf8e0edfffcdc34482572a99c9a2243000000d70000009f025a85460d9f9df3cf28e4c50d88692764c6f74f60f8dfc6e4bef0368ddb5fea68debe7b00000077438bec053fd83dfc1fb300b21a9d7525ba2eb268f295fc792efbd8eb17a2fa3bfbfc660db41f8ec7ba562b3a755d8cd67e34c1a0d31c1cce70c44918afbbfc50569ed0acf39cb5a2d268f457fd2e62d7471c1cf528846dc6dca9ebc79affb3734b0a5a560ee770c5242e23e1ab5ff72fc5724316f3043400000030148efde36475704377b3ed36bd595c3f75012ca416a335945cbceb85f2ab1125ee214be900000008bafa6aa5128d1449000000d20000006c1db43c9e7c986fac5ae67f5f2c39a2eacf8e9bf92a8c88ad90e73e09203a677fd18f9574000000440cdc1b0d719b121700ac99834237e352f03673347ff0e25680298641bc037094f69f2d36e8f60e0df665751058186805496930c6fb07376a4c8abaedc20f234e7b3b00e60000005e292e7c0bd6cb292c633a1ef8367914489ebe3c6b18b8b51479d70c83e722cdf491a0c71c00000036af3d6129c38d13b4a0303f8aa15dbc4f30d3914e96ed2386c05b83de8943986d4e37023363b532266588957aca358e055e42391f6802000001130000002e11b756a820a955dad694f204059d0bd7de22736d940fa8e551378bdcf7c47429113dcc5700000006bac2d788af33000000dd16b4768ff839103bb7183bfa4c49eaaef7e0592adf0196ea30e0325aa6976db7bde23767000000b5129f2c0d8b32eda1522ac5bb973e68072d8ec6dbb327c5089a8b8dccf1ac49c5eb06f7010349dc44ef683621526a55b61f8d281c09bd4c1bb2d7fd3de1651a180c609ad743a90e8c313fde9a35aac3108cbcde5b0aa95ce04aff124650f016b3b950b7240df604862c9b1193ea83d5b43409206c4a719c1d564607ac2a65f6bfe0ec9aaa856f955c4e01d447576bd6b5e5d691b7482fde0bb6fc9faa1bd541dd85f96b06f79afab7838f6b9efd960c9cc3e2338172003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b00ef2d0f9440238fdb29b03c44835465464c2f2c6e8e619fb0d414279d2b040a93c2a6dddf13415fe196a9c868812f8fbefd1f4322600b079e91c329778c2e2350516d5bf0b5ae9e3312e4a3b84ac2248985f3efa1034ea54e8b1d76383c2f577f9ed9844a76431ab1c3da5c29a07339f02152697bcf23c7256c93ec8f9a968248b578bf22007a38a0fc3c542d39c3a0d03674328a2df2c56cde5d7e0cf7f6822837d53216b74047da5f03be3d12c8cda000000b003e10b5d3c433f18c60ca21aa8376b5f4346e7f5fedcca56b1a5325a034ff9ad56b3f4a232e05e3e5956b34713b60134a35047ffcb1cc09628d10299966bc36ada18454c759d406bd968d335ec0566cca41301a6bb8544eb1c7e055d2ac53c153f9faf509cb3d4a7e70bd8f90d0e9fdf1142ca5b08c1b56e59a2e3f218c7c7a7367b5e09301ae00996e27fdd2747c20a129f3a6fbfa19799436aa23347b673d8d2b257b1e7cd97d08050cf2e31d27dda000000b0295c7e3c9307c324bcc48e13af4768543f6ec39983a2356df97a877b64007c414a026c9f0d15683ec17a0226e54dd86fb169722763a44a7e07b72d7c2762543af5740457fcb2ac70e604cd9d7e493436bb281a4b4f34a4f3fab282bec96861c0bc993f6da279f97e5ab65bde9b06767713845f64485cb54d488c343cb46e3709a4e415451507d6e37671f7df84b3fc6f22fe03447514cc8258a388920ff35a88abada6ced50d80b102603cace6a161e70000021c000000b0241de54a8e1186922a3b38c694f90805b76c9483ebf3854aa653c18cc2d6f42426148bc1e7fe8cf96fb8c5f3268ce8549f125e26762312a923916c03d6993092ab6a1b150c3244d8bf48a1c10f62a5e5dd0efcfcefe68a2495a20760e9441e53aa081555a748fe044cbaa5092ca85b4700ed5ca5421ea9bd4044bd3d76dd2a4fabe6f3c2df5081d7f2e3ea867ed640f9173e696253be0a246e98dfe8119e753e8d644c5f95dfaccdf28d569b242dfc5c000000b01567898da3dded07786767d39a8502796ca7d2e2f2cd87609734398b3bebe70efb61f41933639976a1abded73490ec634e1455807b4b7d87e3e1b623107d9cfb5fb28ebe63748fb190a82432d2f2fa95edb93e4bc0b3e283a66449b09a0d13a2fd4367eb21a0627de2de8a57ebe922012c606ae2cbc2d7b54458b7a17f5c0ab7f7ec83fb61a09c01f826bb17d31afb991db05b3e18b7df3904ecc3fd04151c56e79a56892b3cbfd5847f8258caeb96b6000000b02b23374d054b6680a36f6539352c11a623e88d9d9057183cc8250bf1475ebf9daec84a5244d5c781ad66c8e903904b6842378505ea86356a23a5b6acd87c790d781cf4e540fd60a48a7027fff29442fd78d8550783190d098ec4faa9a7fed19d4273fd2a4544f80078d1ff050f0521530af306f6f49353df84670e7016dc63db2733afafe8e44dffa941774167c79f1a2fee566e0badf791aa7c8047fd610f2d75f722e8cd8dc88e59fdc172d174c5040000021c000000b014e76d0158429b9cec55d998c73e6955ba32488507069bed36e295697d7ebe4a1abc409b7b3a4c67720699aac7eb0a5b5505fc442351ac9848612ae233151a6e284cb78104aabe45b3e2212fa4736a56d3ea25de55c525958bf2bae3bba8e00f9b5b0d48dec49ffe3ee5ce38facb8a832e1a6facab28c7e485972ed637f791caeb5b5ab38d8d50845a347c5e0599972313a46a9de9bff91512fcd4e370c69053e1ac5d604ea2ef243259595265093837000000b007d467cafc193876bd0485578877990b9e9540a5747ad7205eef2dc31faa1f177bbe166600bd30a4ce51133f48d1af4013a808067caf5eaf130a51c746613b3104216a04364e839206dd591fd09b4cabcc6c0e185ed3fd73cff30fa7a7ef8f6d9dea39446c36543fc4079b41909a443a04dacec111a89efbf3592ed6c3d0ece09c4a9ec285f21b23c69ba852ce1e6de31b8f483ce92f51b0991eee55a75cc1a759f854fee76fa1ccbfe550f0c12d6dc5000000b00a220fe50bc06a68f3d322e4946fb42310a2f7b37d4155dda8d5a3f17970412d50c7c893363249b1ca61c4ff8396c9a6f96381b451d9783e74eff024d987dd4b3785bf415a4e3cdcef37f01b3639edcbed2fd9de9f6388a692e4f0e4308d1c8740189db215ac598fc4e1fa13766c6dc62cb4e169875b27fbb343e128ffb534b15ff3c6f84c9aa2d8be1e5cfc1d78300605d34464d9e14e7174327c2d627d5dc191dfb91de04e975b0cbff3dff0531a050000021c000000b02e0ac08226ca70ac37a55bc3918b8dadf6254f130b02fe44b32ac6d837863f7be968af747ff2eee0285ad971f39f5ab7e2095c35fd6f4ce503feb1c6e23642e7b06a97c4e507ce5118da99c9018ba113358d5a608266d2a32052054ef4b2674e04348a931bc857fe2c3ce569a8368ba625feeac1bae7d782c99d46c4120cb92b34e18142b216844066b1594030d8e0db1e8dfe15d57d606c1b629a7b7ca350689304aa643fde1c9aed5833d9cb16117f000000b006b2e0d1515bec8f345aea5d328c64b1123f95ef7092201ec64649a220455fefb2a84eb72a5bc6dfbaa2333f02544ced34d2b88bf3fa2606edcc888dd920e630545efee5d8f3d8cf960e815131b10b241fef4d663817fcf5b9044c11d4aaeeee6490701e60b7c016a297ca08979521e7258f1c38b370ed97832f8d74624c801f0e341593d405b7fd58ad127d916e064e0dd53d10e6a976e638c20dd89913a0082bb637e57e783616d88ef155ac28e2fd000000b00a39bb36b767515ee9a4805f16539a2771e88bbd3b8cf3c88b7f05119ce1e6fb1ddd462e3a7b15e0444c0d276808623df0492d92f2cca67c1ed010b835850a0005503093a12f87702cba42982492b03ef137412bec4425d366bfb9de08018e423e7f9105245ddd597928cf1a26186a5d233450ac549985ce2d8a95e6cd1f061eebaeb20ef7d4628d7cf2d39e9dfcd8d52432e9e617f6c89c375718c7d923c5e5f1edc37d4dbba8a502fb4526b6dac57e0000021c000000b0100c32fc7414d12019982ac303d49ac4cc232293f0d3dde1f419365a1de302123080afdfeaf02641264efd67d90c6b20683533e677e7617bbdd5f920e4d0e9bf8441181118e454f9f8f216ecc5d604ec65a72ead62f8c451de084b11a37c026c706bcbaa25e38336883557840fc85e132f2fa9486140508281961e436fec56086d763ab8e7a3f8dc1c927e637ef833ad2f8f28256ff2bcf0fdf4553312efe57043923137fa4615e55522c4705517e3dc000000b02b45d52f047568c2410439277e2fdfaaad49799b3bb7e033018219bd701eb56e529ca7d0174ac2eb1f011b68221c810a55ece4af5399574bcc0833b2f49b1a96a582b222ca9e5e11f4e0a4e3ca04311a6ab205aaae10a726888239f096833ec62395f88ed930725ff13d61e0d2ee31b72fe278df12d4fa5e50dd40bd176e4e8480d9712fa69c0c55e0586623f6a9717623ab72244046be06319bfa6419ebd8fb22f88545ddb620f0d5dbebfd9d8ee01a000000b00ce37b4f29f5bca3264f1b69e91d208f6c996082021f3d1729cbe9411760d4e5481b190d2812402f73d37b49d2a5d231d54500e591d6c461276a189e7d67838cfffc4de7ee3486d319a2cd5743f5a8550c74e25c60a4625a015487672bccd6e6aac3def28574765f31700d09ced0f79326e39630abce8b2510e7b392da97fbb1fcd5cd7e2e205b31eda1f67194139e042e72f4f674636df39037c5ee9ecb9d096fb13ed1d130b218541ab840bdd7313b0000021c000000b00ea6987ebde70d94796b6e74a8487cd7bfbe6091c1087b8d6ac29a3ac82346081e2ad86e7570b87a9041cdfc915f3729aa734ecbdeb9716d8837c524b00c4ccd70570e9d33a72d0e99171f59518a222c17b2d3ebf282db71c0d6605ef14228f2200c4c0f622be0e374bdcdcddeab5b2823e65be6b5d62886cd46835d9a13c95470765ae423237e799ee9df23543f0663281468af9aa5bfd7f875e5cbc5c23dcd72090fa80b704e5f06c4d4e4c046a11e000000b02fd54ca4e403eb6fdf22b2a1f796403808ccd57a1802cdb0f5af14e8cc84df49753df94fb4fe59ff3d71780b33a2c836b86d9c0dcf2e734f405314d370ccec8cafdf0b8f75f165605303142ff5bf33ac13a58391501c9905edb1de6f6708304ade8bf9bbf310ce65e63d061908855c412823b8a4c5effd15d9d2886d92dd37eea6a7e7ecce6dc33dd913ce5fd5f1b56e0455b7913a99e520ffc4c3e9b1afadbe3c2f7916e5e76a49de95f0004a725e39000000b0068e51471b492373f12414c97fc8804faf40f76edfea98b74d9855f3e0a864401edd74ced80df6e5ba43a69ce7895fc25e7a42b4cf3d868b3113bf4d32c6763c267df5a6084c195480de826f88e645178112238709fa0eb89320c998f231fe4c4e01e8ff11bb3e92ec09282dab60d39a25b99f972ff825ea05f6961efa3f1a1533ab507ae563241220ab161542621abc0c6157013c2288a910182e5cde3653b3a8a81117745f4c272bef907985db151c0000021c000000b0147a41012c49bc6afa17fc2b2408d8cd38432918e690e8818b7c42277c5f674834bbaefa6bede24c4c262eda9ba20367a8e28e429c855c8aa27ad69a16e836f7b4d59baaa862ce219cc86eb7d9b6440082dbc2df46e0e6e2891fad7b7e5827da28ad497cff4d8bbd62b0d41a273d55040c6b5fc81d30caef79a97c737b3b8c021965373d9e5d0150337e5886c209fac82150357eeaf0543d68a1a6b54e78bfec4316a44ae87421dbe32188e03bca3d23000000b003414d7b752f46cdb0a4fbcaf86d140ec0dc4ce0a192b8ed4eb0b5828af7b1d41a4a15184693bbf654d362271fdb4ae0ecb76040fbc807af94fd8a8c09e733441bbaef07108ae3127a130bc252c6f7c62e9f9a76536d1e75de6331b19c8896d36d24af8bdb1781805252bbd2dd505ef817774b0dc3c56a0d00bfaab4596833c437c6388cc7f167ed811a137620d4812a1f463fc5813efbf18ff64b8b83d2259176d61bb7074a771932a037afb6c9498a000000b027e035cb855956b82c80e66db3eec16a5cf614a9edeecd69ae230341578317beeb0d01589ac5ca64adae46e27b4382f6fa1bdb37324e5981d783821f907b4ef046c04aa39d4a8692e7db7cc6858cd4f7997156608e9d1b43a439904ca9afbea5739f3f78251e0f0b1c07e09cabdf10ab08e764885489b0268b4e735f51ef35bbb80f26f325bd1003e54a2ab357845138287036345ee577ad0b2551f914ee2746df20c7a3a4a888e1ad3b3e0577ffd8230000021c000000b0064336058115ec0045a23d8f3b760a82ae84984681db6c3127b24122b9cf3a78bf1ddeb0ccfba4b5ff1758dd541e7aa3d9a25fc21022f6f6705e6dbe1be1a7d4626955b4a2e3d6a6e4946661d61d2e58aabf7ede092c108bb0c42e69c6064c2a139940eccaf53cb75e1cb3f1dae284b009b4ea58ae815a41839f829a0b2ce61b1afa7a64fb54d4062b4015722c7cfca3264f71c5cb15a138a0178d8192dc5659da158c233ae2bf0386cd31e37c5edaf0000000b025b986bd54a5ff4621cb987f9cccbbef7265f2bb403cf0752304f3a2769514e88bdfcb255b7e861c5be40c71535810813bcc039b95ec0f3b386335e77fa5607845242ce85469ce13da1a796479befb6f7542236754cf3b99223ed7382d36eb72fdcafd659c452cf89f1180912b419f1621794b3060d1bddb0b96c7aedad06cd52129bf7a1d47b92966fe411daed2a41a0bedcfa89d5c71788aac2741c868649edaaacf58b1995c63e220a4267fb09310000000b0069cbb5b6e1c57c914ad794ee8b683b2b2142fbc23a317bb554be6452e2380102fadce163b00e69f0bf67d515cf8023b01d58993edb4017c4bc959c359397925a17ebd1d4620d21956c2074bbc90bc967e3c740d5224eba3bfe1783fc9a6509ae4805d0118d0b9a0a014f99b39b38ed62338b97607e847b753157790cea75934d2b8f6dd312ccc56707b42b934340db203306115f1e19b3e3f4095b71e51f93eb75f6b6a83f32b477a710e654eece73a00001081000001bb000000f420f0904debf6c693d8be34212810af04d384685f89bb022ebd833489cf78a966f9405226000000cc7b9fd342934e518b433a019a6a86477914ef582bb38fd41496520e7ab5cdc37767c6b03d51b2c9f05c8e4d5779c052c55566630e2c83de8d656b2fd80e12db75428e310941f62d093a0a8a67d0a85a7c6427eefb3dea7908f0c1c578e35b453ba69f418f02bd2e9beb45c9416fa8586394534cdee9e6fca3fa0e25f21a608e693240762d57525b0f9ae1931321f431e16d4a8f5ee0d1966a4a7970d572a503a43392068b3aa74b781c899785bae11e482b3da0fcaf79e99c98ad22dae194ff74a6c1ebfd3ba9247cabda8ea8000000bf2963b979709fa2d25f2897fa628408ee3039a50df4779182d0475875b4861bcc7117cb01000000979d5f34ff932a5dc115bde002291fa4a25684cd8925ca677ed9b3e48bbb05062e97f4996d444ca7383257b7268ca2928bd896d0bd0c15cf6e5ce54b2179f70a66d8b3e26ded21062011873642dac8eabb8ceab7a8e0c63b4e40a0cac78050f18eba5da5fcbe29d526b18332e9d74d0fa53ab58ecf059173ab81146350f0e5bffc7e53ff1431e1e0b36e2296497910d1666c7b7c30c8b37100000151000000a80515550d9583e576a544baa7f7dff0b6b9746bb86f61a8dafc9b1f6ade4df128bc3ab855000000805b90e19a207f196cd6387f7a10ca2816fa7f21e1d1fccd945cb1fa99f937103170502ccb95d40d4699fd89ebfda6d40c40766884cbee757a79fc248de59fce9fa2fe8f8078fcc86168daa1333f77eb6530ab13973c3823ddf52d2d5bb4dfee7ec6d4b75963b6630068aeb7999193b4995a40b6b73bf4afe83aa66a8418a64bda000000a12a889e19b0dc2a33da1d1d5c3289848fb3b6ed1899bc083eeff9540eb98742d27b0440ae0000007979f6421143f25ed247200dae1abef204ed4582ab27d7b9e866bf848329e4aad74ccec7a3d63bd9661550dab5a08ff0d901cf1f8a84ebfbf923d92343c8389a9c93cece8246538506f91932a4382c9cd8ee0dfa5a40104db7729ade19489f38d6424d5f9c6456a215d9bfbbaf453b53ea7e2fbc1742949074950000016e000000ad16830daec4eb0cfa9f9efce6a898cb1136654737d84a6e022b1d1e46fa921f69964da5190000008524110e8dc2222947b1011bf1999797e2d76930db24e75717d26175e1525b62ad9926c0cc72ce9e906fde7be31de1a8a9d664ea436158d8656f23e6125484db4c7227e6f8ce3ff308031fc59fb1afe5ad9157da33ef5999831b51f774672fd9b905a50351575467948184657bb40c64161601aa0147d37c28329cb31933749cead79041d8ad000000b91277ec7f1663233fcf8cc1957bd6a0637c64f4f48ffaf3c1e1dba2808b82176b4693894f00000091877d42c919bcdd8779e8713bce81059a27b62329bf85e53df2a2bbf331b5903790ef4969757da04bdc6935dd12c09618666f051c9f2fc9b5607ac6872c7330a9e398ff5eba483187fe45e5ac22c361ec78561098a1c56b9c96ddab2241eb64f37445f06c27c262de082a233fc9911149339acf38fefa7fc92b4a07c1be8f1d035507f33cdb77bc50145b429f8106067ec800000191000000d62a6117194b1aa1b89dd68a6107cd0474ec7141940d76a690d8b716fb5ee4ba186f4d8b3b000000aee3d1a0caee658a70bbcd40d3ac34953bd61e76325924f35f583e410fd88bbf91ba7af34d8c098d6dc15dfad5c5d4cde6209802900a87b1ba60ee1770f3d5b726c7e26d7ac51f34f7a5f3c66a659a34089a968e9e38394a8a90c76c593ef854f466245475e6c5968e0bf2dada256507f752d4a3a55052df6467edab3252448072078cb06ef16d1cb12a1a009ee59d590cbb9370306d0d07eecdebc9c092e6632f432c6cf1768188db2ccc471fd7b6000000b32d1b8c9588b2b908297eda65ab25ded442895fbc6eeb6f4c93a01b5fa2c66af5d14459840000008b02068fbe7c3e4ef89bdaf2a2db640fd9007a3f3043b68b5d36054fd4f52373ad689c646e7083e81a3a0abe46408594d6b892e30aee1ca0558c8cd30c74e94f7183d7f2872244a4b027a339286c5b1b5c1d3a31b60a019a63e2888df0a0c6223113ad2fb86ad147e0f47ef913740f39595cf873ad35464447d1ba418c8666ad9fc9852b7671a8c11b62ff1c000001fb000001002ef1a4d6f050c9a406b24381231a19b42635629690da07a28bd1e3b25514cb1ab4f1e5f3000000d85ab83f18fedfe1c6dfc28539f32680e7777bd8d8736c9c753c8ec2d2f5374d60f99fdd6a85645b5cab895395f8b94a3fdcbe77bb80aa184dc3c36db475500ec0ee23b422d59803d7f7f3a7c142bb5f2560422ad1fcc4ed1356fe4d56523601d00777d73e53bdfcd816f6d8632f2e8b9bd78541a1e14de9927462b5a655e31408596fa654c51e9911a3690d8710a91cc2c5bf7387d1ba3f1f0522bbc36214a80377c35d582f61d65b5cd85fff5b2a558ac43b70cf3ef4ebc541bdc59ea06eedae1cff38b2ded3d54c1d724469f18afe3c7fd95ff4499fa8a3000000f3196b9470a2941f8fc7d3ed04f9ed236a52d167d63dd7e2eb63d0d3a3ea7e686492bc2756000000cb4c4b95221efb669889ceb8dd1e25ab356bc54560998dd52887f7557d80cd09b29d6cbe52c5aae362d60e5884cbeab2f81655f963bffe8e1824d2f7bd433ab8f71402291e7964d169b95bd1c11e24123144128546c7608f6ec59dac4195538d31b7944ae17e417b5adfd74e40c6ed9316579f80c203f5f4cc6311d7f8477bbf35650e72ce8d2a95531a4488a38f1334c05f73ad88c98a5bc38e6794129e15a772f09696ee1eba4f7a1d6b93190f9c1fc24fad80fbebb533f6e10aac4e30176eae97be6e4185fc6a605b105300000132000000c527f0c0d962a92ab27874c12efac308dcddb0c6e5fad98a3bf4d01383ff4841109a9dea590000009d93eabc25c543a9bfffad4a2a8f70553ab698b17bff18352a53531cc03b97b119b624473c1743866ac2c02cb02fb67a4472416d642bc43e7c0dcb6adc53264da96fc0e1fbf2127d8034f91030dde3b0089051cccfe1bb2b2a3f066df7e96fd922ea554c7b03d37d2751d176c2543e738946f4feaf57599e58308823eee1a3522849a2d042c71dc24ae558a4526b621414a13bf5bd896c3a4132b4694e9d0000006510a05ad5bf95d41565c9c887ea6822a9488719d0a093dfe2e93ad945136b22075a75c1f10000003d9e470145c9d4f51283f288a2ce564deca5a8469bc4ca9ded364bb6fe2c72e3cc0d481f3a582b274015ccbff382c25e164221f7d39730137ed94181d10a00000190000000d6137cee8a93aa913b174b34c553c98e5dabb364c8463f5155540adbc142156b43145e201a000000ae322577ca6decd06295ae68049210f50b3b6074fe250ca9a064f12e1489add761d136c29f2b1811238a4fa208e99aa43e76322a75dd6478ddf008f17406b29fc46ad04beb85696ed587e758a16e055aaa80be0d4e6ebf67ead262ae0f2d0a9c51a8a8347b8e8fb53e6edf35c8684e843a1ba22be92eb2a9291a928ec028628a135f896a5a89dda741ecfa5936d40699d08194b5768f4cf50c81cf8340388ec8a3b1ac4fbea34da9ca9157f123ced5000000b20a6b38e4ef16dc05a518e4de092a7bbae143df842bfea1ae5197f50fbc05f71f0fc796f20000008a52de96b5d2d87fee6ce577dfd36f1a0de73f1f74056bf20c33393bcb743da24b7f6e6cff5e802f7d30129f4e654e6ec99808e519b1a92279588964e891a80a4964ee046448fb55077ffd00a9435aa9b363c983e264f189bc8053195baee000908fdaff58734262fe3ea5a827ac8b108a8b8aecde828a8ff54ede1786336117a7a093920cbc08e514a46c00000133000000f508e29a03549c4cd1741ab9b39636bbe36e0e0da5234b7bfe0f0c82c44510d621506aad58000000cd7d2f1f35a485c5b761d9f24eec63b224052ce9e8af29421bc62d8a1e48ef9cb90a56986ba381e00a89fb5478f5600eb7a0478fcff869056b4aa0f20d5ff4aedf80c90ad49010d7e7958c3b03b8067b6bdde85c953f03011952d418383e66a6ca8e375161f3371c63f75a6f53750feeb9ef3cec41cd15c41cb1f36f119b29b58b76b1b3fe657b1ff9d4df0ff655c2cf5230d698aa22f21d5f16271ee7e89ad0fed55704b010ddbb93d883a34e4537bcc4cd29c98780a38c1860a34f9e856494b3135bd570c500ff511b4610ed63000000362e17bf8ee494720b8d0e3d646e83fdf21c2caf506805f67d14a164ea57134d89101fcda90000000efb2d92d82c2d018150adb83a54a20000016a0000006a1275c9fdfe45e8b0f84b69eb673dfb443a7becadcf84dbee3d669b759c5de0b8542c9edb000000427402ab3efbd7ee8387af9c3e0b9f9d2c7155a20256803999effbdfbee5829798047400a34c2aa288946d1df57f7e50acd17affb52264744aac0317d4ad11d0894ea6000000f810d211ede15e488536317862e5f2b545952d5fdc5b71dff001b023a396524cc5911282e3000000d031fed3319eba19d2a46e607b979f1e7a76d3f3c4da71be3e4bca43ca1d37700fcb5a3d50b4be9ac00763f6f431f77b7ddb3bc6cb214957793c033155dd28f8746f3162f002ab61b4d61faa380880d0b38457c3376a0b001423fac732a12b4fb43527a76a908bebe974befd19f4d9ce77ddcbd93cf61fe6c4f058cf96c5c84ceafd5f3300ef938be67655df15135f0cefc098d24651d2660938df405026d522a7235f2c6350415b17300d63892cd1a4597ef4ca5b6be01234f693550ce840b5022f761f51ea768c683629be9614d79c940000015e000000800c0b89c7ec6151f7d10320af2bfe9cf862a8e9523365b546d403b6a435f603ced1647d240000005836a5e8b0f310915e47c8508891a38a2788bab1bc0775e7fb01c19868246c8a24c0076c7beb6e6f8777a3761f9ed71a80de4f5ce0d518962ab5667fc06351ca9ff153bde28db1fb858f015a3356db7fa3010516ed25fd3244000000d60ea6373649cdd7654a2a332541f1de911f0e76543fe72f5ee270620c84b890a0c7486f8c000000aeef6b9f28efd1aa818eb9276006b3f6b4f2f52f3052b19b6aceb8a3c0b1f4491311cef9e08f2fa63fdf9c59f2390f74f243d2b15eb313d8465a7d51b9e2934e1bf8056e12f40dc5a6a15fae1f1222a8e4b5ec5c5bf4c234d254fd7ec112d53e83bd095f4f33cd1c2c81ffa239600c82c0f04e0f14edd8e3c78213a09c9d0c6989431431b040f3d7fb0b31016a802e2030f52913c12d99a28199b8ef0f2832488a896f84b6d660b49909070dd8573200000192000000690c360bd3a3347fba15814fffed92e32e6bc645701133b33c53534ec462af2d71c395975100000041be6c9dba855a6b5fd08959c64b387ec9263daa7f4e1367c580a12e1f158a8631989cde544f98ede966a74f8b04f8a934d65eadd988c3a7c7c20945daa74910bfeb0000012124b384a67820f19890562e66852049014ca35bf593ad62d6b7292e6abff61a79487916d5000000f927db4c1e019ee7da272b490f8d1a363fc9e8cb55f87f52ead5625f48f6fc0759fd72399f60fd241e66530e2a04fb7169df338f7814853580dd47d9510b8b3301d91719ecbe5d1faebc41ab7944e0e48b132d06cb17a82900ceb680511c2d9f020b9e785045df0b33e2f5a044cb60c3b75b22ffbb21dd0dc339035f54ffb6694784035e1a8d53eb6b358eb268ca2735f671086d5adf275bc4736956cf8661d13c38c3c57d48d92585fe0e9fd06d036528f94561f68a1b4842e8ed5f6c5fe05fd2e3a037ee45d6b84f76fc99410dfc910fa9ca726616f06433f858fccba3181f035035704fd24272f4a1e61180b1a7d9fb1c564a22c95c183b5000380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b00e2e979562ee4df0a5952f7824845e5703da0d3e3971ccfc4e95bed718360c87d6e7cc2c4e51905d44c59a47601868447eb80831f9bf42aaaf8a68f678e9588736facd7acc4f02c10a9742852b1c0aaea56bb2ed3f4a4781dd44c93aa2c4a6c2d3ee21d5e43c22c57b13162f3474f4350db625804f0b7f81146350d72bf8b99c2f76d83fd163662db47cf9ae5e72a5d2222b8dfa18efdbaf5c4e5c445aa3bc733c1408dcd3e077f5d83fe9faed51fbfe000000b02e5e7e39cf1fb4f357ff297f223183ca0bd5add5b8416884b4f03215d125f936a639ebf3f829d57989fa933cc36a2f139c00569080cd0adf8a70a187e92fa613bbbc169f64addaee5c475490a036cd37db25b17303fd5ba05242bac274240354c22cbdf40d08fd0ed17621fc967a84552badf2c0b81d0da71331ebabc2301bdcf691a9b82ef1c4ab8a6d4092670472f730061f6c1b0a245cee3b4a18a652af2c4a81f1efb775f2ec255e612fdb56b7c1000000b01b8452c2ef326d8907798c5a10cc8caae18ccf8d84b06d1feba2074577bac328621a08512282113c85904a1dd4e93db18f483221679db0eeb31a209446ed6311de9f89ef1b63c3dbc32722800f589a0f95bb79dca984de3e7c18618b935e91eecea40b27fe8c9f47425b5c9babcfce0207db9ba4fef3a55a2e64c6a803bebfe432b3e308e86d591ba02c1a2ccd07caa71723778479700920693a3d895ad429be8b75deb8cbad7f50a1478001b7cdc2120000021c000000b0016f303422eb96fd8b70d62e0b3bf42561628b8847894d74fda70aeaa9920c92010fbc6e96172b1cc05a564e8172df14b3505e30815e5986adf340a5d85a424dc044a15e6143f2e1bb1f2d75090109d78c26df1981a93740beb8155f36371f73629290940ef8aaf540a5a587a282e4f5141eef78605bac45cf469a72fee65e99ec4bd163d85e6553fee4aeae3536f78d1424e6c0b1e2aad44e1ec340644f32102f63bf2dd16fe9dab3b9b324a540ad8f000000b012697b006e43c49d2130365eb2008d8a282361bc4b6f0c20d72435f9bd047bae57f05f4225faaefc61555a349416de1f58196a8acc3c66ceed65e46fe027c0e16860a5510aa554ef329a00329a5fd009e5a8e6f56d2fa84e94f334143650fc41a40b82bdd45730d33c5f5bb8b9c6a20412390f03f2f8800c08ebcada7e26a8e53f1a7184f41bb17a35e0eab467f93e0708db1cf1e89047258b2038eaca982e57c92f281e93c4a19b48e71dda14d0873c000000b01f8e3d5216aac48ece03a3fe53a25ee7cfe6236ceff2dd8a4db5cf95c0938cda09ff31bd452515a0f5cc61e98a6df4d25b84d7c064a0385d86ce52b8258eb827da3a5486a5d2ef1f34802f14d0f3c33f9c99c90a6b125e826ed95473ebbac987097186188f718328c38efffe5a5e14971e50282929980e283b53a49cf7202f168083340dcdf776ce1930dcb51c26d09c1d5950eebeb5e270a203430a38d0a848464aee1ce5dccf212823c3bc1b8666940000021c000000b011508e36ce3e6923cd2d18e24bf170748ca1f76597accc827710247ce6272e0cdb66fb43f7c8c26a3caab93e437228b5ba0235e1e5c3329d33b2dc7d1ca7e09ec85017ea142269b84b49f36f5bccdeee6f3838366cf5161693678245ebe83a7739278dbd68e1ba34e9d8b8e1afb0efe80557a5c52f48c06662b0166609971b77acb6964c18db872e74535c4d1564229e183f7e481453702d9dd39e9eb5999dae28c6c30b6023c8bd0d8d6b0392bb2fd8000000b01f0c25a88cedfca861c3ad15d2d33a04c85a2733b1b6d7bb6ec6189e19d177ac008a7c4434d3d92b19330388b94166ded2c050236163c1788a41bed299a5879acdfeeab4317971a94d13a165313f15993457037d4ea15d9d0ad96596c2d862d41c4d65e9a440d5a9e8d0a158e8e60c6f2befaa08a300c998adf33e29e0a753aafed52d3583eb22be1e7ae2a55055238a1a822804872b0afc3808f4791ddff705118f2237dbb8e1c9d85869b5053357db000000b0154783e857ff19b78ceb255c82dbcc6fb0db944d847be068df55f1377af83ada80ed50aa285b52bef49d4ec67d976a58fbd2fda93bfd6cffad19351afd22caa9d80e38facfd14d9d4b31c8c099c8501ae6c71977184bb7f005c33e2f52dcc9c435e8935809414f447893637f1e77b9a61f0959ff45eb3a2bacaa8b30ef4885b6ced857da0060041cf7aba1be34ae269f2b02cccd65ae067835c5fba33f5c69194075f04167c152755527a12823a797270000021c000000b02ca8ce4a344f812d91532faaf46841b5859b83c8cdaea1e975a606b38ca5b06a226a0d76210cd4f823f5644dbe5b9813b1f871271c600663f7da157742d3f3da87e0d8dc234c1a705e3ccbf6345ddd2db00cbc0243c81185caf04ffc6aa1f425bc65b0845c2be79a696b5770fc12b1d31c1303ff0ec4ac685ee90c5841da213c5229b64035b6fe8a8ca318611b40296128d07c663e082e7e2b599e2cd0164f3b66cde7463c7232586ae1a6fd1151d23a000000b01ff3e197bb909260345b9dd98230892c8ad35e3d74030f1b8c518ebadaf209af6f6aa130f81ffd4c8c567a94e91c32ce492f2cfe5228ead55df732d5fbf73d9bd3bf467a918bb815dc05192dc71996a2572beda958205af62d109be2f0460bea2f43f37d6126452025559d8b1576cad7145412aff5be314f2aabcaeb4b92176a47149ba0baeff098f8c851492f45fe050c95285f9c7961fef2476934b0a07640087b192dc340106bc79470fb8b252718000000b01ee1b06eaeebeaf3f20228add227dabd4183da5a6ea3dfaca2378db739e6b63ee127093f36d3bb093500f3f187ea9f6dc59cca251586b7e2e2299e6f21f191358c39b4165e4722d6bd1aaaad2b5d923575bf4e397086a249932c7090a30dd21add1b5aa85df0df43cefca3f41d29fee018474321a3822b725851a2be448ed2485e68bf02b5acab6855ebfa4af880e51e23b00f71ab72c21c7a60be5594c3f64e71310c9ac888c00ebe97750a4fd0ffa50000021c000000b02c8b58bb220bb6ee09daa1b5980aa51db8ad107fd7ee681d90fbd2401fd5a7f3e3b226ac553d912274420385e5da7abfdda4e4684135607d8a3a029650f170e4e156805a04293b613ed30900fb8be3d4d63f9b4b0bde2bf407ee59a56a025b2ebed28219a0914f07c8142e44dc104e6819e30d53d42a763a51d605c84c87642cb182cc43ece0ccc4a8f0ca442118ff3a0ba13a7d67c78b349e35f5836eb6896a7ea42c2e1dbc65986b230e1bc9798345000000b00c4ca0bdad1560aa089ecd643271eb5b8132093e1a13553e946606b0b3f286c23720f13a763da6bf3b533e99c841d990d7e97887329ae9a2cbe3933adee9d28404b7d0ec2ba0789acabf9bfb7b7a568b608964a12a84b57e61f741e3db58e23971409491e2b8311e5f86f483fa262a371277eb5b8942c989d1e7d263f275f5c7fe8d2b89db911aa913785f4c07f7acd2284c5002525e1996664ed727c612599df1002ed0b23b08a676a451748c672a26000000b00bf3366fdd66d21f2f7d61b94c8a30eea4168f1ee31bf884154b6493672dba536ca809b96bf11923f29b6f6c22f31560497f1cb289a6546770e108ffdf1c73f4f3c5490b3460cf64584acfbc5b79ce4f551d5ca79dccae50d4cee98f79169679f18bd50cee209fd47f80e204d6efe016025e3e5a4160ca27ed6534cbe75554fb210d9d2e0402241a44c360b8512f43640a3abd23d89d8e8e0ef0e38f34e31165a21a6351fd3bbce5a74b4a14f21cd1440000021c000000b0194e0079a61eaa1b58bd9df7f65126a06ce31074113a4bfd6240f42d4572e1651e728f5787a98cc65e062cd20047882816c4569d265354dcc81eff19c67d9392ff7c7cc9fd4f0421d052836111be89c7aa2014d7342964c6ca3878ce617cdcb6a8e355d8967647e8651220ca4a2a635004283119051aab34a48d260e0c50b0474c913f2a0a42c2141c67164cec266b461d37b6927485a9e13f6a12b957224dba3ce1658aded606f8b31de6d82eb27af9000000b0299ca9951365ace2b51469fc2e3ae4dfaf0c49054c3dcbbcd497823ecaf115dcf0655f786da822430f02f69c00581fd891ca173e7c03a3910d13b4593f94faf1b534f05fcecdeb6472c8a666d6503feb2b09bd28f1c016743587094618ecc37c95d10f0d92aa07aa21c724e0265d33ea1f52bc8952c19227feec1058962d42c49ea874b8ed6f48e3667e9e93bc38ad5c1a8213d2b77b2761b44e492ca590638652845e3ab14b02903d167e6d13a035b1000000b004a8c976b90026bfdb9310e29d1d4224159424b622b95017cb5f5b4251747bf20a67215839ed7da682d3c62a7978eef8db8347edcb7b5d96fda3516cd0b4734c9ab810bbcc7ba503dc8e9b757fcf1bf08fd4993fda89f9665308d878ba21745428579177ae7b4e554fd544cae8d8a5390121426b410541669858571caef1af11591385ea5279e53071d150fdb34799721be5cb1bd9edf40efbc1069863f7e2ea8255257fd6a42df5792aafb1440992a90000021c000000b007bcdcab0c6e696cd56408744cee49921fd3c133b23d91b17df50b00c681fc9fe02aa41a0c7e788bf397a431630ec43b098474b330ab78c61af250d6d01b46e7cf96801cd3a6889d0d6904c25dad784a718e07de7c13694913d4c85dfa41050e722dd65a5b74d0320e2c3b27cbf4f55f085ec40d9b508b1d7130c1b5a303d09a78b4feb3f8bdff80da16b528fd504a2e22c18d36dd675c48c43c1932bac941fdcc188459f22943f7012b00088c47a80c000000b00c2dc95eaf981c61412d3c4ae9e308dad04ada8ae8b759f838d639aa32ff7733b535e57e1f43745d2b51b488200a648f6c5e59ff9344ff5cabdfb6887d8b00b457e93bb27f6375b5097def91f97bc414022d28539b683fc16eb40837d2cc160ba29157a0c7796e440eaee199f785c9992fc75ff16a78e5f6b6bd79f16793f111dbdf3d9e5f2b93875a0810811f8e51690028b6650597651a721fdf71cc62dd384fedd2d8f32af80c285686c751a1d374000000b02e578e44d7e5ad1664c19d04d7592209bcdb0c99107bf1d65fe152d0ecbb3f1632b159b94a7a10896ed685c84b29cfeca718f675a38f368bb6ee8932fbe44ecb40048b0f1762cc250c6ad73d0327db61ea8bcc28d01f64bd2d2b044ddc9539d62a42ed6fc16b8e8995acec11557d635b0bee9f167eec6fa81353df766c8d17c55e05779ac7acba1eb4bd2c443b147885086508d91cf073a5751e11824fb70b8462fc34286f72347570a665625e2fbebe0000021c000000b024498c62ac3a94391c714b4111d20e7c40688e7611a48fbb83ec4a948d49a19df176055da854278eba48c35755703edf95c29525b768aac8235a054564ca22e938cf4d97143a79fcc31017150ec012af462045f7d26433f27d0e76bc77221eabce03262a713b427850cbbed074b91e6e00ef2ab17bfa66eb9fdada420ffda6d4dbe5866081ae4d9bdad9e2105c7d0fe62ea2dc487e49c7af0c9bb51cdb849a35d942e95fc114c7695dc79955fa76da9d000000b004b6e37ffef1a269cf832361c358fc8395da0af2a942b417497d74d43600e8bd1d83b5e4001ae560516d9a9d29315324ebcb83eb0aeaf7a92f6c5b3390908e8480e6a76de3b540f1c877274c1c5bc9e3793285fd5f76de75f9bd04d467e6d7661637921062f9944a4c0b482ddf670ab81309cff28254e9a896d08918cd76dbc0e9b0b68e696c083fceab90290803e706227addfbedcba45dde6490b02cbe0bf55cf7f03268905cc51cf91a07d05c83d9000000b001162b9210f6eaed32d2bfdb7357dd687915a36e8ee1acd35be6bb886b9312e83bbc0cfad9f8296bb81d5edd7467ec52c70cad5edc98ce7b543aedbf4c222ca0c6f71ec8078760c0df9dad5e026af93cc9912af262d59c37e16fe47f2378afe45e570de71c8b2788b0a34b38bee11156189d60771ab6e5457017ce7cb09ab4251f5c9848e9e224b30a74963cb747dc690ad18651e62c3e7df847cc4d8f87ed535e46312193686e6efcc8873a146806f400000e5e00000134000000b20dcbb233ffe0876a7250517d39c615ec6ba0d91ce7b1d18357aa0a655637b1880082c0ef0000008a6f984962c6784265e282c2c08e6b8ce5f07a942524e7a5ad01fb8e7dcd51a18c4c9fdccbeb99e26e10ff4151c5e565d6903ffcfe45cc7ad1fc34ee19d9c570e715e9f6ae6d25f15968e8586f6b23e88ee7441b6bb4ddf1156960601fba993aa0bec0173e64ec92eded932e5ba4d69f30f5c53d0c51da901445d8be3efd3513c1ab91e3f6ef4790d82b0a0000007a11241bb448862008799b3ae66380922af4002146f3c33063ecaabc989fc3515839f243b700000052a2ce25e252fd55847470078f55f4d4310e61032073e2d83fdfe1fdfc00fe25168ff30a75c2989fe70384067dc992fd0603c43f262693648b5d2320bb278d2498e9bd08e4b3e5cd440df9a272551294698df30000016e0000006e168480ed11122a25bc66e7ee319d9de3ae81a388cbf96d59307b930f2c03f251667cdace000000469b1d3c5d4ba7a473efb446973f26d3a7d6065b27ab74e1f41b9e0d24e288cd85967dd0c1b013689374998a6619c637db73d32080885e0706de10fda9ce6b38f5b8395d5a62e1000000f82bd4a83c22d40e9b07d273c738d6a3b4a516b447ccdbae651e6a0ea28c826b0b2c9af2f3000000d0a5ade3c7deb0dee517870035d2879c0eb67956ceadfb100d495de061f4779db05b5ceaa2dfa289363bd0e4eb41498b55eaaac32471b12c9b3794537d4a8d66a4167fa6bf8f270cb3f37d7bc2b0c39e14ba09c9c7c003afa347b48c8c67aa12a31b388bfbcff4836b317d139e47dad28e89082c18510f0da56978e8fd59edb158e19e74de0946ed018750c20fa805d4fcc4a1a59212c083245661dd34961ed198101f5fea70dcd66200fc81312f1f8da97bbc9d483381eef695a400da6caab58f32a7cf01f15acb73325c12b27975c59a0000017d0000010429bc3e9d28f4649bb630828e7bc7b9f15766604b57e33440831a642d03646eafd6d71945000000dcd574c141613add252da0511b986eee73768c159f0541c7199cc092fcac7aa459066c60c88baccbaca76c976fd1cdcd5a624d3ec2aafe7c4c1b91d2f01e3b713adff73c6e57cc0ce678a5f683947bb479b5114028188f33e2074f489fc6ebe0db7b5225e6817bc2898d8d142838ddde7f302473bea15bc432c07ce8f12fc9c8aa53b5b7730b0b299fc60cc23fd2307247322494eb9e3377276d4600b36cff16cf9e51ebbdbed226f84ff1669a01c532a5157e517ed630145fcab7e148ca96f38399d390832696a75a54bb79ae019e863203686c243dd138103d1964290000007116b6c9fca3af0117bbe8d8fe1f31d2ac8eba5d41ef9617efbee793817331f3f00ea5d14b000000490ee26a0e7dc76b83195798f5b6500a805dda1b54c40ba1751756465d25a1b07ee9d753e2e1b482bbb11522d2fdc6b3efb4ae3853875f0b244006245bc47de2714ec44c5a742d627c6600000256000001291f27b17259ed72657e0b0dea13c2e21d5172a24ddc56058611649692160c4a614d91c6be000001012931a1a953eebc6d4d83732e96445b56715ff84bf73928a137d8527a03e893a24dea858dadf9a18c623ec10ecbb08a41c951759b372fe72a2717bf7ea04fe905a77c6f4861f0f0843e5db124e788edbbbbfc58971e8de027edf38f65fd66551eea8fc887237d14c9f5433adf2eea7bcecb75adbe57be4206707cba7302343059ec9352f8be1f05561230524dc046037395c3fa0c8ffa83a02b54b24981ca483dff16ebc405eba66e182fa0e53cf713df5114c5b0b9f4755f53b17cb66c1681ddadd04e9d08b9fa334f2408dab1a60129af4a3010050e0907d47640125fb827b887114a5931e272d18975b3d88189800a32931d17c9c291805ef182c1175625c2a9000001252094041fa6fa68395c21fb130799d19136b5007bd8b4f203cd405f7594a0d14689ba816b000000fdce29d39f797215bc165d9f8431d37b9a422289839e7459434909c775c239bfecde2e86dc15d87cd9efde18fe33e38738145b86e698dc4001daa2f8e64b76c003f1f6e742aeecdbee2df45a963c6b106f4a5c01bb717171b0484bd1fb1ba01b20453ae4eb47d8991468eeba47e6ce0b02f7cea6d15cec3f969114dcb2e4ed1ea87d3f6f9f8138ad87cfeadc6c6fa60233b18c776d3ade8f8c7dd0f6266407edb9dda0a9dfe463a166c9ac9558e307579463eb46c4431fc58b56ecb2ae92b453e89157225dee3e7eb356b309a822c3a31daa79250d7f6b66b62bf3df2e6daa22c40118bc94c8c68c71e80d1bfc4d66cccbb7c754085bf4d3566386dc88930000008d00000056109a45914bb59eac9b42a449a8c8ff894d1a38a3478a7dffab8e76c19207444af1b1260f0000002e90de6df9f83893bc5133e0e263f95d2563d5b8127d99df18d8fdbff1a463af3fd710201e668823a99761faf7620d0000002f2e4488194c68de239c913d5111f3bca8d8ffb2776955f33566564e9840a9af2a02312c9d00000007c264938ba472190000011b000000c609cf94ea9e2435fe01843747482888475bee9ac55873f9287fd53a9befc10b2a3f3437a30000009e871beb0ee9e7255be28102246b881302dae1d91ee425898ea95f3c9729ced4d567c12c651dd60294996c3dac0b14eed0df05a065de92308863d3d1c3ec340ab0bdaf74b856ea01efa2a728470cbe5e0b9d5407a74d92272be409be31f36cae41e3f81febf683fda2f9e18bc0bc2bdca5b833caaea991418c995124ccf39118da32e6c4b3d9f4251adb865debed159622dccbb0117abfc8dbb7e9b18037ef0000004d06f25b06a35e0f862a8c903b9263985578b4c3b3f62069a7f62c81a5bfe37f04320d6ca3000000259462651ad51e985b1de97df464a93ae8211ae884757df3ae2d48fec2a2c3ed57026d43fe66000000c20000007409cd14f79f69375010db93c68ab99d194181c8fc7ad5641d277cddc9ff09dfb8d8e2ac620000004c64b6e14c310b4a7d071f6334221eb0e8b4c9de9e20483507bf6151f26161bfe48cf46a1a792adc0b12df7c0adb195bdc8d75433981ed85bb407bf87fdd9d5f72c6c5eb7b7a39c2edb7bb8846000000462079fcbefc3177394402c45f927edc90edc25c0720a73bd3c144e3b3f23a2b4fb94d33360000001e2195c90680df47e2971270cc55f526dccf3777dc5615cfbf30ea4209fb20000001bf000000ca2a24b4d61f09983c41325e173b46f184f663f996c9d7146570679f73eeb2b7ec261850b4000000a2fcfc520d939a0defa79711638de3e4a7c6820ccdcb82abef534f5c4544d019a6a6a8d7380a6208a694aec473ad1d459383be30e54226aa7c66012795275a651ee41b4f68364581e29f8844bff6109662d4eb787cbee54e5a87eb871fbd902afff08f1510d5a3a7233d4363de41dec8ddb54fb20c2476c68f19d81ca6553e73f770507ff48a8745c462899ad225d21bedc4cc9c41bfe30102b60e11c0627fd20251e9000000ed118a07b18ba35a935eaff04a6e5bed46454b19003962cb0a169b31b0c54d362db6be3246000000c5b6c8a386c5bb248a8f059509bd9157cfe36791492c7bf98a00908eaa521e1916a4521e0950a930919b1c6e887d8919f35cf19c08042da585c06ff6b5127d7ded61a5ce8e3820099a11da215128da9787bbc1b1e69127941f9f4a318f1e401666c2eaccf3cb553f53512db9392e253b8fa14d8a7b9b78c92782146f04bdfe058accdae8bc64981a2cc74a56ac1171fa46bbd22dfc4a694fa5095420720aaf222d78ec812d87e42ee19df976e3cc4780429f7c8e5c5e59d34a8358cd30bf8e40923e0842e80a0000019b000000d40439cd0256d04886764dc768b1bf6447f971f812bcf21e5e362a1c4e6d4f05bfb94d30a6000000ac39883cee416facb6c046bded388dd6bb5a055a2a76911116d531dc768d622d590b2ae31184ae5825a025dde0c5213dbec49266f68960993a58cd636404cbfc6c2757d5c365d3c52e1c6b2763b16536e6c59bd5b4552aa8f4c03669c870d5ef8fe5b9945d2fef96d6fadf5ad8693ee414960328bbbf550f2909911d31767aa2970af825ed4c37d93f8f6f0ed4e021267e0716ea6e0af2b3df98697ab6080b783ed0d50f8123cf0df8ecfa5c8a000000bf0f830a69835bc37277505cc2215f9bdb7780bcdcd6df091afaa3d18aad44bf6351f014a3000000970b418c0e7b781501a1ca499d7098fc82a1d9cdc864f4dcd5442c7bc6953491fa4d76e450fa8e525ecbc1771c67b6542e352b07fb906367017ef16f179b79815bb91984470f41714b78f4fc8e084f4931e983806f0fd312d9e514e5f4094c5c2ac3fa94b52ed5a6a1d1a8346aee097f4050a24ec98cdeecbe9add2569f1cb936f13e58876f395dda4edec1fe901516c051169b5998ad9fc000001170000008219d855ce15ee0d21606cc7d2cae01a32d3061d630a35a91ec45679f032046d25d760fc570000005a79ad6022c3becdd9ae05255f85eb8aec771563b3d6b991752dc15b34a6f00dadbd7aa205d3dd42e720516d4794b89744f386935da076adbb48c7858d239bf2f0d50cdf647bbf2f6e8d2285cd89a62800c9a0f56c5acd07bff8e10000008d0d27263e699e16a61bde86bfa626890da36eda1077acd451b3d0f67f06f3b7b424297437000000655b4e091a57cd5d5cfac58aafac6865209c947baeb2a478c5862319844df4f780befbe4ccd52c54c5d300039f0b42f245d53407ef435ce4da69eeb8fa8012d103fa2cae9f645a36190a6567eff2dae5570c1c4a006cbd80e45fc49d4957008fa31a89febca0000000e20000003f284b42d719fb66df2a22409e39a8741c88845d8200ab7a1989d634f578552c7e3da15c3200000017db351203f434138ab67cd1dbbf9bc0cdba7fda6b61a0270000009b1e0822de7b6a9a12062bdc014f4fe07637d3f91c688cb1477796c78b5c04c1608caad6e70000007361d1c0d72e4065dd0ee97da04bef6e199536547444b551e46c102f7e1a4e7658630f11337476e44d157e4f87f27f311cd8c5e52d2d6d7c02fb12a56615c3ec84d62888afc5bc36021b2527fe6c07fadda86b6ced185dc9e632a32593e132ce1b8a3a1c4ad7b7788f2ce5735976d181afab7807", + "txsEffectsHash": "0x000fcb0544191ed6c36c914b33cfa45acb22685a99db99e55d928344a7fd4618", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289" + "txsEffectsHash": "0x000fcb0544191ed6c36c914b33cfa45acb22685a99db99e55d928344a7fd4618" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711947319, + "timestamp": 1711958666, "version": 1, - "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", - "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" + "coinbase": "0xd2792e76d3571d2770cce1593643b82c9568ea0a", + "feeRecipient": "0x25b77ee58939a553fa4b5c18a2198427213eff66bee6398068c01f0a3b7c77a8" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac" + "root": "0x26fe2d2266eedc92bda54184846983ba5ad0ff2cf003587cb425281be8eeec80" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac000000020000000000000000000000000000000000000000000000000000000000000002005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e828900212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e37d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", - "publicInputsHash": "0x006fa981e1daa5d49ddb2d414800a9ab0be0999b2e5497f21715e7060bd6b535" + "header": "0x26fe2d2266eedc92bda54184846983ba5ad0ff2cf003587cb425281be8eeec80000000020000000000000000000000000000000000000000000000000000000000000002000fcb0544191ed6c36c914b33cfa45acb22685a99db99e55d928344a7fd461800212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a6a8ad2792e76d3571d2770cce1593643b82c9568ea0a25b77ee58939a553fa4b5c18a2198427213eff66bee6398068c01f0a3b7c77a8", + "publicInputsHash": "0x0072acce7b05264dc5d02016a937eeebb0a729dedea2e7425ab79eea1dd10810" } } \ No newline at end of file diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 73a552f15b2..8186efdf393 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -131,7 +131,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600; +global DEPLOYER_CONTRACT_ADDRESS = 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737b; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 810d66452eb..0f74ba3c423 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -4,7 +4,7 @@ mod utils; use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, events::{generate_selector_impl, transform_events}, - functions::{transform_function, transform_unconstrained}, + functions::{export_fn_abi, transform_function, transform_unconstrained}, note_interface::generate_note_interface_impl, storage::{ assign_storage_slots, check_for_storage_definition, check_for_storage_implementation, @@ -143,6 +143,7 @@ fn transform_module(module: &mut SortedModule) -> Result insert_init_check, is_internal, )?; + export_fn_abi(&mut module.types, func)?; has_transformed_module = true; } else if storage_defined && func.def.is_unconstrained { transform_unconstrained(func); diff --git a/noir/noir-repo/aztec_macros/src/transforms/functions.rs b/noir/noir-repo/aztec_macros/src/transforms/functions.rs index 5c9ffc271c0..e5bac999369 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/functions.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/functions.rs @@ -131,7 +131,12 @@ pub fn export_fn_abi( .map(|param| { let param_name = match param.pattern.clone() { Pattern::Identifier(ident) => Ok(ident.0.contents), - _ => Err(AztecMacroError::AztecDepNotFound), + _ => Err(AztecMacroError::CouldNotExportFunctionAbi { + span: Some(param.span), + secondary_message: Some( + "Only identifier patterns are supported".to_owned(), + ), + }), }; format!( @@ -144,14 +149,14 @@ pub fn export_fn_abi( .join(",\n"), ); - if func.parameters().len() > 0 { + if !func.parameters().is_empty() { parameters_struct_source = Some(&struct_source); } let mut program = String::new(); let parameters = if let Some(parameters_struct_source) = parameters_struct_source { - program.push_str(¶meters_struct_source); + program.push_str(parameters_struct_source); format!("parameters: {}_parameters,\n", func.name()) } else { "".to_string() @@ -179,7 +184,12 @@ pub fn export_fn_abi( let (ast, errors) = parse_program(&program); if !errors.is_empty() { - return Err(AztecMacroError::AztecDepNotFound); + return Err(AztecMacroError::CouldNotExportFunctionAbi { + span: None, + secondary_message: Some( + format!("Failed to parse Noir macro code (struct {}_abi). This is either a bug in the compiler or the Noir macro code", func.name()) + ) + }); } let sorted_ast = ast.into_sorted(); diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index e3a3db87a3d..9aead1756f9 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -13,6 +13,7 @@ pub enum AztecMacroError { CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, MultipleStorageDefinitions { span: Option }, CouldNotExportStorageLayout { span: Option, secondary_message: Option }, + CouldNotExportFunctionAbi { span: Option, secondary_message: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -60,6 +61,11 @@ impl From for MacroError { secondary_message, span, }, + AztecMacroError::CouldNotExportFunctionAbi { secondary_message, span } => MacroError { + primary_message: "Could not generate and export function abi".to_string(), + secondary_message, + span, + }, AztecMacroError::EventError { span, message } => MacroError { primary_message: message, secondary_message: None, diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 245658a98e8..cc9ed3c1471 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x0ccb2a7150ed29533f211e223f98450cf4769ff8938e9d4ad303f71c5e302600n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737bn; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 58d5b8910da..9684fb4bb0f 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x225f865e3ac2c7d1fc32ef78a0e7528be944ff60343eb5dec0a853166d9eb077"`, + `"0x063667fca66ca9545974f22133f8f357ca905d09dc3724c3b9a1c423722c38ef"`, ); }); }); diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index e819c7b325a..39989072943 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f>, + "txsEffectsHash": Buffer<0x00f86e21e2baf3fceef7f722945ad332d701631807b99b3f1ffa4857221a457a>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a3e6d", + "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a6abe", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd>, + "root": Fr<0x0614310373e2f13fc543c80e1e3ede7e533992673123bdae374e24ca242ffef0>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x13b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c3>, + "root": Fr<0x00e63161951459d2b3933a427fcbee248e16089a46610b08eb692160c7c91169>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x04694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330>, + "root": Fr<0x278716fcc013c1fd4b4cd02737a864cf08fd58933920336537db0ea33f81038d>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae>, + "value": Fr<0x0e8a6bd9e7d214f645afcaa3b027ce36281f3d438bb3917b6017427386b677ae>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x00c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3>, + "encryptedLogsHash": Fr<0x000f84c10c71f2411bf1da06dabda0a24e3b2a6d755090c7179077da3b575e14>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x28d23cd3f4c08daeaa0eea08676686f6a3b0c266aac8925de6d6cd2213c17ee3>, + "value": Fr<0x18ee9d4edf829ac7a877fb8cb25dc40f15398a4abd5894c3efd05e778fad47b3>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd>, + "value": Fr<0x10cdf37ee8714413998570a8582e3177fe689c5e81593f10967a35311ddb2221>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x14486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05>, + "value": Fr<0x21485915a51762cb48dc676a56b12863dd9cb019385ae96848faee55fb6382a4>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x07de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640>, + "value": Fr<0x1966330ea9517f93477739875372f4b646f35c3cf663841c96f530b43bc9c355>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 134fb159e34..f5e7a39c5be 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c4401002588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c44010000000000000000000000000000000000000000000000000000000000000000001be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed10000000000000000000000000000000000000000af9f8c440000000000012588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d38f6fde0427101df4e778ed294bf222b735c885172067d2b4d6967b6a7c8c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fe53a6ceaf194ae7c61b757a173982685276f1dade7402c02e78198779ae0400e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921b17810bc097a2bca3247690619cb3215d116f832eea2ec8d844460fde2fcfc1bd86d85941600496c74f2da2ccfea9fed69dbe88d8a73033097f0c4f7a44e8400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +2ec634bf49077e378b58582d8723c7bed30f4644a6f022e7ccf4495fc11a059baf9f8c44010010f4fa9a475c085501401546049dee810ab2b6dd828b13350b9693f1fe54080d00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000012ec634bf49077e378b58582d8723c7bed30f4644a6f022e7ccf4495fc11a059baf9f8c44010000000000000000000000000000000000000000000000000000000000000000002ec634bf49077e378b58582d8723c7bed30f4644a6f022e7ccf4495fc11a059b0000000000000000000000000000000000000000af9f8c4400000000000110f4fa9a475c085501401546049dee810ab2b6dd828b13350b9693f1fe54080d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fe9a842d4f37c9d428e077c4caf1a9b90e9bc2fc4261a52241a6f8a39148f29000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ec634bf49077e378b58582d8723c7bed30f4644a6f022e7ccf4495fc11a059b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004002623f725bab709f34fd7c4ddc7ba36edeb8712a67a7b8830de1eba1ae044ab00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f11ff2072b3e36ab58c3d1511e721f9ff2d2be7a25e4800a75a098b6c5c30788622664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f0891499cce9b82219e69c2fb03e956c1b50cf22c11740d2dbb3ecd0047751af719b0921aaf571ab32bf3a891a41b6615007bab645bf063ff79a6254304c8d5d4b3f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 8f8f768805e..d6675d5423b 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e957fb833022fdbc841e0192be07c55b1f2d3ec3d9d5933c566e7eca418a2b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001d33cb2a28886e7dffe6e29908fa4287f9a770bd5591eb4e0b05af7a0410b21c03d486d8df44f793ec2c180cdbb3835e185e43a7c9991695e6bacae04d0b548c0217c6fc6e5bf85420ed3b84254a5ff189eb6d11dc0d4ce911a3b03be3c6b76014213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e70906bca101002b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce14213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e700000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1b312d79c2f2b38b11da7a65c57ee25cdefc03e154410dbc0d1208de3c7d984d268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed025eb824626710dc3ec6f2f31a2006710f207dc284da5f52f0e5051871a092b300000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8a6bd9e7d214f645afcaa3b027ce36281f3d438bb3917b6017427386b677ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008c313d19538fb5a06715dd27e31aa6ad6e7ecc3e5cb0e605105972dc532f0771d20b515f3e12862dc385b1a0a7d0148ba36d61124d3cacb508071470cb30397000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614310373e2f13fc543c80e1e3ede7e533992673123bdae374e24ca242ffef000000003000000000000000000000000000000000000000000000000000000000000000100f86e21e2baf3fceef7f722945ad332d701631807b99b3f1ffa4857221a457a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003000e63161951459d2b3933a427fcbee248e16089a46610b08eb692160c7c9116900000180278716fcc013c1fd4b4cd02737a864cf08fd58933920336537db0ea33f81038d000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a6abe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000005e067f44ef73885cbb10c54e20286ba6bbdaa5a7672baee0cea1e93e3cc9a42948d647fb596b7ec1684d7cb98ae3f48fce01c34aae0a8c12470802b604bd281ec6535007127feba16ccef7d1be94690a62e0b698433084e2ca6f0f52c7d31d267aa1a760e31829d82e706b996fbd2b1e8543adbf05425fce986b0044aef28a0906bca101001d20b515f3e12862dc385b1a0a7d0148ba36d61124d3cacb508071470cb30397267aa1a760e31829d82e706b996fbd2b1e8543adbf05425fce986b0044aef28a00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040614310373e2f13fc543c80e1e3ede7e533992673123bdae374e24ca242ffef000000003000000000000000000000000000000000000000000000000000000000000000100f86e21e2baf3fceef7f722945ad332d701631807b99b3f1ffa4857221a457a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003000e63161951459d2b3933a427fcbee248e16089a46610b08eb692160c7c9116900000180278716fcc013c1fd4b4cd02737a864cf08fd58933920336537db0ea33f81038d000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a6abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f29f27250a870032cf53c8966232adfb8e329f9323110b6ce7ad59d420131cdca268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed1914e397cb6346b6c66edeff9dcb7ebfd0b526dc60e111722b6c0a4be042726700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 38c3f17a77a..431165b5501 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002447f72d2f5d3ae9d3fe1e17ca75242eb186337ef31fcb56cde96ab973f4cf092fbb460516c785a1f63de48c5f9e685761c45d63441f9318b29aca93af532d240d438e2fe6192c58edd342c34980ed4c6ada2ac6ee418572be0f58050f2b21b619babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f5d0514fab2789c0edc6e27ca56705b7069ff0f397bc78f04e9563e1e23909d00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001966330ea9517f93477739875372f4b646f35c3cf663841c96f530b43bc9c3550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cdf37ee8714413998570a8582e3177fe689c5e81593f10967a35311ddb22210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121485915a51762cb48dc676a56b12863dd9cb019385ae96848faee55fb6382a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f84c10c71f2411bf1da06dabda0a24e3b2a6d755090c7179077da3b575e14006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000000018baadf385d1e6eec3bf831f5d0f67327405ede188f8d307151343e38dc852b411bb938febc22112f0a99863d72d76b0de36628281fb84410c4951807011ff271026f8476344ea76d43a388119131deaac6a5258c5b7debab16859fb57e0aa2b2f5d0514fab2789c0edc6e27ca56705b7069ff0f397bc78f04e9563e1e23909d0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001966330ea9517f93477739875372f4b646f35c3cf663841c96f530b43bc9c3550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010cdf37ee8714413998570a8582e3177fe689c5e81593f10967a35311ddb22210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121485915a51762cb48dc676a56b12863dd9cb019385ae96848faee55fb6382a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From ccd1b7bd3510ba48efa37efc8830791d05bc015d Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 1 Apr 2024 08:20:43 +0000 Subject: [PATCH 033/123] fmt --- noir/noir-repo/aztec_macros/src/transforms/functions.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/functions.rs b/noir/noir-repo/aztec_macros/src/transforms/functions.rs index e5bac999369..60c64f562b4 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/functions.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/functions.rs @@ -184,11 +184,11 @@ pub fn export_fn_abi( let (ast, errors) = parse_program(&program); if !errors.is_empty() { - return Err(AztecMacroError::CouldNotExportFunctionAbi { - span: None, + return Err(AztecMacroError::CouldNotExportFunctionAbi { + span: None, secondary_message: Some( format!("Failed to parse Noir macro code (struct {}_abi). This is either a bug in the compiler or the Noir macro code", func.name()) - ) + ) }); } From 6b6080d94070dd8d81c82cc692028adfad492d2b Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 06:49:44 +0000 Subject: [PATCH 034/123] wip --- .../contracts/parent_contract/Nargo.toml | 2 ++ .../contracts/parent_contract/src/main.nr | 4 ++- .../compute_note_hash_and_nullifier.rs | 9 ++++-- .../src/transforms/contract_interface.rs | 0 .../src/transforms/note_interface.rs | 8 ++--- .../aztec_macros/src/utils/hir_utils.rs | 30 ++++++++++--------- .../src/monomorphization/mod.rs | 1 - 7 files changed, 32 insertions(+), 22 deletions(-) create mode 100644 noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs diff --git a/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml index 53a4d614564..a91d3bd758c 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml @@ -6,3 +6,5 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } +child_contract = { path = "../child_contract" } +value_note = { path = "../../../aztec-nr/value-note" } diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index 472159dfe2c..d057df9eca7 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -1,7 +1,9 @@ + // A contract used along with `Child` contract to test nested calls. contract Parent { use dep::aztec::prelude::{AztecAddress, FunctionSelector}; - + use dep::child_contract::Child; + use dep::value_note::value_note::ValueNote; // Private function to call another private function in the target_contract using the provided selector #[aztec(private)] fn entry_point(target_contract: AztecAddress, target_selector: FunctionSelector) -> Field { diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index 134342b07d7..dc762e32be0 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -60,8 +60,13 @@ pub fn inject_compute_note_hash_and_nullifier( // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the // contract might use. These are the types that implement the NoteInterface trait, which provides the // get_note_type_id function. - let note_types = - fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); + let note_types = fetch_notes(context) + .iter() + .map(|note| { + println!("note {:?}", note.borrow()); + note.borrow().name.0.contents.clone() + }) + .collect(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. let func = generate_compute_note_hash_and_nullifier(¬e_types); diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs index de94e5eed2d..c7495f93a9e 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs @@ -535,12 +535,12 @@ fn generate_note_properties_fn_source( .join(", "); format!( " - pub fn properties() -> {}Properties {{ - {}Properties {{ - {} + pub fn properties() -> {0}Properties {{ + {0}Properties {{ + {1} }} }}", - note_type, note_type, note_property_selectors + note_type, note_property_selectors ) .to_string() } diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 0535643186a..aebf494d8ab 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -12,24 +12,25 @@ use noirc_frontend::{ ItemVisibility, NoirFunction, Shared, Signedness, StructType, Type, }; -use super::ast_utils::is_custom_attribute; - pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { context .def_map(crate_id) - .expect("ICE: Missing crate in def_map") - .modules() - .iter() - .flat_map(|(_, module)| { - module.type_definitions().filter_map(|typ| { - if let ModuleDefId::TypeId(struct_id) = typ { - Some(struct_id) - } else { - None - } - }) + .map(|def_map| { + def_map + .modules() + .iter() + .flat_map(|(_, module)| { + module.type_definitions().filter_map(|typ| { + if let ModuleDefId::TypeId(struct_id) = typ { + Some(struct_id) + } else { + None + } + }) + }) + .collect() }) - .collect() + .unwrap_or(vec![]) } pub fn collect_crate_functions(crate_id: &CrateId, context: &HirContext) -> Vec { @@ -93,6 +94,7 @@ pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec Monomorphizer<'interner> { if let ImplKind::TraitMethod(method, _, _) = ident.impl_kind { return Ok(self.resolve_trait_method_reference(expr_id, typ, method)); } - let definition = self.interner.definition(ident.id); let ident = match &definition.kind { DefinitionKind::Function(func_id) => { From e0f2ca2098b8aa673e4855e5101eb8dd9af12909 Mon Sep 17 00:00:00 2001 From: Gregorio Juliana Date: Tue, 2 Apr 2024 08:57:04 +0200 Subject: [PATCH 035/123] Update noir/noir-repo/aztec_macros/src/lib.rs Co-authored-by: esau <152162806+sklppy88@users.noreply.github.com> --- noir/noir-repo/aztec_macros/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 2074e687107..56c1377d9a9 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -86,7 +86,7 @@ fn transform( fn transform_module(module: &mut SortedModule) -> Result { let mut has_transformed_module = false; - // Check for a user defined storage stru + // Check for a user defined storage struct let maybe_storage_struct_name = check_for_storage_definition(module)?; let storage_defined = maybe_storage_struct_name.is_some(); From 2d188743ad0097956e51fc492ffbe77f9bf3f49e Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 08:43:34 +0000 Subject: [PATCH 036/123] guess what --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 58d5b8910da..877f603668f 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x225f865e3ac2c7d1fc32ef78a0e7528be944ff60343eb5dec0a853166d9eb077"`, + `"0x2f281ca9a1c4739ed0da8d0d01a91ba443eb35007e266b3f23956b9bec5968b8"`, ); }); }); From 2e61cda16ebc08002f31685b9aec392e9e2ea132 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 09:12:40 +0000 Subject: [PATCH 037/123] increased test machine size, hash --- .circleci/config.yml | 2 +- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 63a19384132..d2bc3fdfed6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -512,7 +512,7 @@ jobs: yarn-project-test: docker: - image: aztecprotocol/alpine-build-image - resource_class: small + resource_class: medium steps: - *checkout - *setup_env diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 9684fb4bb0f..fac78a95c26 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x063667fca66ca9545974f22133f8f357ca905d09dc3724c3b9a1c423722c38ef"`, + `"0x300a02f7b81e239129c55ff79c65b3461b700b7345bf94743b65b5f765282061"`, ); }); }); From a6aa905dceaced314a406edb78a694dc578640f3 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 09:53:09 +0000 Subject: [PATCH 038/123] avoid oom --- build-system/scripts/setup_env | 1 + yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build-system/scripts/setup_env b/build-system/scripts/setup_env index 7280711ed1b..1d4c98421a6 100755 --- a/build-system/scripts/setup_env +++ b/build-system/scripts/setup_env @@ -101,6 +101,7 @@ echo export BRANCH=$BRANCH >> $BASH_ENV echo export PULL_REQUEST=$PULL_REQUEST >> $BASH_ENV echo export DRY_DEPLOY=${DRY_DEPLOY:-0} >> $BASH_ENV echo export DOCKER_CLI_HINTS=false >> $BASH_ENV +echo export NODE_OPTIONS="--max-old-space-size=4096" >> $BASH_ENV # We want very strict failures on any failing command, undefined variable, or commands that pipe to other commands. echo set -euo pipefail >> $BASH_ENV diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index fac78a95c26..3badc52d19b 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x300a02f7b81e239129c55ff79c65b3461b700b7345bf94743b65b5f765282061"`, + `"0x15b5d24099881b8de8e1a905daf5948c3e2c5f1a33f51ddca3fb56c88b753d77"`, ); }); }); From e2a14feee4d1a83ec34b44533f2d06c179fe6116 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 13:25:04 +0000 Subject: [PATCH 039/123] wip --- .../contracts/child_contract/src/main.nr | 28 ++++++ noir/noir-repo/aztec_macros/src/lib.rs | 28 ++++-- .../compute_note_hash_and_nullifier.rs | 9 +- .../src/transforms/contract_interface.rs | 91 +++++++++++++++++++ .../aztec_macros/src/transforms/mod.rs | 1 + .../aztec_macros/src/utils/hir_utils.rs | 3 +- 6 files changed, 143 insertions(+), 17 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 08950786eae..2dd28252f54 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -14,6 +14,34 @@ contract Child { a_private_value: PrivateSet, } + struct ChildInterface { + target_contract: dep::aztec::protocol_types::address::AztecAddress, + value: fn[(dep::aztec::context::Context, dep::aztec::protocol_types::address::AztecAddress)](Field) -> [Field; 4], + // value_internal: fn(Field) -> Field, + // pub_get_value: fn(Field) -> Field, + // pub_set_value: fn(Field) -> Field, + // private_set_value: fn(Field, AztecAddress) -> Field, + // private_get_value: fn(Field, AztecAddress) -> Field, + // pub_inc_value: fn(Field) -> Field, + // pub_inc_value_internal: fn(Field) -> Field, + // set_value_twice_with_nested_first: fn() -> (), + // set_value_twice_with_nested_last: fn() -> () + } + + impl ChildInterface { + fn new( + context: dep::aztec::context::Context, + target_contract: dep::aztec::protocol_types::address::AztecAddress + ) -> Self { + Self { + target_contract, + value: | input: Field | { + context.private.unwrap().call_private_function(target_contract, dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), [input]) + } + } + } + } + // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. #[aztec(private)] fn value(input: Field) -> Field { diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 810d66452eb..a68f0be74d3 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -3,6 +3,7 @@ mod utils; use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, + contract_interface::{generate_contract_interface, stub_function}, events::{generate_selector_impl, transform_events}, functions::{transform_function, transform_unconstrained}, note_interface::generate_note_interface_impl, @@ -59,7 +60,9 @@ fn transform( // Usage -> mut ast -> aztec_library::transform(&mut ast) // Covers all functions in the ast for submodule in ast.submodules.iter_mut().filter(|submodule| submodule.is_contract) { - if transform_module(&mut submodule.contents).map_err(|err| (err.into(), file_id))? { + if transform_module(&mut submodule.contents, submodule.name.0.contents.as_str()) + .map_err(|err| (err.into(), file_id))? + { check_for_aztec_dependency(crate_id, context)?; } } @@ -72,7 +75,7 @@ fn transform( /// Determines if ast nodes are annotated with aztec attributes. /// For annotated functions it calls the `transform` function which will perform the required transformations. /// Returns true if an annotated node is found, false otherwise -fn transform_module(module: &mut SortedModule) -> Result { +fn transform_module(module: &mut SortedModule, module_name: &str) -> Result { let mut has_transformed_module = false; // Check for a user defined storage stru @@ -102,6 +105,8 @@ fn transform_module(module: &mut SortedModule) -> Result .any(|attr| is_custom_attribute(attr, "aztec(initializer)")) }); + let mut stubs = vec![]; + for func in module.functions.iter_mut() { let mut is_private = false; let mut is_public = false; @@ -129,14 +134,17 @@ fn transform_module(module: &mut SortedModule) -> Result // Apply transformations to the function based on collected attributes if is_private || is_public || is_public_vm { + let fn_type = if is_private { + "Private" + } else if is_public_vm { + "Avm" + } else { + "Public" + }; + let stub = stub_function(fn_type, func); + stubs.push(stub); transform_function( - if is_private { - "Private" - } else if is_public_vm { - "Avm" - } else { - "Public" - }, + fn_type, func, storage_defined, is_initializer, @@ -170,6 +178,8 @@ fn transform_module(module: &mut SortedModule) -> Result span: Span::default(), }); } + + generate_contract_interface(module, module_name, &stubs)?; } Ok(has_transformed_module) diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index dc762e32be0..134342b07d7 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -60,13 +60,8 @@ pub fn inject_compute_note_hash_and_nullifier( // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the // contract might use. These are the types that implement the NoteInterface trait, which provides the // get_note_type_id function. - let note_types = fetch_notes(context) - .iter() - .map(|note| { - println!("note {:?}", note.borrow()); - note.borrow().name.0.contents.clone() - }) - .collect(); + let note_types = + fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. let func = generate_compute_note_hash_and_nullifier(¬e_types); diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index e69de29bb2d..239920e0acb 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -0,0 +1,91 @@ +use noirc_frontend::{parse_program, parser::SortedModule, NoirFunction}; + +use crate::utils::errors::AztecMacroError; + +pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, String, String) { + let (fn_name, fn_type) = ( + func.name().to_string(), + format!( + "fn[(dep::aztec::context::Context, dep::aztec::protocol_types::address::AztecAddress)]({}) -> {}", + func.parameters() + .iter() + .map(|param| param.typ.to_string().replace("plain::", "")) + .collect::>() + .join(", "), + func.return_type() + ), + ); + let fn_source = format!( + "|{}| {{ + context.call_{}_function(target_contract, [{}]) + }}", + func.parameters() + .iter() + .map(|param| format!( + "{}: {}", + param.pattern.name_ident().0.contents, + param.typ.to_string().replace("plain::", "") + )) + .collect::>() + .join(", "), + if aztec_visibility == "Private" { "private" } else { "public" }, + func.parameters() + .iter() + .map(|param| param.pattern.name_ident().0.contents.clone()) + .collect::>() + .join(", "), + ); + (fn_name, fn_type, fn_source) +} + +pub fn generate_contract_interface( + module: &mut SortedModule, + module_name: &str, + stubs: &[(String, String, String)], +) -> Result<(), AztecMacroError> { + let contract_interface = format!( + " + struct {0}Interface {{ + target_contract: dep::aztec::protocol_types::address::AztecAddress, + {1} + }} + + impl {0}Interface {{ + fn new( + context: T, + target_contract: dep::aztec::protocol_types::address::AztecAddress + ) -> Self where T: dep::aztec::context::Context {{ + Self {{ + target_contract, + {2} + }} + }} + }} + ", + module_name, + stubs + .iter() + .map(|(fn_name, fn_type, _)| format!("{}: {}", fn_name, fn_type)) + .collect::>() + .join(",\n"), + stubs + .iter() + .map(|(fn_name, _, fn_source)| format!("{}: {}", fn_name, fn_source)) + .collect::>() + .join(",\n") + ); + + println!("{}", contract_interface); + + let (contract_interface_ast, errors) = parse_program(&contract_interface); + if !errors.is_empty() { + dbg!(errors); + return Err(AztecMacroError::AztecDepNotFound); + } + + let mut contract_interface_ast = contract_interface_ast.into_sorted(); + module.types.push(contract_interface_ast.types.pop().unwrap()); + module.impls.push(contract_interface_ast.impls.pop().unwrap()); + + Ok(()) +} diff --git a/noir/noir-repo/aztec_macros/src/transforms/mod.rs b/noir/noir-repo/aztec_macros/src/transforms/mod.rs index 5a454c75148..2a6fef7647f 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/mod.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/mod.rs @@ -1,4 +1,5 @@ pub mod compute_note_hash_and_nullifier; +pub mod contract_interface; pub mod events; pub mod functions; pub mod note_interface; diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index aebf494d8ab..2bef1c3bf89 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -12,6 +12,8 @@ use noirc_frontend::{ ItemVisibility, NoirFunction, Shared, Signedness, StructType, Type, }; +use super::ast_utils::is_custom_attribute; + pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { context .def_map(crate_id) @@ -94,7 +96,6 @@ pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec Date: Tue, 2 Apr 2024 14:07:17 +0000 Subject: [PATCH 040/123] PR changes --- .../compiler/noirc_driver/src/abi_gen.rs | 48 +++++++++++++++++- .../compiler/noirc_driver/src/lib.rs | 3 +- .../noirc_frontend/src/node_interner.rs | 2 +- .../compiler/wasm/src/types/noir_artifact.ts | 22 ++++++--- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 49 +------------------ yarn-project/aztec.js/src/contract/checker.ts | 8 +-- yarn-project/cli/src/encoding.ts | 4 +- yarn-project/foundation/src/abi/abi.ts | 20 ++++---- yarn-project/foundation/src/abi/decoder.ts | 6 +-- yarn-project/foundation/src/abi/encoder.ts | 6 +-- yarn-project/foundation/src/abi/utils.ts | 12 ++--- .../src/scripts/generate_ts_from_abi.ts | 8 +-- .../types/src/abi/contract_artifact.ts | 4 +- yarn-project/types/src/noir/index.ts | 10 ++-- yellow-paper/docs/bytecode/index.md | 8 +-- 15 files changed, 110 insertions(+), 100 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs index 7fafa719186..657a3d09593 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs @@ -2,10 +2,11 @@ use std::collections::BTreeMap; use acvm::acir::native_types::Witness; use iter_extended::{btree_map, vecmap}; -use noirc_abi::{Abi, AbiParameter, AbiReturnType, AbiType}; +use noirc_abi::{Abi, AbiParameter, AbiReturnType, AbiType, AbiValue}; use noirc_frontend::{ hir::Context, - hir_def::{function::Param, stmt::HirPattern}, + hir_def::{expr::HirArrayLiteral, function::Param, stmt::HirPattern}, + macros_api::{HirExpression, HirLiteral}, node_interner::{FuncId, NodeInterner}, Visibility, }; @@ -109,6 +110,49 @@ fn collapse_ranges(witnesses: &[Witness]) -> Vec> { wit } +pub fn value_from_hir_expression(context: &Context, expression: HirExpression) -> AbiValue { + match expression { + HirExpression::Constructor(constructor) => { + let fields = constructor + .fields + .iter() + .map(|(ident, expr_id)| { + ( + ident.0.contents.to_string(), + value_from_hir_expression( + context, + context.def_interner.expression(expr_id), + ), + ) + }) + .collect(); + AbiValue::Struct { fields } + } + HirExpression::Literal(literal) => match literal { + HirLiteral::Array(hir_array) => match hir_array { + HirArrayLiteral::Standard(expr_ids) => { + let value = expr_ids + .iter() + .map(|expr_id| { + value_from_hir_expression( + context, + context.def_interner.expression(expr_id), + ) + }) + .collect(); + AbiValue::Array { value } + } + _ => unreachable!("Repeated arrays cannot be used in the abi"), + }, + HirLiteral::Bool(value) => AbiValue::Boolean { value }, + HirLiteral::Str(value) => AbiValue::String { value }, + HirLiteral::Integer(field, sign) => AbiValue::Integer { value: field.to_i128(), sign }, + _ => unreachable!("Literal cannot be used in the abi"), + }, + _ => unreachable!("Type cannot be used in the abi"), + } +} + #[cfg(test)] mod test { use std::ops::Range; diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 636c13a055b..3efcbcefd9d 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -3,6 +3,7 @@ #![warn(unreachable_pub)] #![warn(clippy::semicolon_if_nothing_returned)] +use abi_gen::value_from_hir_expression; use acvm::acir::circuit::ExpressionWidth; use clap::Args; use fm::{FileId, FileManager}; @@ -452,7 +453,7 @@ fn compile_contract_inner( let let_statement = context.def_interner.get_global_let_statement(*global_id).unwrap(); let hir_expression = context.def_interner.expression(&let_statement.expression); - AbiValue::from_hir_expression(context, hir_expression) + value_from_hir_expression(context, hir_expression) }) .collect(); (tag.to_string(), globals) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs index 80fa2565eb3..4bb6f0bb2e9 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs @@ -844,7 +844,7 @@ impl NodeInterner { &self.struct_attributes[struct_id] } - pub fn global_attributes(&self, global_id: &GlobalId) -> &Vec { + pub fn global_attributes(&self, global_id: &GlobalId) -> &[SecondaryAttribute] { &self.global_attributes[global_id] } diff --git a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts index d4d05b79b49..d8d92922f17 100644 --- a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts +++ b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts @@ -14,17 +14,27 @@ export interface BasicValue { /** * An exported value. */ -export type ABIValue = - | BasicValue<'field', bigint> +export type AbiValue = | BasicValue<'boolean', boolean> - | BasicValue<'integer', number> | BasicValue<'string', string> - | BasicValue<'array', ABIValue[]> + | BasicValue<'array', AbiValue[]> + | IntegerValue + | FieldValue | StructValue; +export type TypedStructFieldValue = { name: string; value: T }; + export interface StructValue { kind: 'struct'; - fields: (ABIValue & { name: string })[]; + fields: TypedStructFieldValue[]; +} + +export interface FieldValue extends BasicValue<'field', string> { + sign: boolean; +} + +export interface IntegerValue extends BasicValue<'integer', string> { + sign: boolean; } /** @@ -72,7 +82,7 @@ export interface ContractArtifact { outputs: { structs: Record; - globals: Record; + globals: Record; }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 1f1967090f7..0a8a7845833 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -524,7 +524,7 @@ pub enum AbiValue { }, Integer { sign: bool, - value: String, + value: i128, }, Boolean { value: bool, @@ -547,53 +547,6 @@ pub enum AbiValue { }, } -impl AbiValue { - pub fn from_hir_expression(context: &Context, expression: HirExpression) -> Self { - match expression { - HirExpression::Constructor(constructor) => { - let fields = constructor - .fields - .iter() - .map(|(ident, expr_id)| { - ( - ident.0.contents.to_string(), - Self::from_hir_expression( - context, - context.def_interner.expression(expr_id), - ), - ) - }) - .collect(); - Self::Struct { fields } - } - HirExpression::Literal(literal) => match literal { - HirLiteral::Array(hir_array) => match hir_array { - HirArrayLiteral::Standard(expr_ids) => { - let value = expr_ids - .iter() - .map(|expr_id| { - Self::from_hir_expression( - context, - context.def_interner.expression(expr_id), - ) - }) - .collect(); - Self::Array { value } - } - _ => unreachable!("Repeated arrays cannot be used in the abi"), - }, - HirLiteral::Bool(value) => Self::Boolean { value }, - HirLiteral::Str(value) => Self::String { value }, - HirLiteral::Integer(field, sign) => { - Self::Integer { value: field.to_string(), sign } - } - _ => unreachable!("Literal cannot be used in the abi"), - }, - _ => unreachable!("Type cannot be used in the abi"), - } - } -} - fn range_to_vec(ranges: &[Range]) -> Vec { let mut result = Vec::new(); for range in ranges { diff --git a/yarn-project/aztec.js/src/contract/checker.ts b/yarn-project/aztec.js/src/contract/checker.ts index 438bef2048c..e6c449cfb75 100644 --- a/yarn-project/aztec.js/src/contract/checker.ts +++ b/yarn-project/aztec.js/src/contract/checker.ts @@ -1,4 +1,4 @@ -import { type ABIType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; +import { type AbiType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; /** * Represents a type derived from input type T with the 'kind' property removed. @@ -51,10 +51,10 @@ export function abiChecker(artifact: ContractArtifact) { * Throws an error if the type has an unrecognized kind or incorrectly formed attributes. * Additionally, checks nested types for array and struct kinds. * - * @param type - The ABIType object representing the type of the ABI function parameter. + * @param type - The AbiType object representing the type of the ABI function parameter. * @returns A boolean value indicating whether the type is valid or not. */ -function abiParameterTypeChecker(type: ABIType): boolean { +function abiParameterTypeChecker(type: AbiType): boolean { switch (type.kind) { case 'field': case 'boolean': @@ -73,7 +73,7 @@ function abiParameterTypeChecker(type: ABIType): boolean { } /** - * Check if the structure of the ABIType 'struct' is valid by ensuring field names are strings + * Check if the structure of the AbiType 'struct' is valid by ensuring field names are strings * and their type attribute passes the abiParameterTypeChecker. Returns true on successful validation, * otherwise throws an error providing insight into the incorrect formation in the struct. * diff --git a/yarn-project/cli/src/encoding.ts b/yarn-project/cli/src/encoding.ts index b06c9301b6e..e10f843814d 100644 --- a/yarn-project/cli/src/encoding.ts +++ b/yarn-project/cli/src/encoding.ts @@ -1,4 +1,4 @@ -import { type ABIParameter, type ABIType, type StructType } from '@aztec/foundation/abi'; +import { type ABIParameter, type AbiType, type StructType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; /** @@ -29,7 +29,7 @@ export function parseStructString(str: string, abiType: StructType) { * @param abiType - The type as described by the contract's ABI. * @returns The encoded argument. */ -function encodeArg(arg: string, abiType: ABIType, name: string): any { +function encodeArg(arg: string, abiType: AbiType, name: string): any { const { kind } = abiType; if (kind === 'field' || kind === 'integer') { let res: bigint; diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index d2c1d700901..fe2db145af0 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -16,17 +16,19 @@ export interface BasicValue { /** * An exported value. */ -export type ABIValue = +export type AbiValue = | BasicValue<'boolean', boolean> | BasicValue<'string', string> - | BasicValue<'array', ABIValue[]> + | BasicValue<'array', AbiValue[]> | IntegerValue | FieldValue | StructValue; +export type TypedStructFieldValue = { name: string; value: T }; + export interface StructValue { kind: 'struct'; - fields: (ABIValue & { name: string })[]; + fields: TypedStructFieldValue[]; } export interface FieldValue extends BasicValue<'field', string> { @@ -48,7 +50,7 @@ export interface ABIVariable { /** * The type of the variable. */ - type: ABIType; + type: AbiType; } /** @@ -82,7 +84,7 @@ export interface BasicType { /** * A variable type. */ -export type ABIType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; +export type AbiType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; /** * An integer type. @@ -109,7 +111,7 @@ export interface ArrayType extends BasicType<'array'> { /** * The type of the array elements. */ - type: ABIType; + type: AbiType; } /** @@ -168,7 +170,7 @@ export interface FunctionAbi { /** * The types of the return values. */ - returnTypes: ABIType[]; + returnTypes: AbiType[]; /** * Whether the function is flagged as an initializer. */ @@ -280,8 +282,8 @@ export interface ContractArtifact { * The outputs of the contract. */ outputs: { - structs: Record; - globals: Record; + structs: Record; + globals: Record; }; /** diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index a65f52925ea..229935fd2be 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -1,6 +1,6 @@ import { AztecAddress } from '../aztec-address/index.js'; import { type Fr } from '../fields/index.js'; -import { type ABIParameter, type ABIType, type ABIVariable, type FunctionArtifact } from './abi.js'; +import { type ABIParameter, type ABIVariable, type AbiType, type FunctionArtifact } from './abi.js'; import { isAztecAddressStruct } from './utils.js'; /** @@ -20,7 +20,7 @@ class ReturnValuesDecoder { * @param abiType - The type of the return value. * @returns The decoded return value. */ - private decodeReturn(abiType: ABIType): DecodedReturn { + private decodeReturn(abiType: AbiType): DecodedReturn { switch (abiType.kind) { case 'field': return this.getNextField().toBigInt(); @@ -114,7 +114,7 @@ export class FunctionSignatureDecoder { * @param param - The parameter type to decode. * @returns A string representing the parameter type. */ - private getParameterType(param: ABIType): string { + private getParameterType(param: AbiType): string { switch (param.kind) { case 'field': return 'Field'; diff --git a/yarn-project/foundation/src/abi/encoder.ts b/yarn-project/foundation/src/abi/encoder.ts index 7ca7260db68..119554935af 100644 --- a/yarn-project/foundation/src/abi/encoder.ts +++ b/yarn-project/foundation/src/abi/encoder.ts @@ -1,5 +1,5 @@ import { Fr } from '../fields/index.js'; -import { type ABIType, type FunctionAbi } from './abi.js'; +import { type AbiType, type FunctionAbi } from './abi.js'; import { isAddressStruct, isFunctionSelectorStruct, isWrappedFieldStruct } from './utils.js'; /** @@ -11,7 +11,7 @@ class ArgumentEncoder { constructor(private abi: FunctionAbi, private args: any[]) {} - static typeSize(abiType: ABIType): number { + static typeSize(abiType: AbiType): number { switch (abiType.kind) { case 'field': case 'boolean': @@ -36,7 +36,7 @@ class ArgumentEncoder { * @param arg - The value to encode. * @param name - Name. */ - private encodeArgument(abiType: ABIType, arg: any, name?: string) { + private encodeArgument(abiType: AbiType, arg: any, name?: string) { if (arg === undefined || arg == null) { throw new Error(`Undefined argument ${name ?? 'unnamed'} of type ${abiType.kind}`); } diff --git a/yarn-project/foundation/src/abi/utils.ts b/yarn-project/foundation/src/abi/utils.ts index 1959d5762b8..7bc8c55ce5e 100644 --- a/yarn-project/foundation/src/abi/utils.ts +++ b/yarn-project/foundation/src/abi/utils.ts @@ -1,11 +1,11 @@ -import { type ABIType } from './abi.js'; +import { type AbiType } from './abi.js'; /** * Returns whether the ABI type is an Aztec or Ethereum Address defined in Aztec.nr. * @param abiType - Type to check. * @returns Boolean. */ -export function isAddressStruct(abiType: ABIType) { +export function isAddressStruct(abiType: AbiType) { return isEthAddressStruct(abiType) || isAztecAddressStruct(abiType); } @@ -14,7 +14,7 @@ export function isAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isEthAddressStruct(abiType: ABIType) { +export function isEthAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::EthAddress'); } @@ -23,7 +23,7 @@ export function isEthAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isAztecAddressStruct(abiType: ABIType) { +export function isAztecAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::AztecAddress'); } @@ -32,7 +32,7 @@ export function isAztecAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isFunctionSelectorStruct(abiType: ABIType) { +export function isFunctionSelectorStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('types::abis::function_selector::FunctionSelector'); } @@ -40,7 +40,7 @@ export function isFunctionSelectorStruct(abiType: ABIType) { * Returns whether the ABI type is a struct with a single `inner` field. * @param abiType - Type to check. */ -export function isWrappedFieldStruct(abiType: ABIType) { +export function isWrappedFieldStruct(abiType: AbiType) { return ( abiType.kind === 'struct' && abiType.fields.length === 1 && diff --git a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts index 4c60072d12d..444e24bba56 100644 --- a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts @@ -1,4 +1,4 @@ -import { type ABIType } from '@aztec/foundation/abi'; +import { type AbiType } from '@aztec/foundation/abi'; import { createConsoleLogger } from '@aztec/foundation/log'; import { type NoirCompiledCircuit, type NoirFunctionAbi } from '@aztec/types/noir'; @@ -50,7 +50,7 @@ function addIfUnique(item: PrimitiveTypesUsed) { * @param type - The ABI type to convert. * @returns The typescript code to define the type. */ -function abiTypeToTs(type: ABIType): string { +function abiTypeToTs(type: AbiType): string { switch (type.kind) { case 'integer': { let tsIntType = ''; @@ -107,7 +107,7 @@ function getLastComponentOfPath(str: string): string { * @param output - The set of structs that we have already generated bindings for. * @returns The TypeScript code to define the struct. */ -function generateStructInterfaces(type: ABIType, output: Set): string { +function generateStructInterfaces(type: AbiType, output: Set): string { let result = ''; // Edge case to handle the array of structs case. @@ -124,7 +124,7 @@ function generateStructInterfaces(type: ABIType, output: Set): string { // List of structs encountered while viewing this type that we need to generate // bindings for. - const typesEncountered = new Set(); + const typesEncountered = new Set(); // Codegen the struct and then its fields, so that the structs fields // are defined before the struct itself. diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index ea346660a8f..e8cddfd6060 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -1,7 +1,7 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, + type AbiType, type ContractArtifact, type FunctionArtifact, FunctionType, @@ -135,7 +135,7 @@ function generateFunctionArtifact(fn: NoirCompiledContractFunction): FunctionArt } // If the function is secret, the return is the public inputs, which should be omitted - let returnTypes: ABIType[] = []; + let returnTypes: AbiType[] = []; if (functionType !== 'secret' && fn.abi.return_type) { returnTypes = [fn.abi.return_type.abi_type]; } diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index 9a00478c74e..56a449d8ef0 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -1,8 +1,8 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, - type ABIValue, + type AbiType, + type AbiValue, type DebugFileMap, type DebugInfo, } from '@aztec/foundation/abi'; @@ -27,7 +27,7 @@ export interface NoirFunctionAbi { /** * The type of the return value. */ - abi_type: ABIType; + abi_type: AbiType; /** * The visibility of the return value. */ @@ -69,8 +69,8 @@ export interface NoirCompiledContract { functions: NoirFunctionEntry[]; /** The events of the contract */ outputs: { - structs: Record; - globals: Record; + structs: Record; + globals: Record; }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; diff --git a/yellow-paper/docs/bytecode/index.md b/yellow-paper/docs/bytecode/index.md index c7d7162b4f4..a7484820b14 100644 --- a/yellow-paper/docs/bytecode/index.md +++ b/yellow-paper/docs/bytecode/index.md @@ -115,7 +115,7 @@ If the function is public, the entry will be its ABI. If the function is private | `name` | `string` | The name of the function. | | `functionType` | `string` | `private`, `public` or `unconstrained`. | | `parameters` | [ABIParameter[]](#abi-parameter) | Function parameters. | -| `returnTypes` | `ABIType[]` | The types of the return values. | +| `returnTypes` | `AbiType[]` | The types of the return values. | ### ABI Variable @@ -123,7 +123,7 @@ If the function is public, the entry will be its ABI. If the function is private | Field | Type | Description | |----------|----------|----------| | `name` | `string` | The name of the variable. | -| `type` | [ABIType](#abi-type) | The type of the variable. | +| `type` | [AbiType](#abi-type) | The type of the variable. | ### ABI Parameter @@ -131,7 +131,7 @@ If the function is public, the entry will be its ABI. If the function is private | Field | Type | Description | |----------|----------|----------| | `name` | `string` | The name of the variable. | -| `type` | [ABIType](#abi-type) | The type of the variable. | +| `type` | [AbiType](#abi-type) | The type of the variable. | | `visibility` | `string` | `public` or `secret`. | ### ABI Type @@ -143,7 +143,7 @@ If the function is public, the entry will be its ABI. If the function is private | `sign?` | `string` | The sign of the integer. Applies to integers only. | | `width?` | `number` | The width of the integer in bits. Applies to integers only. | | `length?` | `number` | The length of the array or string. Applies to arrays and strings only. | -| `type?` | [ABIType](#abi-type) | The types of the array elements. Applies to arrays only. | +| `type?` | [AbiType](#abi-type) | The types of the array elements. Applies to arrays only. | | `fields?` | [ABIVariable[]](#abi-variable) | The The fields of the struct. Applies to structs only. | ### Bytecode in the artifact From 0c175fd65e1a23d6a47337bf8ec9f48357eb791d Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 15:37:38 +0000 Subject: [PATCH 041/123] more pr improvements --- .../compiler/noirc_driver/src/abi_gen.rs | 6 +++-- .../src/hir/resolution/errors.rs | 9 +++++++ .../src/hir/resolution/resolver.rs | 24 +++++++++++++++++++ .../noirc_frontend/src/hir/type_check/mod.rs | 1 + noir/noir-repo/tooling/noirc_abi/src/lib.rs | 9 ++----- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs index 657a3d09593..185ed0ac80e 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs @@ -110,7 +110,7 @@ fn collapse_ranges(witnesses: &[Witness]) -> Vec> { wit } -pub fn value_from_hir_expression(context: &Context, expression: HirExpression) -> AbiValue { +pub(super) fn value_from_hir_expression(context: &Context, expression: HirExpression) -> AbiValue { match expression { HirExpression::Constructor(constructor) => { let fields = constructor @@ -146,7 +146,9 @@ pub fn value_from_hir_expression(context: &Context, expression: HirExpression) - }, HirLiteral::Bool(value) => AbiValue::Boolean { value }, HirLiteral::Str(value) => AbiValue::String { value }, - HirLiteral::Integer(field, sign) => AbiValue::Integer { value: field.to_i128(), sign }, + HirLiteral::Integer(field, sign) => { + AbiValue::Integer { value: field.to_u128().to_string(), sign } + } _ => unreachable!("Literal cannot be used in the abi"), }, _ => unreachable!("Type cannot be used in the abi"), diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs index 3c6c0582292..a41693a4c45 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs @@ -80,6 +80,8 @@ pub enum ResolverError { NestedSlices { span: Span }, #[error("#[recursive] attribute is only allowed on entry points to a program")] MisplacedRecursiveAttribute { ident: Ident }, + #[error("#[abi(tag)] attribute is only allowed in contracts")] + AbiAttributeOusideContract { span: Span }, #[error("Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library")] LowLevelFunctionOutsideOfStdlib { ident: Ident }, #[error("Dependency cycle found, '{item}' recursively depends on itself: {cycle} ")] @@ -314,6 +316,13 @@ impl From for Diagnostic { diag.add_note("The `#[recursive]` attribute specifies to the backend whether it should use a prover which generates proofs that are friendly for recursive verification in another circuit".to_owned()); diag } + ResolverError::AbiAttributeOusideContract { span } => { + Diagnostic::simple_error( + format!("#[abi(tag)] attributes can only be used in contracts"), + "misplaced #[ab(tag)] attribute".to_string(), + span, + ) + }, ResolverError::LowLevelFunctionOutsideOfStdlib { ident } => Diagnostic::simple_error( "Definition of low-level function outside of standard library".into(), "Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library".into(), diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 390bc31d6ba..8db3d5b4973 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -19,6 +19,7 @@ use crate::hir_def::expr::{ }; use crate::hir_def::traits::{Trait, TraitConstraint}; +use crate::macros_api::SecondaryAttribute; use crate::token::{Attributes, FunctionAttribute}; use regex::Regex; use std::collections::{BTreeMap, HashSet}; @@ -615,6 +616,18 @@ impl<'a> Resolver<'a> { match self.lookup_struct_or_error(path) { Some(struct_type) => { + if !self.in_contract + && self.interner.struct_attributes(&struct_type.borrow().id).iter().any( + |attr| match &attr { + SecondaryAttribute::Abi(_) => true, + _ => false, + }, + ) + { + self.push_err(ResolverError::AbiAttributeOusideContract { + span: struct_type.borrow().name.span(), + }); + } let expected_generic_count = struct_type.borrow().generics.len(); self.verify_generics_count(expected_generic_count, &mut args, span, || { @@ -1162,6 +1175,17 @@ impl<'a> Resolver<'a> { let global_id = self.interner.next_global_id(); let definition = DefinitionKind::Global(global_id); + if !self.in_contract + && let_stmt.attributes.iter().any(|attr| match &attr { + SecondaryAttribute::Abi(_) => true, + _ => false, + }) + { + self.push_err(ResolverError::AbiAttributeOusideContract { + span: let_stmt.pattern.span(), + }); + } + HirStatement::Let(HirLetStatement { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs index c6e9b7f804a..cfac0adcad9 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/type_check/mod.rs @@ -466,6 +466,7 @@ mod test { pattern: Identifier(z), r#type: Type::FieldElement, expression: expr_id, + attributes: vec![], }; let stmt_id = interner.push_stmt(HirStatement::Let(let_stmt)); let expr_id = interner diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 0a8a7845833..8a385d581af 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -10,12 +10,7 @@ use acvm::{ use errors::AbiError; use input_parser::InputValue; use iter_extended::{try_btree_map, try_vecmap, vecmap}; -use noirc_frontend::{ - hir::Context, - hir_def::expr::HirArrayLiteral, - macros_api::{HirExpression, HirLiteral}, - Signedness, Type, TypeBinding, TypeVariableKind, Visibility, -}; +use noirc_frontend::{hir::Context, Signedness, Type, TypeBinding, TypeVariableKind, Visibility}; use serde::{Deserialize, Serialize}; use std::ops::Range; use std::{collections::BTreeMap, str}; @@ -524,7 +519,7 @@ pub enum AbiValue { }, Integer { sign: bool, - value: i128, + value: String, }, Boolean { value: bool, From c2febc915067ffb05b732f1f514806fc614406a8 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 15:46:02 +0000 Subject: [PATCH 042/123] reverted abi tag error --- .../src/hir/resolution/errors.rs | 7 ------ .../src/hir/resolution/resolver.rs | 23 ------------------- 2 files changed, 30 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs index a41693a4c45..f3907dd46f4 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs @@ -316,13 +316,6 @@ impl From for Diagnostic { diag.add_note("The `#[recursive]` attribute specifies to the backend whether it should use a prover which generates proofs that are friendly for recursive verification in another circuit".to_owned()); diag } - ResolverError::AbiAttributeOusideContract { span } => { - Diagnostic::simple_error( - format!("#[abi(tag)] attributes can only be used in contracts"), - "misplaced #[ab(tag)] attribute".to_string(), - span, - ) - }, ResolverError::LowLevelFunctionOutsideOfStdlib { ident } => Diagnostic::simple_error( "Definition of low-level function outside of standard library".into(), "Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library".into(), diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 8db3d5b4973..17ee1f59209 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -616,18 +616,6 @@ impl<'a> Resolver<'a> { match self.lookup_struct_or_error(path) { Some(struct_type) => { - if !self.in_contract - && self.interner.struct_attributes(&struct_type.borrow().id).iter().any( - |attr| match &attr { - SecondaryAttribute::Abi(_) => true, - _ => false, - }, - ) - { - self.push_err(ResolverError::AbiAttributeOusideContract { - span: struct_type.borrow().name.span(), - }); - } let expected_generic_count = struct_type.borrow().generics.len(); self.verify_generics_count(expected_generic_count, &mut args, span, || { @@ -1175,17 +1163,6 @@ impl<'a> Resolver<'a> { let global_id = self.interner.next_global_id(); let definition = DefinitionKind::Global(global_id); - if !self.in_contract - && let_stmt.attributes.iter().any(|attr| match &attr { - SecondaryAttribute::Abi(_) => true, - _ => false, - }) - { - self.push_err(ResolverError::AbiAttributeOusideContract { - span: let_stmt.pattern.span(), - }); - } - HirStatement::Let(HirLetStatement { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), From 95e5025ed61a4c99eddaba41394143d069185624 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 15:49:11 +0000 Subject: [PATCH 043/123] clippy pass --- .../compiler/noirc_frontend/src/hir/resolution/errors.rs | 2 -- .../compiler/noirc_frontend/src/hir/resolution/resolver.rs | 1 - 2 files changed, 3 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs index f3907dd46f4..3c6c0582292 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs @@ -80,8 +80,6 @@ pub enum ResolverError { NestedSlices { span: Span }, #[error("#[recursive] attribute is only allowed on entry points to a program")] MisplacedRecursiveAttribute { ident: Ident }, - #[error("#[abi(tag)] attribute is only allowed in contracts")] - AbiAttributeOusideContract { span: Span }, #[error("Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library")] LowLevelFunctionOutsideOfStdlib { ident: Ident }, #[error("Dependency cycle found, '{item}' recursively depends on itself: {cycle} ")] diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 17ee1f59209..390bc31d6ba 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -19,7 +19,6 @@ use crate::hir_def::expr::{ }; use crate::hir_def::traits::{Trait, TraitConstraint}; -use crate::macros_api::SecondaryAttribute; use crate::token::{Attributes, FunctionAttribute}; use regex::Regex; use std::collections::{BTreeMap, HashSet}; From f5b158a7bfac936d33c1e4e1e5a46f61e16a097e Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 16:11:35 +0000 Subject: [PATCH 044/123] correct order --- noir/noir-repo/aztec_macros/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index cfe589fb44d..b62ab90bd15 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -129,6 +129,7 @@ fn transform_module(module: &mut SortedModule) -> Result // Apply transformations to the function based on collected attributes if is_private || is_public || is_public_vm { + export_fn_abi(&mut module.types, func)?; transform_function( if is_private { "Private" @@ -143,7 +144,6 @@ fn transform_module(module: &mut SortedModule) -> Result insert_init_check, is_internal, )?; - export_fn_abi(&mut module.types, func)?; has_transformed_module = true; } else if storage_defined && func.def.is_unconstrained { transform_unconstrained(func); From bd89f369d257e3ba8466571d872fc39776583f8a Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 16:15:22 +0000 Subject: [PATCH 045/123] reverted ci changes --- .circleci/config.yml | 2 +- build-system/scripts/setup_env | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d2bc3fdfed6..63a19384132 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -512,7 +512,7 @@ jobs: yarn-project-test: docker: - image: aztecprotocol/alpine-build-image - resource_class: medium + resource_class: small steps: - *checkout - *setup_env diff --git a/build-system/scripts/setup_env b/build-system/scripts/setup_env index 1d4c98421a6..7280711ed1b 100755 --- a/build-system/scripts/setup_env +++ b/build-system/scripts/setup_env @@ -101,7 +101,6 @@ echo export BRANCH=$BRANCH >> $BASH_ENV echo export PULL_REQUEST=$PULL_REQUEST >> $BASH_ENV echo export DRY_DEPLOY=${DRY_DEPLOY:-0} >> $BASH_ENV echo export DOCKER_CLI_HINTS=false >> $BASH_ENV -echo export NODE_OPTIONS="--max-old-space-size=4096" >> $BASH_ENV # We want very strict failures on any failing command, undefined variable, or commands that pipe to other commands. echo set -euo pipefail >> $BASH_ENV From ef571c9aedf2106bfe2b49f47f06f1fc35e44165 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 16:24:44 +0000 Subject: [PATCH 046/123] pr comment --- .../compiler/noirc_driver/src/lib.rs | 72 ++++++++++--------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 3efcbcefd9d..88bed684f16 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -426,38 +426,46 @@ fn compile_contract_inner( let debug_infos: Vec<_> = functions.iter().map(|function| function.debug.clone()).collect(); let file_map = filter_relevant_files(&debug_infos, &context.file_manager); - let mut out_structs = HashMap::new(); - - out_structs.extend(contract.outputs.structs.iter().map(|(tag, structs)| { - let structs = structs - .iter() - .map(|struct_id| { - let typ = context.def_interner.get_struct(*struct_id); - let typ = typ.borrow(); - let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { - (name, AbiType::from_type(context, &typ)) - }); - let path = context.fully_qualified_struct_path(context.root_crate_id(), typ.id); - AbiType::Struct { path, fields } - }) - .collect(); - (tag.to_string(), structs) - })); - - let mut out_globals = HashMap::new(); - - out_globals.extend(contract.outputs.globals.iter().map(|(tag, globals)| { - let globals: Vec = globals - .iter() - .map(|global_id| { - let let_statement = - context.def_interner.get_global_let_statement(*global_id).unwrap(); - let hir_expression = context.def_interner.expression(&let_statement.expression); - value_from_hir_expression(context, hir_expression) - }) - .collect(); - (tag.to_string(), globals) - })); + let out_structs = contract + .outputs + .structs + .into_iter() + .map(|(tag, structs)| { + let structs = structs + .into_iter() + .map(|struct_id| { + let typ = context.def_interner.get_struct(struct_id); + let typ = typ.borrow(); + let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { + (name, AbiType::from_type(context, &typ)) + }); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), typ.id); + AbiType::Struct { path, fields } + }) + .collect(); + (tag.to_string(), structs) + }) + .collect(); + + let out_globals = contract + .outputs + .globals + .iter() + .map(|(tag, globals)| { + let globals: Vec = globals + .iter() + .map(|global_id| { + let let_statement = + context.def_interner.get_global_let_statement(*global_id).unwrap(); + let hir_expression = + context.def_interner.expression(&let_statement.expression); + value_from_hir_expression(context, hir_expression) + }) + .collect(); + (tag.to_string(), globals) + }) + .collect(); Ok(CompiledContract { name: contract.name, From 3b7d7b5612b292939e8ee0cc4a1c43d58a56568e Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 16:28:17 +0000 Subject: [PATCH 047/123] added tuple values --- noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts | 5 +++++ yarn-project/foundation/src/abi/abi.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts index d8d92922f17..c1b4a3794e6 100644 --- a/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts +++ b/noir/noir-repo/compiler/wasm/src/types/noir_artifact.ts @@ -18,6 +18,7 @@ export type AbiValue = | BasicValue<'boolean', boolean> | BasicValue<'string', string> | BasicValue<'array', AbiValue[]> + | TupleValue | IntegerValue | FieldValue | StructValue; @@ -29,6 +30,10 @@ export interface StructValue { fields: TypedStructFieldValue[]; } +export interface TupleValue { + fields: AbiValue[]; +} + export interface FieldValue extends BasicValue<'field', string> { sign: boolean; } diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index fe2db145af0..7c0583065ee 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -20,6 +20,7 @@ export type AbiValue = | BasicValue<'boolean', boolean> | BasicValue<'string', string> | BasicValue<'array', AbiValue[]> + | TupleValue | IntegerValue | FieldValue | StructValue; @@ -31,6 +32,10 @@ export interface StructValue { fields: TypedStructFieldValue[]; } +export interface TupleValue { + fields: AbiValue[]; +} + export interface FieldValue extends BasicValue<'field', string> { sign: boolean; } From ce404c9dddfaf4717ab1b7b5fb47fbf4d97f49b9 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 17:49:00 +0000 Subject: [PATCH 048/123] removed unused import --- noir/noir-repo/compiler/noirc_driver/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 88bed684f16..6aff9a44c94 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -20,7 +20,6 @@ use noirc_frontend::macros_api::MacroProcessor; use noirc_frontend::monomorphization::{monomorphize, monomorphize_debug, MonomorphizationError}; use noirc_frontend::node_interner::FuncId; use noirc_frontend::token::SecondaryAttribute; -use std::collections::HashMap; use std::path::Path; use thiserror::Error; use tracing::info; From b673d1c2e106fb3d841f8e1ce6cdabda584667a4 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 18:16:42 +0000 Subject: [PATCH 049/123] fixed integer conversion --- noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs index 185ed0ac80e..516c8a53cb6 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs @@ -147,7 +147,7 @@ pub(super) fn value_from_hir_expression(context: &Context, expression: HirExpres HirLiteral::Bool(value) => AbiValue::Boolean { value }, HirLiteral::Str(value) => AbiValue::String { value }, HirLiteral::Integer(field, sign) => { - AbiValue::Integer { value: field.to_u128().to_string(), sign } + AbiValue::Integer { value: field.to_string(), sign } } _ => unreachable!("Literal cannot be used in the abi"), }, From fa353be5f02f725a9237feb49005bbd9d672abd6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 18:29:30 +0000 Subject: [PATCH 050/123] fixed constants --- l1-contracts/src/core/libraries/ConstantsGen.sol | 2 +- .../noir-protocol-circuits/crates/types/src/constants.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index c44b9c49087..9f85625842f 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -91,7 +91,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737b; + 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 8186efdf393..3bc9bc759f1 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -131,7 +131,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737b; +global DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index cc9ed3c1471..21cb7024391 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -76,7 +76,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x171e445652faa526fadca4976ab1b68372557d7267c9f0e941ff9709861c737bn; +export const DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From 7185448a1ce542663d4cb0fad1416e527b95cc9a Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 2 Apr 2024 19:16:35 +0000 Subject: [PATCH 051/123] fixed artifact hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 3badc52d19b..4c8f222e866 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x15b5d24099881b8de8e1a905daf5948c3e2c5f1a33f51ddca3fb56c88b753d77"`, + `"0x0e70797a233d08f0dfca59acabba39d089160bddcd47662476659c26eb82d68d"`, ); }); }); From ecd305b31072407831f1cc730174adb1a4df3c3c Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 3 Apr 2024 13:19:20 +0000 Subject: [PATCH 052/123] changed approach --- l1-contracts/test/fixtures/empty_block_0.json | 10 +- l1-contracts/test/fixtures/empty_block_1.json | 14 +-- l1-contracts/test/fixtures/mixed_block_0.json | 16 +-- l1-contracts/test/fixtures/mixed_block_1.json | 20 +-- noir/noir-repo/aztec_macros/src/lib.rs | 5 +- .../compute_note_hash_and_nullifier.rs | 12 +- .../aztec_macros/src/transforms/events.rs | 2 +- .../src/transforms/note_interface.rs | 115 ++++++++++++++---- .../aztec_macros/src/transforms/storage.rs | 2 +- .../aztec_macros/src/utils/hir_utils.rs | 78 ++++++++++-- .../compiler/noirc_driver/src/abi_gen.rs | 11 +- .../src/contract/artifact_hash.test.ts | 2 +- .../src/contract-interface-gen/typescript.ts | 9 +- .../src/__snapshots__/index.test.ts.snap | 22 ++-- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- 17 files changed, 229 insertions(+), 95 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_0.json b/l1-contracts/test/fixtures/empty_block_0.json index a9d3f6147f9..e2f7128433e 100644 --- a/l1-contracts/test/fixtures/empty_block_0.json +++ b/l1-contracts/test/fixtures/empty_block_0.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d", + "archive": "0x1bc3ebdeed80911245f21e0c07dbb3e5936853713d1ef837f6e9a19c64fac35a", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -32,8 +32,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", - "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" + "coinbase": "0x69c997a06905c4d880e78c47b11ba757e9880b29", + "feeRecipient": "0x0ede3b21dc809274a505c87a997e356d51d8273e43af57d801eee09104e5ca7b" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -60,7 +60,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", - "publicInputsHash": "0x002b3718c30855a31bde39a183e0e2fe51bf6de9784b88e35c31497d07dcd6a6" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd130000000010000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000069c997a06905c4d880e78c47b11ba757e9880b290ede3b21dc809274a505c87a997e356d51d8273e43af57d801eee09104e5ca7b", + "publicInputsHash": "0x00c734c4bfff6b94d8591508c792c583c5e1123d06631e056e790e5550e1dec2" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 6a477202b91..a1e7664295c 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -17,7 +17,7 @@ ] }, "block": { - "archive": "0x1205c7cf2bb5c9844379718633439676fb40a25c1a6bc89a36af575447ac8d59", + "archive": "0x223f3cfc84f62ed6fc660080a29fab8361d124e62daf115c6a1a5fef93c14fec", "body": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "txsEffectsHash": "0x008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd5", "decodedHeader": { @@ -30,14 +30,14 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711947351, + "timestamp": 1712150246, "version": 1, - "coinbase": "0x80b3a28fb1dd82c2277913da82f5b6ad77da2f70", - "feeRecipient": "0x14e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187" + "coinbase": "0x69c997a06905c4d880e78c47b11ba757e9880b29", + "feeRecipient": "0x0ede3b21dc809274a505c87a997e356d51d8273e43af57d801eee09104e5ca7b" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d" + "root": "0x1bc3ebdeed80911245f21e0c07dbb3e5936853713d1ef837f6e9a19c64fac35a" }, "stateReference": { "l1ToL2MessageTree": { @@ -60,7 +60,7 @@ } } }, - "header": "0x1d5549c8a791857afe34614c3d6373e9624bc1af3ca8cf594bd3b1f42ddd741d000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e5780b3a28fb1dd82c2277913da82f5b6ad77da2f7014e44a54000bdbd9f376c189b4360fa43e8cb93204ef929ee7397941905f7187", - "publicInputsHash": "0x00c84265f5f882a389cbff59702265345727fecbdf116619286e372c79457de6" + "header": "0x1bc3ebdeed80911245f21e0c07dbb3e5936853713d1ef837f6e9a19c64fac35a000000020000000000000000000000000000000000000000000000000000000000000002008194e3dd375d5d878dcf9546bb5c2c77e165c6b1bef9aead8ceb35c3762bd500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00efcbdb79553ae6863646bf36441755bc344a9a4af335fadc6659594faa43161864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000002000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000002800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d56e669c997a06905c4d880e78c47b11ba757e9880b290ede3b21dc809274a505c87a997e356d51d8273e43af57d801eee09104e5ca7b", + "publicInputsHash": "0x007bf5dbdb33b5df8961ce463b20a3eeea1c2eb6874d6991e351df95fe5b95bd" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 7dfeaff9da6..2a744b8a286 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,23 +34,23 @@ ] }, "block": { - "archive": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b01f71ec5b5c2293fc361459339250a294b05961aefef5446f9572a26bf7cf0418fd3c2bf927113d9803d211429ff46561bfc96b46135d956c3f366be31762015185c9f4e300fdf0973010189346dcafb4d50340190dd6815a1c05e25180c9a25b0e163c23f3e115f0b54a280f5cd4b0401e377115871bacae9d3e8f79515daea2ce3800a7ddc46cb223d560f75e10a6dd0d1b8ce7ecb9122d831e7e1587c4bffeba9b1bcfaa909e601ad63f82b5bd7840000000b00fc41764fe69cf93975e96cb957d6ff5ec259feb6b3c9792bcd566b71606731b97019a17048f88843ad29a1c0b008150225b9971a84fa8bb8d6738862184a8c8df869b288088484aa25645076cbb4b5c155403bf8aa41af248881223c22e2a83d3a574d1faa65d23078f9cb8fadcab32040757bec6481126fb3db1a09fe8be3ff13ba50b46f92cc37def616a1d4880fa208acfb84f20466eda0720fc7de75e1aa22e0a717b7699a4383d877a9b4062e5000000b006992faa8e0e87bafc477560abfd3d13536e49e1a9698e0673218c16ad3d99f82b75af083a982e40188c1d0f13cd7547c25440e6f9b393631848e513421fed037b230467383b109fd9936b2c96b8ee3ba63d8202e94a83c83a7506f2ff7dfc7cd4eca941dd7b70fe66c70cd315c9d1d12fb953696afbcd1290ae46c5af945fa271406f6ed0d4f766c9b1f27ff66a7942112487dc2976780c52dfc84b7263467a32adc00f81ce64ed6792f4fb12fae1f50000021c000000b012856bc6cb2f903f4e43c65586a6036dc65abbb528e60732b54badf61aeac47ff8e21248ec9f211dd7bd2e3cb4c2937d6e318d7fc0097f2de9e871c0077433dca261add840edf43d4c3aed215f23aa4b511f75faa8e8c1adccaa72314f2bcefa25bddaa611733532c0a230fb5d4a8a881ac57cda84f569fa37f0fd838ea7de8da8661328b258a573e442135e025dfd24088f4f98529167da8e41b3ef3092d92224c8b62f609409470e98ecc4b81008b3000000b002a9d921e0aa49de71e8ef2ff25eb658fc2b00034146174f3db9e76f374d22a057af381cc9757c3557a4e7a694dafb74d23cce3d16b2e331297bfd3475fa8073dd2dd94ecb31bee2624ae0d6e529886697340ce115caed2cb325764c98e6729efca24202956eac1f881f36d4615f2e3e271b05c0733226439f3374ae19a0be066a45344f373b1dedffa2a6f31d92c0e91b9c8407e4ba2ee8feba5b573c532fee5e877ce7602c22c8503fe3deebd9eaf3000000b00aa5c18ea087706af3c20e0662ad300ca120635e39a199e67d9ce8a7e8d5c443ab1c2b5c294b478b8d503330599f296731d6e62149cd7defe27dbaf2dfd8acf9ab68c06ec0d27229dac5fa836f608ced2876cd135c089f6cf9128bb434c7bf19cc3dcf5de2dbb6bec17712ef1e1f81122df5b29841a7eb7a1560b4612c6557131fc75448f9a6b1b3828e4058bb2e4bff28889cd7c4dd362d7cd0b53e40ec34a9a5f52aef0ec90b2dec2ea9b16a0d49c40000021c000000b017a3601a7fc9e0e2123491f31e4af06436912455291e7fb88e88a9eb2843e1a8739f5403d68d785d18aff08a9d93c2b9b41909d326df1cfa611c0bae5bd04d79604e8f1171be4defae6bee01a4af1c20afac3a58a723555dbc211cfe81539365683a6f763ec849f0267ebafa8a9effbf0d54c44f6207678a71bd92f66b778d859bac328587829f09e4d36b8d148dfefb25c643a241f9f307ec07f3f41cd09444b28b35d030c95b01d1801adf611910ab000000b0246c17e033e968b057f009fb4d1c4e9d91005f3febd36f16e453615c7c411be42bc3b3496b7f3267ab475aabe180ba6916d8f0a7da1a18e5fe8d00d69e95a0ae9a4d972f027857ef3818898ed9709aa2261cb8ae0a56fabf2e35ee1282952a962ecb0771df5fa41ce6655cf6131a7c982aad41eccb371c76c2f837318d747f19362296ef35dec09966e23af4a8e4caaa0a4c9ba3e87f2672b9ec7e78096913bb7fc66a6bfd2b1671aa87cda1bd9ee867000000b0141ccecf05e04d31964c4c16d2ca0be65047d1152662fe7e0b0e45766b8324258538af3a149a2d5c251be211a4f9863ec17adfcec419cd9f9b2a6eb92396da3349e4ad43bc7dbb9fe3d92fb081bb95e96c4352f277bd3f6e0d6348b3daebcb3151e77944022d27063da75d4fb9115f4000adeaa479e2eaed678af7c36f3f42257d9bd241c51c7ec0d0a0d641a77d8a8a2ba505403df2f461774b74098726ad5b7b085e2bb37a89a1414ac944c11eb21d0000021c000000b0164a956fd938e14f48f2f36912f3cf2e56c8df5d3330fad09aca62426e38adc76c4fdf5728e954b32b181c215f585e30ed87bb3a0a6dbeb99e81872aec0acd9ff1cbacc3943f5939283910cf1cd5d0552df75c09315e1051679c5d458851d4f301f5ce15e4be094340259538242584561403ec2fc3c921cf80f8b5c0d0393da393739ed85f9554e00504e3e7793290df07fe8cc3decc120b4e504b3010429271a4ae030f8a21539576e38557cd9c9744000000b00c34ddf5e80e8ce04734bafeb10813e31b1aed5d8dc38ff49cf7d4b59a5e052592cfd188f63232bef9c36b4fadd1800361b6ac9ec5c676812ec432d9b7e46300b72dc73cc634b19f55afba7fda63054bc6965a0cc74af7b322b37db0d93ffe4b61975bd37bdbcf19863e926fd2b59f2e1585ca5589aed4852f3cea64cd12233566d817be0baf696ebfe96c4fc68a253319be781154f53eb2c6b337d9cfd8b859ea09b8765a664668c4d1a55cabbc9b84000000b020366de2612f4ffe609e02136635f40022efbcbb1a6cc0db965c5c57b02bedf1346bb04008bae13bd13506d680df1b4c7230fcd6fc5661ca55e78abd28f2f6513aa7463dfc2baaf636b94764cca2e757e10cce10c57558e920a6c63f991098552c03bbc603ed7de68f426143ec402a4803527c2194e8ef851ab3ab28dd1dbd40784f0cd6a72973680bfb6dd07eaabeca2c3dc34e34ebef2e1998256210ea39b693219346c68a338a86dbb753c6cfb6bb0000021c000000b0047be4b53244ae6eb70cdf66f3363dd59edf718a3ae2afb30b1b0fd79d8d07bd30038d4ef8184cd0fed0a391d01c488c9c666d42c6a478e3d5f6908996cf1b81670011df255e7a5bea5dddb70d150e2e7d51ba1ff807c78b186621ad371b747b2c7eb19c2317d1efcfd555f763fc37bd19ea4388ebc7a20142aac995169426b0d1717ee1a5ae39019df688fdca28390820217b3ca5b30ec8a33b2d2e39bccb98392dfe18c818eeeadca5d0b9b4630b68000000b02ff020b10d16a84718fc1d9a16d1611b74ff473e90ca72f78f19e846ac173a2700efc07d3d085ec8f2de0afdfd2c80d2a1f98b2ab48d676a96d1e82f664d1f39a005d68be1b6b2a3bba429f593e012db4175b99dfc135371c80fc483b1024649091e02d4e5a62deac2e296d0c123cb51119065c09b46487e9e4448beefce42e97c4e7836420d29f5a4b0c59898081ed725087b16a485e4a0fa95ca9e15bc24ac82aab81f674e2075ee52a2f4bdd46234000000b018e0a494e75c22a724e72adaabed4a8c375a7a9b71f8fcb14a27d64a13ae45242a249f900c152bdf9696638a60cb7ed9783425b6b302776cd2e10c1c6d747dc405e5d3ff558961d9f63be8c616a80ac913a3ffa01927e04cfc3445011fdc5069e106da153e42375c9fc3bb66c1b408252792becf13c65943918b3c8d7c83fb10cfd8578c62e4c69853c0ff176fc32413187a16d8a753f127859aad3d993504b8121cc6dda0e3bc684e5cd201700bbed70000021c000000b02febda87d1e2e2401696e10eb213125fcba87abf8b680204fd7bff8b32c71a5f56f7e598aa697e5a95cef91ed9771ceaa04d82267409c4a529c5cb0fe99bfb6bcbb3f76291e050a7788cc8058a97f55d54dcfb5ea0279c01a2a0db1ecdb6fc5a06bb63d0f3813d479facf2121d40eca80f2346670675c74ef669a61b589f7e647f30d32a3b6ac1ba40b82d586b3dade4222d0580af2ce197dbd7355677a6edd46ae8efc7cc44de690a93a051f504822f000000b02aea775138060b0c09e5208ea1183e4324c0e321b02f1ecf61d462e0a930fa7dec246509829b729b2c663119f180f8a58d2cd328d3369811679d59f91016de03c5863052544c3fcbf2382382c757d304ee6a6b990555f6ec462e6c6d503546b3dd349bd1a68891992bb958e201ef93381747f6ee8c630bc0292bbeef2a1739b0a0e368ae042c7f185f2811bc592e10151e2d43d2e1fc9881348db7c6a254f86a19cdbed01d28ce85bf3ed251c8902d57000000b018c9d03b3298835fc3c6dff2afa525df8a912ca2e44dcddf320a728126eece0ababf5164e538c6eecec7305acf6cef821063a1f73dfa1e6ca41ca7a9221cb24f559346485031f5d6de08032e2f25996a370e92dc6b46e7eeb0899760e65036f70ea37807ead3b3392266494bf81c42ac1e5d3a69926e90776f025565cff8dee508b8c539bae4c2ea6458825bcfa4401c0bb66e1285abeb98143e1919d7f40cf443e5fa542a687af2d9246d4447b238020000021c000000b02e1e113f3668dff9f9ed9b65109fc018e370f61face03d88015979cc9c825a408abe73e2b8eb8579115c2951dcd0c11625a3e8917fec4d9a9b415032893556380c051efb95550fb1f590768bd771e88b5f6f04a677f238c49b0f0651d90215607dbc25ae32e90d82e4dbc1e9cb3c50c92172503d8dda5d40637c0b78f5ecbaa9fcebe46c1b8171191e187ee43669da1b22c342109142593177ab6d4f5b1b93da531786634fb861d38e6669bea3520db4000000b01f1ab1803275282016a5a185328f562f53d17a83045a1bd60a43c5fe55b904d24355cad459502816e88c27111fc44243c75cce161806d49f9cf67d80e27919365fda545cc54273837d1929500d00ea8c0f81a3780398882a86120fa53e3ef22bfc99b621e6700c332dd840598fad07dd11fcb07d928f3d532aebaa81d7109ac127b1921b4d1040109b030ddd788ec42a223bd31f36fbaac2d98f60fbf7f71f9de3485ad5d344bbe94060ba797b86c6a3000000b02bf21f685b7658a04d5b0cb74d626a0d36be5bc37db7a8d0b160b02ae5f25b674072722105b9e06c9d4d93f50c9e5fdbeb0545233da41e609075a766833ee4f08297c452f8fd881ff6fc6ff357a66153ab9dc682a88f1bbe130b39462f9c9362e5132536c43aa9403ab808d549ff05e7207b59921e4d811e0fc56a377d0a3e99988ccd3d9eb9c9b52b9f70ca03e18443234d67a9b835db64964e8b2a094f1c50f0497b300355061103028c5089865f010000021c000000b0047f78f42e568a04eaa697b408881d46ab979198f4ed2cb4f2d0731c8f58ff5a37456caaf633ee17d3e5a9750ce3d2cb47074920e17bf44c262b56c66db0cf02687f3b4133b0570efc476ba938e3d571e2a7287b13e09da43dd13595b7ddd23c83b87a10ba85b75c3d0532a910b25c5922adbdace0a148da2e5e6c6e261ca89c0010ed8adcb7cd873e27e8a3cf6f0ed301e72c4fcc03341c32bbd52c3c372fc96f1c5507b669e1c6e3d037dfd8d6f416000000b003d1fcedfd4259c7ffb3c838f4da9e22d229f46e68b612ccb1fbb1571c55ff234184b5f125cceafc068d6d3f70587827170a59478bdd1c747c9d928fa0e2d7bdda47dfdd75ea0144981f3569ad0c6875d89887928bc9eeed6e0f0660010a51337d47905b40c2747e3e251ec4a27e69800765a947da8a3bed51574d6338d3b3aaa70ff6add8b842a3c2ae88afd491363626ff44afead6913ba84af807864ae1704e87347552d444483ff5658416da3265000000b029721b57407b143c9085a2247b4823cbba318f4b71b92c14eb92b93632baa54b68a0d8cfa025ba205e2546c77913427e15cbbed4515c18ce7ec234d8d94e7d1fc399ae1f5e1e48761929434693de8867d5716bc2445f1af7d20839486b7eb3915b31e2f4e1b225e560c866142d53092800910bcaaf6ebdc588c9de3ee6f07693901bc625f0382cab06e61b5d3474e12b0ef24352b719cbc0f66837f86307550cb2458483a6d4092ded40c04a3b435c8400000d9a000000fd0000008a14e4bb55508548af6fedf5e8ba390bef413a23a633faf7fc0c8ca291521cd03e2dd4684e00000062edd557ae581443d7165335c93b56341a0931f14e658dabd73ab19cdd6fa8502f3900307a22387ddbde78542f8d33e4aff1a8af5a0cf76727cc3a08ed0e7cfa702034cf0bd7f687c16834db49719ef3a77fc8f57f211fa7a24466f1430951779116a90000006b1b051eedf94769007221082fbd567af6a30a9654dbc8aa8fabd02da3547a10afc3fed88f0000004371d086ae9f21d0208c8a2297f97f2abc2c9483aa85120354ce43642976dd76db521fc6a138c9132742e7d81eb5020483350523ed36497b428747b30fadc6c1edc02eba000001900000009e2f1de42d2e569e395248491d6dcf6a5dd9d2dcfb92704af7cba08bf45593cea012ada0c5000000766e277464dd5995d49353ffcc83d502dc8e9361bcbb7ac9882a62b9c0f1ac2201f3a6b319ed11788c2742ca18bf1973d374695c245a690589a25556a99d168d51534cc2f349462af3ed3e14330f5be06a591a875a4db26f2fc91c1e728d4b70ad7fba17a5830c42674acccbd6d2f38fe9a14c7bd501ab000000ea16792974f765c3ca7abf1b7b38c661aba42a7c1323317707545848ac22a755f63016eacd000000c25a19525dc82a4550515c1e02e2422b9f87e9298fafc5fc5615704e2a24b67d4ba7ee37e4d6028e957d17343e63885d29337e53b1a48f008379690985e45500661e600fcafb5c280a4112674e3263f031fe5ba8cfeda3808a92b93ee7579d44570385ea88993d63dab382574fb6683413cd87f2928462e916e71337446a6645d15498aa8392c2bc685099fb3241d979ab59bbc5abe191500e681c2d05c2d41cd368cb08fc9e6eb43927d78602dbdf8382de06140b26a1735ced26b6815370ac93524c000000f80000007d1c58d8ae23d6d76704625d9e91c769bcd48dbf55292c554651bfe46915b29eae899748750000005562d3909647bf97ee3229b0618515231341ca7421cf35a46ccbe80f1c5e0ed8c4fa68ea826ab23fe45b7df38e1cd38d70187eed6f6be4b6f6db6f7b66dc11007b33982172989e4a0b83c527557c602fd27cb7a4f45e0000007315fc948fb50df693238eba94a6b33b055932edf6ba952dab865bed8a57cd908edd5f62580000004b22be4d90edc016c12fb3f95119cc259c1d7620188ad16dd9e6e780e867ae272392873f9294c212e0dd1981ee1548e13a4e060c24403e41f07c29d7dedca9eff7a608ada7726ef410407540000001ae0000008209ee09a0f665173062b636cec323de3d22c4ecb07ae6215ac808cc7828ffa875933bd6610000005a28844857a2329e275d6e9fcf167524fdf015ff8c9314fb3bfa1fd803133c1994dea11144c125784133df01d584c466a2b16a9986d2088c147fcc2207c1e6def853caab102a71932d5decd159fedea1d8fc1a9e6f640376c234670000012425a95095ed3d30268b97aa1e00593510e2b4eb5d86677f92eefdcd10cf0a83753778fbbe000000fca8e2b33cce7f99f20fedca455ccb4187f393a826df51fdb518a8db364033e743c12244143ba7e68fc93d176402f533654797656da98c0a3528582995defb952831ea96517b41b655e0768e8d9d3b9facdda5b69653300d5d6f30a2b5e607c699b38dc7027aa9274acdb8f8eebeda77255e2eb0c70e5f1dccdb882441a4ecace44cc01712c20b21c73ebb680bb6c07daa8f212e4c50cf636e5fbc702eb1b8089537cfbfbd357a4e3c4f8da430518a20f25addefa923230385a1475178e28d148485843e6e714cad6697b2e9e25c4245dbd7de2254c21c52f0ca479c97dd81192bf600bc84139bf4fc37f8cadc986f9db9f3a9bb8233014f61dcef2cba000001bf0000008e18ad7f35988617e31647b265dbe068a65972271ece31d8df4a74b6a536febdd9f1145bf10000006676bb18fbe613bf104a898d2f6e310fb194283edde37e996c7c65a1de82383d5b0d844ac0fa37fde0777b3a41deb55dbe2358e2f6a201f8531863cc7193a53f60a488bae03d1954e1aaae7e9b43fc7325c7b42f98f6f97ca9d21948b974f45de165119baebe3700000129118cae333ff5fee1363c783c57703820d89cd1e93c2b55e7c6b6b689b17a7d187f75d4bc000001010e169550eb01147ebe2749f4305d445cfc71f9cfd37aebe2999ebf4d490a6f2479da4d753f6ec034ad7b28f71c29577782c329d3e8649b6f9cd5232be7106c16b1674d27d4c34b36eca713f35ccdd9e95b7f9adac46e3b22117249ebfbd24b0b1a0c61477113d9250b2c98e762e5189bf0a00229799ef776b7f7098f6f69bd19facd503e3d3f888b715fe1fadb2949ec0d1830d5f296e288bb9585f3404a593577c1a835241238bc9c0b3a23dcb6fccbc44dc089ad5c55d814cd3f249c07c130003227c257ab5fd5523e81ea03490e53ac3d46556ac94c4eb19e710e02e7ba82406af163c0ae214b50b4dded70c926efc39e20870321e571f0ecdc26c8bb6f74fe00000158000001030c676d7453503184a38376ae2b92b2f6fd6be741c328660ad8bff40375eac3c0001dc9ff000000dbe41a7ede72b31647886ee50aae0e29fe774ff6f429fd1b35ac81707f9b435a872c145aada39345fe1c77d9c3678e30f1668913b1517c75162cfc9b923c72d0e9c877a8aafe48a2cc05100d43198cff869f6bd4e793e73a089c0a78a843e79047e2f96cad714ef689cbdf41ea2dcc4248f22141b05ceaa194d4b97b49f7769dc80d53e7d9bd16680d87e81307cca5df2f2f8eee88e3432f8c2a67f9d64d507f0698e429336ea5f0d040955d90fedecce1cebce2571491cd2c5bf19493a436915b4e3774da01f1110decdda95d2766b1d6b3b3b2b63cd8e709ac6e010000004d2876c52e75b5df7c71064ee4e9a6b2319c5f36398fc0f9fb7e56b082ee9e725c02e3e02800000025690dd29ab3aab3e7e81e808f7776f6f3f45ce74bb95d6f086a6c92f4ff715fa61e5875f4d1000000f4000000481301f0c83c8546b3ea5e84865c1df6841479930e07ad1df9e18d373f16b27cb94c7bfbf2000000207dd3586549c75597d74b22c6a9b0777788a942542d46a28ee5300de55cf606a7000000a40d6f8188fbeb65a0bf8b2f94efa1c78fd05d818a656e555aa724598ac6256dce871e82420000007c82b760d3102260f7bc59daea11a182a05ad092c94db0754019990293ab9e45b1410b8e0cad0a427953654bb3c3fd5453e64b606661d51dca4b7a06156b15344bcd9ddd658afb825befc5d4a152024d07839313caaef488027bede19410bfc393abdb23f84274e9d016a357b1aef9bd47d07615432f6a1dc613884b240000014500000060060832938390547bc49e151ec9761fa5e01093d00726773a19cbe6af345b29006f144249000000382a808fef6d2396ec6cd41df2a36b4f843c0aae631ac996bd093124caf82fe3764f89c22f14ca3089ed8824167153e56a2a08a9829a5b9998000000dd10db2b74154f8a988ba3f1558bcfcccc82012f008ce4910a14261ce37797547656a3bee3000000b5295af43c6c9dac139d1a2d9974008ed63445ddd76f9b3046b68a294eae2baaaa72da6d5bf59c37682449b403fefe7ca58f42ebd329ac88f3f5eac3cf786e85aa8659c6713d9510d5b4366358c413359c6d921a43b4277d1ebe6ea4860ccecc41ad5a06eb80fe6d330e05fdfadb46313178b9f832ec29fe7961f63ef468f985bfcadfef89c950db8fe68165e8a3deeb156286e38af04f6d1e94937a956854c515f543058950f5f1a5a4b36fe2454567e978a96fa747000000920000003923f379e745dd7994529e21a7107781543ac240e6439af3e547006361edf0cdbc91d0528a0000001178009f83577d4378d43b68a0c2abded1ec00000051194395a61083e52831efef6a68261b5aca3cb86cae1c906172259ec5c01d2aec76389bcd00000029262adbb3f8b818c9b9799af8b9e99d8cee2e9f6e179e36e0354b7891f26f5797570d42a962b309463d000000ce0000003e2bc2a25a813eaa0d2f24189aa3dbb526bc5b680f1a79ee3905d50e730134de5f4fdc89d700000016ba61167c533f6f26c09e4d9390fe28b26233475a9069000000882a2e803ae31dafc0dfd4daacf30276f7e184aec66a5319917f13170725e8c763a2af2a6e000000600352d4e88df8a380a4ba9c68ba848030d5099439fb66df0ac17ca6c5f68da43f5816ea472149b5bacfabb3e9cc82dda4e12066390e5f01eb9924a1fb9e5b7c075793766b7e2889c1a9e7940f15d401f395ab4fa5e72f09a42cb37cb00a3e8c8a0000018b00000093298bba78d539a052eda2c38d8dd17fd2fae3c824991927a6bf3edd78a5db52dac0122c6d0000006bba3b5a19636cee8a61fe116f42276e74e070eb11a1a537a5e689a4398a04a4d83fb1deb938882f4ea68a0383133d2f340398aa99083ecea33396e6db8e47a71e6b25fafb3721f5a8024f4a7cdbd6dae8fbfcb83080db84d27261d7af92e4fbc6b9a47d2518816078fbe3fe000000f02b1d59d54969d8b5459691811ddab7d008239004023f123ad421b906fbad2759a7a0c9bb000000c82524f4d441fbf7c018ad904a9c6d30f26bfdd622b4f23d2b1eb1f7ab8dc2fa92ddee106b561344cfd5e7636ba2a11e56b0da1bdfff171a9ffe65c78423f31c457c5532ff84035109d62aac21e465f5f8e15269464db648c1c075339f192119b3c2f3cf4ff62542d02d90ebc571ded46faed47ef2cc720f819d2bce1bd3fbb51c96f96b73a52626b8d94ef0f39092144ac9a2279ddca4e8fd1c4a87382170129dbe69b299f15020715760d63b87c0e8acb1a27de0baa8ae756cebc265ddb8904a880fb32eecc690f400380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b0081d7e95baf6d35c3402f656b0a6d7f1805469bd1be8b0a0681d2af278728217ccc4ca1fb667ae515ef0ac6f7096e58a61ccc4b5b2a68270ee8b14e4063a0068658c52ef3e0842df098d0bbcf3e2aa96894f3fa069d772d66e557b55d7cc44dd19fb8c31791dcabca9f53d62cb8ff9a0210b9b9db3f036e8562fe750f8113cd361894c7327bddab3f4d20a8b0ae8c83a2e8e9a951d2bea777287a3217f85507e588e168e48f895f892a03390a3147f18000000b011a92c6215f833d00473fb90336a1a73868c088266f55c84eecc99738a40684a5c258512af24891249f8c6b89ad1a81b1f3611f9bd4964916b44e19088be1ad1e76e270033b3b2a03720a59d80214101094c15dfab9ee2e461d0765a5915989ca9aca18e8ecd332932f1d50d31c3ea9528bbee04720290b556c161a901c93d7754a22e71aeb68f080886c687c9a572252747d59b6424857d8fd767856bec527173b0bfc8b41dd38be7b78df5538a7552000000b011a65f3842ffec616b990f39fa6617a520ecee304a59d8af6a885786a03e4ac105447a8eeb41cc1987a476d7d5fc9c89c958a6a5a68584b7f03a04dd240e7947dc72f2d5a3b0ad0888d095e1db065c4cb25c8d7617a7e6037ab6c14fbd98c521690e5e9011aeb7e55439518b825c7f522cc8f976fa86cdebe139f891ef0abca66bb9a3318f10be0bb81039361ac2256a2ba93e045077c74d4aebf58b2a8bb0ef4b4366f5aa19bb08ac85075f5036c3770000021c000000b01b3a77ed158b4b85e6ab1fab8946059b88f504c6dbf7894b67b8b5dc9b288291c65ab85fff9e053ae5703da171e5a4e172311d0c087a2aaec14f3f4776fa63b0eb80709fc4c4cfda15ea36ff3a6f10b3dda7a07421f9338a8e5a1f33ed4faba985ec8bd210e7d901c979b3d44f8f3f0b1ddaf796385b9554b022d18a8afdc638d1110848222d8c43f384b0488e7f30612b122418fe30e00d3580ce5d8552bf93ec207814b3f5659268186461c91bbd96000000b02b1a31f9c13bfe9514e79c9f038774fa65daf095d813904de66856825ed4704287150f260eb49c042385325ef3720a7d8818ae59d0cea2cdc56d41ac38e61f274bd66cfe0e923a6a244b2ced547d99d7df778796cff97dfb12dfe8f528d73da27bbb737c7394a6e7e072b59aeccfe6311b7d69a11dda3aac926e46a6f5f059a2788463dfd6280ad9a3f4da5d6215e818243af1f51e1c2ac2705562c48e6848e3776661262abf1053266b18b2cffa1a68000000b025bbaefbf21703a36a7797455d2ba86fe049a58eeeade8c98126b47ce00e9c77841dcded5ac592ed87a8f34ae597fbc202ad95a3822173a4bb0c33d346fe45da25d840fce471154038ff30c453c230627ac09dc776c20d09bd07b693f5f43f080ce436dea05b2278a5c2cf7d9ca0e9382fad0465fddf75e6f58a9e0ae2385486cb7face0bc7f5f919a8dc5accd7d81030672b6c9bac08e63faffe2d40b4755413ad4d7fe0834867f46b277f72edeadba0000021c000000b00369a714bae914a042de119791b8df8159a22e6c1e2aedcf0f0e64730b91a6ea017c03d6f0ab19d7e2f865d17312ae958a72897936f0ae6b8ece7cfeccfdd751610719bf01f5336e79c7655d6e44db3f0d82e2f017125a1d2307e3161a24b74e865f4152f9221664c2a0661d13126672231ffcf8858c5d83e59a1a0ab4ee693175ffd7925533af6079fb04fdcb57e49e20e3299b69b71e43752d2a3285ab1114934080ed70771e3fe189a9a807250d13000000b01c3f8c04f6166352650ced76aa023e43f7fc80db0af854a5af64c69fde16595e6c6ccfb7d23337d8eb6d8d83fa52a768fae74656a74f1dd7e33bc5ff19d35533bc31d520aad74a5fca680a56664107e5115c281022c27034ff3c6426085bde04351b49a6dc8bad501fb024777e53e3b00195b3123d7c0996f42ffa35ef5f4ed3e2d340148e51d55809917713c88332770bf561425133a86d6b168568cfc9cd619f2130c620a21919d48c71d4faed437a000000b0043e8c896b9827baec0eaf62d3891c1660e7d0fa1d28aed67b579dd29954d190a124c0d6cdf80d22e435c10e72d0e68b03eaf0b27bbf83752cb21386f20eb88d3468e70c0f27584b8006089500add6c8c22302167549575cadde664de9366a2985f75d726f0ebc93c7b6f49ceb8cad13011c489257a530398c2091cab006ccfca42d3a63472a58622f4b15ff6fe6c2bd045f91ed3143b60ac5d2e1c90664270c277a08ddc9ec053b6f4905a1833c4f910000021c000000b00dae24c6dbb8d4115e357f3df89c6d33dbd672110d1106d77651d24b4b0aa6a2d309c1bbe859b8c40915f315d269280eba2a2b838b6e47245c384f861f3a1855dffb53129e39e31ce5b77c838ad084d7f98e47e7600b4ca07169f6d5110e017748da2e717b8c8a987af1a14b6ea394222f73b54e3c50c8d496c221be05e2abb5f3e9e9f0d80d397856081452f8eac5522f1b22ed8d9ead851f376968227419da0cc1beebc0f3962175b82fd2611f7009000000b0255c6251b5d59455a2c63fe2418dd6dec026f3ba7d6f9a98bb574792255a17c1e03796b54ba67fd1c5b3a5758e0a019269a3a61b5be316c7c52269732962eaa3340d17817a58ae8da38e7a847d7edb5345ca32f9fb890e48764f93d6b7da5f9a59cd6ee8b77bbb5e0e74d22764c77893140b0df5d0c529e1580bfb198950154736716592cdd4442e83bdcfecf284bd7f28edb3e792a6cddd80835345c8a142308850fcf94a1fde7c2e3d476c82658ca3000000b00cdcd79b88eda22ccdf97bedb0db0c802befb672d912b6413beaf08391d41f28a9b2a3822cc4114c824bbbde432659a9731377936c3be261c466dc6bc46f9ba536f3809a37c75bc2e04dd4990b74da29c94758849aca76a33b6301fbadf2de6ace6189c77214b481ba62a71b6a4f288f0bc5adcee6575311bc0a818c502f507c03a2ba695ef3746618e3751841e90c7901d11903dbab5ef02a6710b6e1a54e72b88cc449402f4ef081f6d3fc1c1354290000021c000000b00acd54425e1606dfe95705bedc4ffc47ba3c934bb7fb26bc22e843848e542fc07c24587c58c2d44e84868da47a17e5620e742a33a4de4d195dd05c551d82943473b7f31706945ccfbf9ab8d63c52f554ed4edd221f48d024c0d5f7ad5ec8c79fca0a027bf845e5f4bba1f762c101a1de0e979644124215dddb7f8b48a65fc5120df079b0345268359c9671d620f1e0532826455dcfa58d76cfd3a2f6919a0c082e48f35bd9abae1587c0eb40a28482c3000000b0094af06a522ba2ad0bcfe5df418346366f72c4d1c2402a0631198c76ea476d234998db4e75b70add9fb0298da3d36339f9a2f07a5a50bf59b15185f8fcb66117d28c00577cf35f5e7d878ebcd01603499d837aa50289e142359eaadffdea829a671627a48f5ca8af4fa5976c76ab90961c248d1b9aab3fe3e51f1b21cadb2dc57984fdc3ef9b192711468f70ae2acb872fe0754b279d9065043b0204b1c3a7aec40d71a65179085344917c36102c0639000000b0214c9e9c4721f6b36e811b7696f70e85b52291a7274d6c86226d171f4cbfa2b24fd1edc2aea14b690cdb3054c9796b0a3492ae798e000b5eb5cf6706a2fa3dcc1d64a630933d2354878d1ed4bd027b551599398d901dabb9da3c4b78cc36e32f740a681e18ef71f6b14015ea75acb6d3015562d42887051a1b6af550117eb739a9913743fa0e017c4ab53e15f22066f621d582b3b334885ed6b36dc0e500ec9cad34c4d3afef4ba877e58d5528fdfbd40000021c000000b026f3bc295281f2d12fbda88e7ec474b658f6dac186c03cc4fe7e08aac14e29eca8efcfc3cbd92961c22a007ca72d6ededdd1a3105caf3fedb449e39c4e3b5381f118c932b6c0be72c91ff7da56490f3536439f650a8d0c6951e94d6cd930439fe3fc568076f08d0914eaca89b79f289a0eb12379446111bc04944dd204f1a24bc137fa1d05c0da90ff391045880385b21716be8c1edbfc5d5c55e125b4d10560cdc93a006c1a76981f8f44ea28187062000000b010edc111750677293d058f04fc858849008e22e6781bb40e6edf262f6e2fedf3c7a15a91c33d882473479c928f05903ec7f72a6064c09fd7cf3029b66e15937daf90560cd18fed25e57cb2eef2b68b42a1fd026032757dd22d22abc4654ee0ab3e6cef413f3372ea74a3b42c23a2109b0dc4d8e803e7c7871436e4605b9ab1c018e61407c47672bd96d4f989b270ad630df2f474e2d7e52cb73c8232acf2869bc25dde7571b40897ae9eb7ebeab92e6e000000b0175b2cda1e5eabf4e8dafc2cd27002d06da5fa46c02834c66b39812550383a45c292c768b7fbba9202668eede0e055b7ab964f47047e069d96fb84cf4923c302e6ccf707008a708cef74a1b7b2db25d1f2165e2b78c0d4cbe22989ed5ec41b2bb878c3fd40eb3720bb171a64c839fa4a1f65cd6c6fda6df164150bdbed695133bd88a4e6970e84e153cfb34b10ad31cb131c7e4049026b2e140ab5a7b76a436c1efc6f98843386874b820691dbd1aebe0000021c000000b0005436c2f8dfbf1820cfa2fcfa48424ce773a82a01a9701af93487cb3157c4a48577189f62ab400f20a82c9540a1ca5dbd9d849e14b25fc7835466f6f5c73e32de9aff35a4a938cdb9962f96f63d7713dfc66a3aa82791eec7cc88f7f6f9781cae40b00cc56f802509b7d1c1922dc1b0287b0b2a6e0911f1811f6ae1ccc3c3f1b40cb207b2628c3f16bf2773c7df56450a750c74cad0234895f7d70f4d60cf44fa32acbfa71725b563a5ca6daa6cd741000000b020cb827401c97e77f0d1c93510df02aeb50e47e5b203628054357b2825ae05d56e14836994dc6c390ad425e73eb4717110f587c81826602086b10a0be5dfe3706b7ca9d20596a87802549c0d3a49e31bcbe282260dce8d8b6b598b9e89fa543819427e6c48ace3ac8305c3f582dbf38c18c8fee398a5673f5f7353d3ae36924b5004ac5a2a650cb77b1125f4849263aa07d1afc4418141ed80595e701ab72da97fadfeb3b2aa67210b39d0469dc70f6d000000b02051863b5d2559575135c3590bbe0eeb6fb3baf42266990d1f8598b1500e8362ae0a59f53a464348f1130758b7973de948b0dddc3e0c4f5284d63692b6ec99c67dbd04b29feec4f03be003a69152f8f419bb51855bb471009db513684775d5a6341b86a9a4e5d945b4c17830f350509626846e262fe259e255e93517961a9659511d59cb5c6d15758286212b324a544819789c5ae9c8e2518d7b2ae26db97f31e4a59815828e047cc7cbee0cf31bbde50000021c000000b012ebfa9306b78c99bee2a0cb69b4997fd18fb7fd0bc5fdcffe26d5c26b3334fcce327343f27e8cde1754c20eca86b8ffe4ad5ead132a3fca5dda3a40bc48c984d2b4744a6b2db0704b9b9c01deda09a43a9f9d231d98cd049dde5fbb5b60ee5f3a186f8e6e94aa8ade39b5639d8628f0190c9b62a7a325e7f0ac8b9101716bf3120521ffb110a3203d7eec873e38a4c01f2bb6759987fb34fb05d3dd4a6563b74f816271117cd7f84dbfb1a3bafc0cc5000000b0229389c85158bf3b5feca720c7708b2fcc5b1431d3d328ee4bd89ada7e6222e1b836c70dede217cd688f18014887f7224d923468d90b341f1ca0546f0efdf6ce716bda7642faa79bcf6572bdb56dd2449c7bf5afa33939843a8ed11eb27c8bbee97b4d259ae68272b72cbfb4552dc6171d8cf90f374e1ba72907a5ac68956b3fb30bbce63947035378aca7d0a3675ae5172936063cf3bfe2ecc4dc1d0088378e3f1796163d18eec7284c374ef571ab08000000b0131743e37bdd3c80ef7b881ec7e0ade15c324c2bb69d1c0d17cdd0d449b3f7cdafd3eb9b7030aaa4201a5eeb89546d183240bd058628d9857c7054f129eb8604d25365a2b501edf7ad58e8f0cb120446486711cc34843214145e694268c6d953d72ae0115f91aba6af3aa44ab584360728a248040512a5208d1b492018e57fb1e9a81db45afb9e0e56cda199d61edf2229eac6a92b03dea4571dd12e774cea2925e055711538f5bedbe48fc286f5272d00000f2e00000172000001152e7e194cdea78c6420f903a92bf0ede289727a4c560a2f90046641e0684972c90b8e23c5000000edac28b03abd7ca5c7b19ab6d757a08606c47e6d71d0316b15b1b17471d8dfad73744f124a0a1c17e9dc0f1d4a4699e20195f4e48fd7e83ab01dccf9b80aad5f02718c58f4e368b1cb1a63a3e5f5a853d65f159e23ee318528d9f791e37e4273f651bb7a6e803aa57603e67aca93ee063118aff19a283d8bd4d3892b5ad005be3d31a3cf7ed1d6de8f23b255f26699ddda343e9be1fbdad951ad297bb6872787b7312851c07c819360f44f17b9a54ee7d6340e1959bde5ce141a02214b1453e9949501d83284ecd0e8aa7e57631f63132ad8f4e7392aa61e4af4f5ff01cfb9ee34fae2456daa3bc545af5593b25400000055175868229d59afbab6447f6aa4c96cbf77945531ad6124a5bd524d0d7bd9ad880b95230b0000002d8db2fe5b4df329bac10df6eac0bf9c85c00c8b1d30ac32bbc3f0ffac8ff6ac1540140eda280f71e401fcc4db02000001930000011303b82da1d9255a3b380af207b070d31dc1ef8194634a56ae5316ab5559322abb65eae5c7000000ebe15a8e1bd2792e62f244bcca85aaf907b418edb4255914912068126fb7cb03c4578cd7e3c97988f1aae76a995f3132d65f9d48539479c6c1fde14031fa1f01b9ec0d04c573becaa843f861972ca7767cbb88cf37ea6192798eefc6920264263eccaa7f8ff28f45697ce091a255055c17c2289b82945c3b991ece66550d8388b659df12e9c5d2b486cd61cc226cee0568992c3d2fddf921a56f0f677d7d863965737f3609f47ac77ca27f52dd865b7cb3efd644025963d6b1d1f8bfd5974c48bc78bdf1398a07ffdb3da15fd857de7c4d10a0f8fc639c1df074dcd3da55badf73eeb6378e1ebecd765b07bc000000781989d82dcad7ae0c61f3b8206f934de08e36a7919f75c7e9cd1d338cf77931c8110b207700000050721b8f7a89de5e8c368f6d2202edc39045db8c2982f716f457c0137c038c21828af8a6a23c599dba974784ba28c2af414f5dc8acb9d8a7603d301f4fcda4eb82717f14e2a414dc1c4075df010b95ca5f0000012f000000331300b8ffc9a135f05a78750d599b64775305f09813bccc90ba56a0b4ecc6e03711086e5e0000000bcc93af235c347f1eb02996000000f40de69571e5c6fb514ecdbf14e09ceb66be3d226ce3d4e64e04943de35196382309d820d5000000cc5fb1d1382ccb5cd5f9b3a8d232685d4874a5e24563e4c658bffa16f4a9a28f7fb4510475fe6407a830a166b912c7e496abc911bde0fd53ff3a22043a806bc61545bed97a2e2ba206bd9add68e27733beb0385813040c9e60498a1dc091a0498aaf358280ec486fe7ea979e3beb501f7ccd118a9f952a789809a26f3abb2a5db6b06e56d51231225e992e5141fcd563c87e985b5f908fd4a86225bb377e3dfbb1dd2a0b7099217f84af856b3bb38360cb4635f5e3e175c66ed5202648cdd4927e50f0e03a1ef94e80759ce2470000018b000000920fec694a4e4e637e98a49003b00134233a36074837254358bca612c2df357a95b6fc0f990000006af3ef07aaf94deccbaecc47d709639459070d1b871cb45f35bf0c80457590d3f041fdd0cd6ce0744d0a0610ed0312887f2f4cb51d7839637257eabf5cf44b7524327637b2e184216c8d59b474ddf0a739ff7450df630586523880564f05500326d4455a546c53800fc2c7000000f117e11f6aac90eed3a2e4334eb90ca2b7a803589964d55150858e65312ed508931f6410a2000000c99430ca69e697d6c8635223f50dfaef37a7cbc4947e2df7607cddc38e9833a1ef392441d153bdf248630d0557d83a3e8704d10d574fe1a25f073d02e82886b6a6301da8ee40cdb1b9596d3a849603a15d1f3d18c0e911ce1607ae21ca0f635bb5862f4dae873905399138dfd9cb9b9282497dfef5948188a598e47d2e74238e3ec475e9d6c3ee9a928cb7c9d8093ae5703c7e3e65c5991a48fcf2f3f78743a8bfe2788fd5254eb79e55e1abde53b482cf2369c4dda73373928b7c01ee1df5d8793a4cb43831e0ec80410000020b000000e804ea7194bb36f51f8e174cf8190b04a655724ead53a777aeef019ce9e040389e126f1f32000000c0eb0a694e0390e3d0b5a62cc4ad8e1bc96352539246b7f045ad068c2b6671672f0ab1ee8a571049b63599a6028924cd7caa6c03f7ee283bd8c13566434e0bcb7de1f9601ae942f23c989c69f5b48b6b378bf0e658ca5ed39b8a33f34654b4721c757ce175474f9c26029e65cd11d533af9ba8a236c03474eca2ec102cb3bf65dd66193915042e03bb3efe877e6cb504de60457fbb0a15e50e3cbabb538243561cd397257ea684ac637f199e0e129a64be1e6b980d70c89d47606cb7fd3fbada640000011b0ec24b2d4fe48d64b60ecdce6996ff7f2becbf2c44d5512003cdc309b643f900e800737d000000f378ba0db20d7b2c5eacb3d13fd1958b80af3faa6ab386971603171e0d89d590536b1f078fb5e8ee8e99168cee95b1e0975d09a022e5c6025309969be99edc50960b530839a932f3d8e8dbf415011f38552d559b2fe8022ac14a80ba338aed562facefa4aac51c4b85f1a4b0f332d32a09ffa3a750a1b2331d32f734552a36b080882e037ecde8f3f2cba9afce01644e93386f56c01186f5fa3d81e92e5fd6457dd98f259a42b8b67e7aab4a6e2da3122a88edaccf10bf0cdcc46364cf5e62b5621f6a8c898c1bdfced128767a81eb40b2a4ccc849dc521b82be02e1f99d311edb821dd80537d52a0965c2cdc6b33d918d6b596b000000a60000006105997d9da063ec10492c8489b8d9b5839d97f07421277f9674084051e6f05597185292b300000039aac50a73450064c027cb125110a22463d25efb5752c29b902a9aa615f1a62a21ad95f039ad63bce7d9531dc02ea973b12e7a6e0acb613575db0000003d07e0a6d03c74313d3de3599b8cbdd7be8d7cd11fa6236c6b8d93eff6d0c04d8102dd937b000000152eb42ea203d2f87c3fdccd3f3facc70180ff6319ab000001b8000000db05b360a766aea8ee1167b76dbb6a83fc762ad82165ed8e853e1d3d6cf88be52da5950394000000b3d27abb582c80510d960afff3b7b595ad87327260c8dafe293370d4dd27fcee725e683bba1fde777f05281c966284f9c49f7e3aa2ca9cf688105b859987656daea9fb581e7678fab910c00214e29d49fa6c1a89de2771cccbe8222ee62c20e4ffcb75e25f5df1f10e91b0ec69b3aae64fb324b858d86316c4fc3961ef8d414c3dd1715848e10f653599d1594268da787890eb07f3c36d8903fb20433253083406f5b50ac6e494c0e39c6c84bc23afce76fd5c94000000d5303c9e22fe95fa3e3789a00209419ac0fa8c985b7f8a31a81ae85e049bfd330f6f6b04af000000ad86e79fffbdba4df4d847a2779bf3287d4fed4053ea52fd2a95e39303572258b029d53f5c17a523714cb2751e4dcbc10217d763a1494b011da7f9816abebc78acad292f748d24555be50a851c079b889de47a8ce929919c2ebec7f11be88fbcea3d4f316eabd5be826bb58ebe7e3ccd58ad895990280184f71d00c0cf370402aefc4ea02fd09e3cb89ce4eb2d523c55a3ad6230389b76b579242edfdae0683dea343aa9135be94e9103903006710000012d0000008016105a16340204d52a575960418b52e10f8bc54cb32635251093ba9eeb7ccf4d9600382000000058c4888ee362cacd9323c571afaa517c6192fef1af95a35b82a09aa611e4284bdf855ba2e9dde9d957d7f8fd138c2967a30580ef57ccc8ec6691eab4b60e87aadf3552001aa5c1dcc6c583df216f1fbadd9ceaa7cb9c61b19b000000a506541dd0cdc892ca8172b0de23f2c58a0804718d4559e4e6dbab5d7ae7c2dc6403a5fb080000007d8ab6b912e18159ddb511b4b701bd02c0dca39705ebe1cb72db9d75387243deca1c13cd4f566448f19976f2958f92e5f198985388319aa2bf4c69a721174d3aa47d0d36e4d6c85e4200be7ce8d8361cfbc2c8c1bfb5eac21bd48e1daff03697b5c3b5ffe6549e888bc6815b6c9922f0841aa70d8163c69372ba818858030000013c000000a7299abe2e627221422b744f34151ff209616f6fb90f89620b3dc29fd008f1e4a5e16b47fa0000007fb197c5222f0fec211e77ab056baa0e4ba8b122ab4e07bf8a5876d170289baf62104d2437cad9493ea4cc058b6e3340d51ae8865b08cc4d1848dff101c34ad6320c7f94c46c083a5047b49722c8af370b1c62bf5586afb5aae576f759a3288603f3b8d1a6ac20339766d1ad4e45fce640a897a0fe8e8ddc53cd5bbd4c23bc420000008d0bcfb8ade5ecae6c6348b0f9cba1e661fa7877118a714bddf92c12e44a1ca5b2ae5b72a8000000657ddde276c52d3c5b192ce2c1cebfc2b0c0edf108866d0903b211d4403e114e9d243829ecd75d34cabc721dc67243340f396bdd494867e249fbd4393204003b609b62c5f4dfab0fff44b1f046b0c565e7520ca14971f0c6a9183c83029d3ef2b993d070469b00000109000000460d84a6953576b079298096f04d1bce47c21d5b71339a093a85efa3527c6cc1ad528ab84b0000001e979ddeda2ebb0c740a4b564fa1a23ab5ae084dac2e91b343650fda0d8df9000000bb00189662f16f69d7a684b10a06440f99043d3b607fd16e6dca488c02e63a9e66cff0614100000093bede4e18343a6a27cb9643fbbf8a32dfebb9e019e7c147a14060c6df54eccf2c7eadfd3d145c9f92d6f5a32746b782094d3f4cc0fac738fa44423ca4ad18c9b60e1e664cdb8f05c1ef5db8ac8aab11f85585f5e6fbd385d6042c196a22a36474774fb32f67ee2ea9c42575622439b739a89c65616ad339a1f0db0203e6fd04c22bb80010f44d700fc5810059414ec86cbfeda500000168000000f906e8b61bc741ff466bfe557b4cc06d3142020e26b73a5f679f0c5787491d59a3e32e6229000000d15bcf18235c64f0a0fbf702596a9b3ac94115b6d131efad243ccfcf8433de782a0d990a9fca45ccf8a51b7a4e2f801115d43610bab13c56e18065f1d7ff0ce9c87cbaefac62ae7824618332ef545202ac9caaef2e376701b37690ae158eadf5dc7d84baef4dd606d94f66c3fe899076ed990c35464e9b9458a8024f4a8385a1ee5e17b1bebb2c27f1ab56b534db7b7fbde6b081209c05bbfed644c7f13b87b319580fb0cd1f55d2e3bf2c4a8e89aa4d74ebaaac952366a1533d85a947ae2fde6f582b2f7b7ee946bfa71cce6307c4943441000000671906935f4ca8126e15e4690d2e5344e842c348fc086af80f4e89521c5613868544f504970000003ffd2eb4b663d75f4785dd33c55d9a19ea61d875a3e9256c19b5f52a101d4fbaeaf9a5e368dc05d36de3e489e35c86cf6b7b78e35cf310646522a153ca4670f7003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b014ac437ffed6c42649fea7303caaf694149c0f49b975392d5684e644278f9c6e370a3d472aab6ce7660dfe717de8d9a7bdede1c8b8f8bb0bf106f47fc49461dc5d444425b0d32a688291c58e3745435d06d0b02bd23de6f032c98701445a98ae60baea30f2c86a340fcfcaac3b122a9805ed3a5c20478e982ebef1da20b0c192cb6ae9ce1f7a74d36071486b0ffd9d4402977512ff5bbe8b3a88847f8c0759b5433bdd0b84eb638880f3c3cfe8c7b568000000b011e7e496ce590bde8b314a7e158975854e35bd08096caeac4ecea8447e99c842d0c51a2f61f4b748f13eb97a32b7a39618a666d1c2d84cfa3f41675ce1a1edc00f46f42b4b914477b6a12940dfa2330f3e0a9fe862648bba31e4893ff05773d66deb1b87968113db25c5d834e8db4eff07be843136b216253af40b5f118019eaf8cc699cde8104e95549035766a329a90471d16d2a355f436856e36d5b078a38599dcb17b996452796635ccc13799186000000b02a0a61b687e31754c6868055452b01020a3ce3b0f6264a701ba225cc95d081a69a87693fcf30d4c633a11824d887198d71348d7b15457be4badb34039ef22df42d8505dec3ba7033acfda094020fe4ce8e02bf97343229a413cadf2c414d71b94f922c0619d8dfb9d7379225abe531910f168213f3ff4749898ac04eafb8930fee3eaf8587aa15902688919416eeb5d410b00c166f812c70e268de5292efbf29fc89c952dea59bf8e913db8f11274c3e0000021c000000b0255883fe6dbbd4dc0002b2be61c7dc9dbf1288fe46828ef32ac115eebe5dd14b91efeb96996dbe127a1bc8e4a04f18a2d8736f032becda1a65f7598265c675caaac157071b21108069b7cf4689b5b3d75f4229b3a8ddb41e9d130e59a07dcb7ce70c92d5eeddd9f11704c470c6742107155118c4b90ff8c13dfb037144af8f51a2d2f7241d14a6de2d2efd36995dde4c0aa81d17417b841d9c6d646cc759a3ec271223fcce5c622fbbfe6c2b64bd02d0000000b00eaa6bdba5414ffe5b647a33783cd6d2b807921b33baf3e53a35668fb8fbc24472bc3d2235ded304554727688253337ca6a5f2aa8729780c400e56c7cada609119d65a071b5ebc9606bae0b4baef86475d8a1951668eb0722832c645b4da052b87deec253426eb8ba09f4a56ee5f47051567ed7a1fb583191675bd30e60c551a9988fb9d3075660a30f08d12f86693812b13c7d1c7fb726de69ef1fbdb4b08a6d9777920285dc01c3884ad45d4419908000000b00732e01ac48dbb6b63a941f53898402e3e9bdb94635e250f3f8799edf4e7308bc45a62635aebd2a1a4892450076fa1577f3b40d0b9c1329d4c2d96bd82c74aff2f5a22e7a0f52d57e51595254df8ad28833e3b9b1fb63093def7e05ededee941af43e46cf629082c2998e07641f165dc0111c610a3b19e10767e70b2bc1e0e3ac4e464bfbc856b8d99ecbccc8c725ab107377e3afd4a1ad0d10fa28ff2e965eb7db1a077b9ae3d01a10d665759f090cf0000021c000000b00fd3353ec40f32ee061467bd65dd7a9a4db974dc9bb11a23795546f7acb05c1ffc56b8bff3607945a74f94ade0cfc97ab88fb4c1bec2fbbfdf66dbc0ebeeb117c55fd2333b542b02ec8728eda4ceff555f26d8716fa8c9c2ed5fb5f36fe6ecddeb01bddb3a8818a937e043f6b1858c212a67a29c773a7eb1de5a9e19517c78f2aab643b0b68359d398fa75993102a5202390cce3107aa3ee6b18e67ba9b09bb7a7803b09ef8bf02af0f76ed8cadf48f5000000b0027d147f84efe397ced437bd5f95df0dff58d9f3947d71b3c45d79e3b7581856aeb27f4648389a8c1d915456641c1a0a0990073ebf920b67d79b9058616a7026c6003767edf18a4a4ee742d3e9bd8860e372d18bf48a6f2d5dcfa2cf18a0bc6a9b75e445aa52da70219386d127bc111d0ce9dc08924e42d5887fb099fc360be046c0f88b604dd0a0a8e7eacca9ae08771ac34f0092bfc92b06589c24f7dfa9053b190191682019e940e516ed308bac15000000b016d5153124a68fe9cddc8d1cfdb80d594fce6eba337543a0e22771cd781ce901c48019d4122dbbc8aaf5943cacdb76db77f4e154280898128946ac3e3194a6e8161ec41f16e16737a83cddb4967589daffde567e93bcaa104a1790e6c1596f2125f9d8bf8107dedabba1bbca11acdabf17850fc35bb6e2491bfd4022e8cf2f0025f14fb762aa6d05b81afb9e766f89f417acbca79a9394302da3ef5730159dbfaed165a8432efb6da419c3bd5427314c0000021c000000b01f821738f1caeba0f5b78dc42bde940e1f3676b280fa6e174437b5c3315e6406f5e2fe51c92eb71d0a0b3f9fe036134c58c68735450039b8c824c15c024e24f7898968fb02dacb79a584c356aad1d855cc2cbd6755533781f7cc409fc6a9b3172a77a9adfd49f0e8fd4c2f103924f18a14d6fa0625de97da6e16c74784dada62314b386247e3450e05bd2476c42d86cf02dec5dcd70d8cb0f3ab747c453b554dfdc0e8a010222c15955521046426ec6a000000b022ad2e93ba7b04a1cbc6bfa87a617f83430a0a6d1ee53f55fa4a389c7a14f2bea3266b1866345b93307b876c8a13724533de87db2cc5ac3977516ba8b08bacada8c3118231a1e859c9044effe5c3636bac0ed9562c9de981008d208188c433c4839a45466fc2a3fd10835958f2a49a4506b07b9430984b3754a843d45d2b4b21a483b44989dc5be617aea389045c108c29ea1dfc98ff18e38870be3004d8828dd6a6d669684a8051edb7c1f22a624f3c000000b0114fbc1147203f7c59d351cfed9de6a882546b17b5d02d65eb828a8ff9d76a10fadac803587b0c952921c37fafbe675a34e121954aa0fd7d9905200f3a0d47036f49b1eb7c2b5f6a38c961b6f87622cfe044078635784d1559295f469f5c2490283cf724f18aee0c7a487caac8a0c7b529dd0f9bf87c13c306b6bffe7b3db62d29b52f26c6c57d6802b1d886fe2e961413ca54dbbc85e9ea14c5ff8a29ed2019fe66feec00ca063a340ef5774d3c2e6f0000021c000000b01088db56f1cf8e6bb37e00b106af697cbbba256acb3cad5149c60b01cb2682ed56ce5c3af124017aa9e5dbf603ccd9a488932a68e0f14ab137d62521352eb430164c9f4b3c2a9b8699262c74e2b756d3d81c58a374fa8b44f80633c5bed701dd115a0f7689a706e145eb919ec063f71a2270db6b3269e6bff4de759d818c3b0ded068ac9b4a88c487c5ede457bef82d400f9e7e6d6f8becd9f12fcffb3df5132ac9fc659ce225a6db01984e53ae71ed7000000b011a9d47debf2a4be9d147f140a1d9796aabd532895395b1430978dd0f9eab812fd5f9444930a6233a98bb9bef06b5aa975a7e28640844a85a96652bfa2c98c27f723e8940c956b617d8c333f9a7660436557a8bb9cc31527e3c6ae71016d1312046bbc9b1047477e2882396edd9da2e9133f913c15450d920705c917b6378de750cc0a0a2f477048b1d50b2566519ff3059fad594633362430bd45f4189d36d544c9fe2e99d63b1f0efe80b819ca7ae0000000b00307d543786c1c4056c739d9d627932433bf7b6c83b37ad575c9466c283b976c54deb14d14e41aa092f79ff5e0adb30c9afcf4888f6ad9b61482bb993ebd26075515c488057f67df6c85d3920bb1648e8b481cc99853dde8db193e0054cc3558ea35266e56384c3fc6bfb81ce16271380d9326e3a6c47e02407d57ba7840485d3fbc781d9a7d310a1e22264144221c2b17efe29641e92afac0929bf35e65e2f089802533369debbfc73e38cc0a49ee010000021c000000b01c0cd9bc7ba0deb785e6e4a001ad27840eb9732187e90db9cb84c21a3f798e1b3a9a70a2574f4b62ca9f9b8d716270e9a9ef9938f29de567561218d068ef08f921c13670629c8b7253379267c274a5e57fa6dca0781f0afd5fd7cae32cfd1d329aa3242d66e5e2d127016d395fc86c2f0aac653f73aa8e2bc4895baf8844ac9b28630f46bf664a981478a3182ec15db2295aeed22a92b96026b9d9c3143012f7bf91df72b31e08d5bf20acba2a04cd82000000b002c9893b4813a372361c6d15b44322c531eb3d28850d58b013dc2763174139ff7bbc84f56e720d06a552786e5eb8c16d8c5d416aaf7e5acdb7a24f50ccdbcee5e66d226e866dadb84c17a5a575ad97af733a33ac05f0f8dc1925836e1323178e1a656fa41a2a7abd01c8693fd71636c41369794406dc221aae3f268bd552596a9846beb4636f9236fae5820d717792012943bbcb58f3dbd7634670adda6b6847700df45ddca518d918901a6aba07d772000000b0149a412c2da3dc581287494147cc28cb19c57efe775bd2479d205e70ab0906a36c04c665673b90c9036d6f6bb461a5b9a277364b4b3d15a144b3c508cb0603edab51d9e1a9fa74a15ace5e5d7f6a6a4fcf002f5e5d04db56566aeae03b7280854f00334e249c68aea5c301c35f5b5835055e6d0f76533fee16b534eba9500881cd8f2a8bb171e977f5839cc2b9fb1de90e875e2753520e36b7ffa4ae1c6f5ab33f7ed25381bc5fc215721027346f91f10000021c000000b001c285fa65b2aba5adf0d3b3d6caeef7eeacf7c868f513b5a1712e2593b11b1ae1a34ed6aa7baff297dcfd7e84b9b791c9d57e81cec4b19bf3f38041e384e88b474c74a5e98553ca048afba363491ccaa5f82fa7d51f1d95b264607e0a7356bd593390e5271c42cedddadefcf6b789b930359aceb8f2ea2c8454e9d39ae105fbfdd5c8fc6a38f5c160560524962cc77230376ce27ba0b6503f4177499134dc8b5358c4771e502fa99cf16f40f1135273000000b00ad33296515224807610567a54ca400e00242548f6ec209b10d65c9e0aea1d340b165855bdaf06278f8c2fdc883f8856b0e92458684921936eecd274156f85ba7dd85ea99bd6424ccf6a0f3addb7a1c831176672eff5b98dbd0ae86460ce8c97f62149bcb87e4861b595d8122883d652212ce677767cde811aba3345247d652b34f373a587d2c7b1c5c93735ed6de37804b1c2a593d147054a578e7c736162c329b8a79364199744e994b720e99b0beb000000b004daa2ab90427bd8ef3439d5a15da9b1e62885c03871a491942df4664e5166aa4cb01d63d2bb3d385877d9c1b649fae5ca2b2882fc2ec38e6db60a4492415ebc312c91ff72238d9b0e6d16b05264a3491fa5c9ba2ec0ae13ce33650c54a0600a94cdfbb8ad3eded30537afd18a6abb2e0d2c0fc289bfc4898b3c96670b536411d29ca8e1db8cae0ffa138bfebc907cbe1ffaa7ca307bf3f63b36c13dfb6348305f2ffb6c180fde113016c151ce7f95730000021c000000b024c35cd6ce060f2fa9fb577bd3a30b3ad1e3405b43c4a3d31d9bdbdd3d8f226571f7b385fbbd7f22af0474069630e55123c1edd68181c3a621db3ea402eb33ad3be324f17a001c4b0d972bf33a57bf1e653cd0e92d81b24ab486502c0ffa39e22f847f238a004778b80b4bcea89c231d10df27c4342abc9eb1e087bf16e0181c43bea62e79f0be91c3ab109bab4b265424e01edaba05a4f7a181da94de663eea4702a1a3ddb621b1110d4b02996e673a000000b01792413bce0abafb1ea96264b751deb139ce7233b079579a7b2c501be205076d442592cf496e3ab8f0e665aa890f9383e60a39f8ced4ed86897aca69de4bc2b96fb61952b113438f78735038e8d7c68e0807269e5b132f79088edfba0a167e851a56567c63598eeb93bccd97bc05b7c80dab44b286514f9c59f99573563d4c844bbe178f0f5cfdea5712327ecca96b9112236b47a6e9983ab2afbc09e161796c764fe61c57ca33ec61b1473819704c47000000b00ebe06118218b563520a01ed4f22d6a1d3d235d3eba52b6bd39efe28bd246fdc2667169919252044113b1bb9572426f19f9d6dd05371058376dc198a19b7df59d656fe7ea251c57fadeceb3483caa7a095f0241ebe6db143ec9d1c980b2eec199f85e0495bbea721092dadd04dd8576225c6cc51825382fc5d4705999a8b6c9b74ff63b2285244ac2c40ed033b68bf6a1c14de2f9414e29edc1e8d13f09cc0e11f76de1223470763d0a3f8b6229679df00000f860000018c00000073009c5eff9ea225159fccc9a722d7d556d6844cf64fe8ad7286bee50f1d14a31722f497330000004b332559b81a3477daee89ef2bf771b09e8f512ef9455f8601199bd384af90988e7aba12c3f9232edd8958c23b103a123262cf29d6999ec0273101e8c3073b5e4d42db9d0834a8d53272b08b00000111001d30325100c40aa522096f38e9ac5735f09969a30006e0af0ce435ef8e8b2e738075c3000000e9b9c68afe2cbb41e12d0aeae13fc2b526ad1319df82a37d12116051bf8d487f5abc5e260386b3170ec1f52a5d257b920378f54570176f7c019499f39951b19541c6066b136d7c29f2fec951a55a83fc7ca9d266512677fede5e5e780e34c73d922d72029cd79e731eeb012f65d7abe44bd4f9f36faffdc7cc2afa87f8f0c9ed4de851445e73f2bceb4fa4d90ee3e33b5d17692c7fe500fa965e59a62288104c402e8e1e7a38f552e7cadd71c80d7a14f468501db4d321f0dde89968d8ea7739d3661a17b28fa184c5b7fe2c1b5991138a5019d1261f479510daa6fdd50c7bf73b8f65d06ccfe17863a50000016e000000b81b2e1a1b6b67331612557ea77f54564c0bf6a499fb88fa8087a76b936ba4e8500bd56d0600000090f70cde5bb951cae21ae68343f24097139b4cde3cd336281c6337e3cd58eb8e847565160a6e4b73f304a4964b0df6ee807ef3765c443a0c2591721e1e2178fd31a33fb658d24d5d4f0ab76478a41079f5e476e0808ed82e7640dacc96d168b465e31af599a45f44b4c2c7628391cfc6607d346a686d08e9cf9542f79319f009e9251201fa9704cf0318d6bc92c40bd4a2000000ae289e7951ab5706fd8a63ddbf72baeae3018f1ce6283a434752d4616fd8719b9677afd04f000000868d236f954fa975ea2b47fc374d2fae689989bc7393c6f8137a2887cf86b984796c55afbb3ef2ac354038f3b7e229d190e87b57e085947f8e86de6d48a900eb980dd9b5513e8493afae6fe37e57f979f34673b9994c8ba54797de1a8162bba20dab19463f980124a71d3ba17d5c23ed4749a29b4dd9728f50733c4d1f49797fe68d91fe07af820000018b0000008603b192b8cdd96185017de3883781f72b814aeadeef12edc328eaf95b41e546fb660568d70000005ef4238b17d2e8ba64a67ba304a8c1dbf7d6d4bd29c22ecf3868ccfd9ebbc655d188b2506b7c45a55ad0a0fa6ba70feb8331177acf902fcd25c8cb0dab71c4d9d14d0d358251b7b33c78894a25de165871b9eb66ffea3162062f6687a42921000000fd2ad7a6965277b4f5a3b699ff8a5b29ad2944aaa1c280dbaeb1f740073c424d297d21093c000000d5c6f23bcfa77b312f1a4ed9e1959fb478963a3012abded026c155f45e019abc5e8b4c9997602d653daaf1e58bd38969049113e9f7c293117eaac3dd4b9cee87cc60372e1530e15eb1d6595af4180762694b8de1d9c3b514e082dd3d33b2e45dc1b22b37c26a732d5d644774a0a689b1daf35222484deb6120f8e554d2fc68199e8cb337cbd2edda487db8aac3e71aab1d76f4e427f4ce20efafa49fedfa759e210f68f01c6b26cb5711ab7fbc61ceba3bf8ed755acf4c492264bc9d133d92030059dc78acc6bd095690861f82ea1f27aaf2861e68f3000001d7000000e4228a1360ba95c8c5a4c217ce95b4e4641da9d4469c238714b846e4ea01c467b01d00d9b3000000bce56c28e09208cc1ff61aae88d57e8922ff8d0dcf0328eb2420df09976f06e217a5b07930d3a8c10295896318872c71b0eba3e7b4530308aa7c00840365394aeca97e778070727afc1ed05cba4ef44a0c1bbbbe6aebaa95077a3d8a11a11e9a92b82c1d49e6a41a8b17a4060c385574e496b0d32cb2880eb1059dea11ba2a0376f703391ffd254d2b6194240eac03aa58aad80a1de8c55ffc850da9b497429b563428e4d0b9067727076cfb99cb6e3432b4981ec0ca66017b2349d902000000eb17b236895c2d610c235ef793bdaab50db11957e2ef4f47984233d536859373ffc8865976000000c3f0355874dd9452301aeecc656d3acae4bfb6fcd842876da6c76a90cf246f3260e50b7b87c3e5eae185bd205b24198924bc481a54f3b4f50765c7df7cb8599b9e0c1c6b3fcc06b4ab0ea35af130779f5480e3abe4b685c31fb362e8b0f2ee095f7fd29019ff46dde97067282ac2507e448f3efe5d25529d07b217288d2c4a1a7f01c65f43f859473d3d80e23f0c24f523415b6f85760559f4db2a8770040639dd36f4606b43fbfcb399e411c8af18fbef901280342be25332ff0df3b55de6d6efc80d4b00000212000000f61afa8bc9d9abe8c86162d84b4477a9e9559382155a375477c832cdf95df0b3de3b97a61d000000ceb49166afb9eeda17229b2d6a2825c370bf3686f9d004f9a9a7807ef8024900c67a13b62aabad9a0ba749458f412741aeb4f83e925def2c136efe4271ab65e3d01077574431d7909725904274611b922c4aa0a541d74c099e8108cdaffe9a5d08c8c76307fba3e917508964f041e329909f14639260a8c7910ecbb73f217cebcfb15756563e15b7465f0a109120f126514c817ec98bd90ef7eb3858b92040c1714bb349d8d9f7325d16e8a934f2293fa24f6bc372bf0332c27329e0d274469ba5df8fad1b7ba9bea8dbc63e5c7256000001142c81af7070047d781028f0bb753021a1c3846fd101cdc1709f26ff0a98551f361d50a996000000ec84d60d6887506f221e716d8d35ac3550ca5e4758a402de0ccafebb819af0da1ea54640769231dd4e9ed386b6e43b97fab716a830cffda3306a3f934a334c02ed97cd67acd1fb6a2d219465e4797c85131524ae384ee7fef8a08704b4ed825af022eb2c7544189667491dd4aca5862970f1c10cf96f5e7ece768d238bf21b5fe88239166c2038d94a036d28343c4c5a4c41c9181376a6cebb6e223b3adeb0b1a7d23a378508e5b4c1fcbaa0133fe435b8014f4d6b1b7cde4abb398172b629588d66c431d97f3f5227e2c4c5d85e5a1fda0bd581b4cfcc67f87921401650765af42434619c8d0ea17fc3ec998200000105000000aa1d54e58464d34f3d4f94a00b141257d940565aa6da79c538bd5285035930298f44ce66ec00000082615c8372b73086ef2d86942d1f1f77e79acb0f44476d048d5351c7db18ceb148add4271b6f1f0c124841316205e9c8f27907f0b115f2f2b936f3ab4564ce5d742da0a3e2039f5de760e0badb7359249b11c5400e6e192ea14878dfe2302b8b7db71b68f0ef3c8bc0ca9f8031753a3fd9ba76dfa800e393dfba6ba2d0ce9f3b1a20cb0000005308f37fff11b04849586a80a585e20355c71a49ba87229813d60de59923871b342200cc390000002b2742797a65c1d3e8daed93b6679480bb26374cd0c63711a60826d328ce6c9f3faac39db38f90419b0c55ce000001fb000001280d86a17bd5c00ce4418856a6e2e1a882df05d12e025b4a56d6b61ad2a71cb223b35b60d10000010090d363416e98c0f3144edf61679c13cd8894b682cc27312fff510b4c6a74e02a8589ed142ef5ffa5bdc2126151745dcd1d4432380e628a16c08cadf2a245bd30e0aee776594847ca8c333441ecff799b2f38e58b745161cbbeccd654393593abd747afdd7582a39606d88ba00217386fbfd717a301ab3d84802e8c164cb80bd27b8900422b519c4cad906411059185cd186030108770c0a4bf341a335901ddbbd6460006a9533a3c5b9fc193a1cf7e4ad7cf690397d9291f74b3f12a7176aca180b6bf8b44818cc6e6379459f9a484961a1c2dade7a6336b9ebd0ac4114fdc03d8477d4cb1776abaa855976fd84480321a170000617e0cb01cfa6eb18d360c6e000000cb200138c53fb6a085091681a1ac0765bbc2405a8b4c0a7ecd4df62986f1c7a4efdedcc86e000000a354998963cfb528b1a16c7d4b9807e3915a29c3c6bf262dd346e449d5165679bcb6f856dc3a235f0cce40cdb139bdaa93291f54d6019619191aac3523ea3d17b12cb21eb8b1b6b13c49fc2b380cd6a8ee95215cfaa8e9173bd9aef68539f724547e8692c6b76f48a6d92b79db1e0df4f6bff82f06e607294d84fcfa120217a88862b4c61209b16c7611668da0d50f895fa00aa1cf7ebbcab1382a98c198f786c195d11000000128000000450ee3fedb9bfc3f7e5672d4b6a499f53a1430ba6c75b1855d49ee227a111d7db0d7addddb0000001d6c4612bc58dcd95a945edfe26e25009fa7bd5833e71b03bbdb4075411c000000db0516bb73cf9fc13d9c94c8fef11cbd884d5ebe6e26a3e3046339fc16b3db3d90a22bd2f2000000b3dafdfbeda0f7b577be7f3a281a1800b36f28d85c7cef7b48ec06650f98aae8ae0ed0c1ed50b3987808c1758b8216ac3b704416b24fb325a33be81b35d1bd238ff6d96fcb379933c7bd359fe94ed826f9de106267557372ef29d47b67d4366fff022c01ddb3e786ceeaadcb85ff0975a6d882c5076f985fa2e19a4a0a5131bf07440550642284fe2d21fec2a7791ff5be3c24e4a0dfdbcadef77d4b94aaae078207ff16245b4d3ec687ec580fddbfefb07175f40000008c000000371dee4f7313fc8095bbde67d5d724dad5c5cb19c8dd0fb167219dfa7683b8128ed0a1227c0000000ff473012bc3b79d35492be90eacd9890000004d0967aa2dda64b5d952e840bf5f2afeb0f7d54ac6e690c2ff5cd00e83544818f3dad1694100000025eea73e9759bfd4358b339fb78cd118466f96892066dbbae1651c41d9db9b62ff4c9fba358a0000015f0000006a2b472edfc596b953d09761c7f5b5834f63c86bb4d1ad1a42afa788e0be854dd36cd51db3000000421ccd7c30b9ea1b1cedb8cc5b262899ba516ca51dc4e14f22519c42ced09f3888d2930d83a85cdc498031a222526ef7f4dbd27aac1266dea10467b54614194db12141000000ed263239846d27d442440d1f01e1934f130a33c005b66f4ba74475a0b523de87c22c54e7fa000000c55a3157d7c256da4ef5975df4d6c71999d0d8880526e4b8e9e6b48abea71f4a6d97cea5dd95fe79c5ffd3ebb843f1c9be98fa4564ff1aa53ad043ed297b53f4cfffce626784f5c4abb54437e9190a95e18258245426770cf95e4bed1dc604c9fb1f3535251b778df53e251da808bbecf3594b11c1be5140d198332974fb7d9c08d59af8491dede0b4464e5050a43487db00ae4ad11649b765b5faa4259f9402959c76cb5dc6156ff7d33ae01c5d4c70e25bcd13ec6933ec1bceeb6a4c544f87186d2b729035000000d9000000910139beb488d89a2d022e01bea52a5bbaf9298e524b502df6e13701a423a49a2d9eac4721000000698d6bca1a5666a6e1205f7f3372990be03e34ad260c7bd6ea2a48ea2e96b4a0ea3b15848f92e68fce61e61783b4beab1413b3a515a43b500fb3f569f1efae02c09a30ec8a9f7970d2a10d80d0ff8a6b8c0a8efa3346fbff968178155263683f681f3982079f4761290c00000040279c9e3bd13c318c18d9fa1b93842aa22edce489d7830de81839e806ab784c48b33988d8000000187dc10059e3b2905fcb0b2fa4b3eb8bf61e52656d0673585600380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b00be084c540f6c3c3afac11447019011a6ef0aaf386781b7f649ae0771850de38b447eefd5f28eb7a316e19fd1c7547545933af457e48bb2be8116fe9a23c7447ae33f30031e2dd1b96ef1fb54a9dcf788946d3136c92f1f3e0b3625416cfa07d84507732d4569f2900e26d1388831db00d61bc869e16270301904532bacbe4037171491149242aa06446ba0fae6753312565eadc70b82384b8b0a8a0d194f3fd7ead40bab5534078c3be0935ee1ff01d000000b02fe6865ff5014f51a217e6625a0e5789f3f476ba3e410f75eeb35b946f6be8693a1fb7407684b05f390f4dc0596f97ccee2689b3aef29596d59f1121e2bd4f3db53041d6f3ee8fd4307eec7fca4c000b199adaca513f863bbcaa06df900a08b50992360a78088905b01ee1d48304a2cd084d7821a3c566833e40264b8a50a2f02cae2796cdb66185d61738dc03a70feb0e2ee07d2ed3c5e03b7dd4603f694d0b31687199bb1b9f4aecc2d52612a6725a000000b0063b07587fb70cf92c5208e2194f9a39589b6cc1f41dfdea58273cd9e79097ef1561efbfef40d0ca0e4aeb47a63e14972ed70028a6eec2131a4ae4d0a9a0a648b2a9c2f6995518e79db9d7b12f7f7c0959c9ec2a0e7d7d13ae282e396c62e7871cb9477dd5d0d75b7200c0866ca5388f286fe2f4ab4e5881b9aa6f0cd1fead205b5b8f71f5d04faf76a08f3e56c311b117c916f949eeb84ce71953faeb366f46bad63ea7ed19788d15d1442fb287ef730000021c000000b01932b75128880c533b21583555f9b347fc0e8daacf94cac9897e5b8aeda858681aad5f5e83c29cb2a00d823e90a6044345442ba25b9cc33f198e60cb7bcd87d2df6ba91d1ec2d347e70dccab21f2e77ab60968471bc5f8f89ac3278bb5af451826f4a9655036f7dfdfa85703b7ae9eeb2a3700f278bd27672a5657cef6374d25e8795c7b4630127d179f5dadda7392081f0fcee60d0ad43bd18437a2cb6422cb85117441198cd0509f3de96fe0f9bad3000000b0043f874c7a39c560b3b1c58df1b14a7c542a9956b78aa48a38a2d5204a977112640891a3447a83f34ee2a16ad59f6526b500e0c16900a0a1df4a57bc330f02f9692c1cc0d6af07b35ac0748ffeda9897de4368fb7bb4ea17facb14602b9482dc118621e324de3ebe741b30350eb489f2057cad9646d0e7a01c66a766622c54b0c643da0a7a45d086298ea832a76dc1730d4a7564dc792c4314ab4e05c4c2f14e6b93ec4ec2e47404c360cfab3b831cc1000000b022d10f2075754660ef9d99fd7ed485256b6cc4d2493dbae86584c2127f620883fd332c3e8ecfbea4104ec1e3b769914054fbcfdb5db46315ee71a0079325574e9f76d776695cfbc28548bc1ef50edb13163b375d415c806bfae4f14c56e38248b74a720320adf1e1cdb8690b939cf85b20224ad4602bd49812fffc1cdcfbe0bfc5bfaec2beca0a4422b76cac7ad174262fb4acfeaf56da31e71355b6fc8b27caeb5942a400fcfa7151577bcb3c54dd480000021c000000b01d625641dee974c06f1136252f45bf97c1bf401a73daccb2a49e430ef53a6b530daf63f658934c309a7c4dafda162f344af27e592e71b26478c51b490df3e0de3bdeb313a4dab4f95e9f1d89269cc3ad85865d79e50af7dc321bb4fbb314b48db5d0302a31bd04ccc033f8e6b1e2cc540d5dc0c8d0367a5f63495fba5135977163b552e26909471fae64213f1bd015b71b5159c42ea25e9c5bb53c1ad6d5bf7c71b97d8e0507e3edc992460a0be2d54f000000b01439f81bb8a6a440738035730a3b182cd0da419c38ad88e174665a7abba0bf5380d9049703aa7c822d77756a4d7cfef98c32e2fa52439fc0557b3bc94719b55b051e2122161890adb44475eabf6de17018d491099c23d8d934ede8b6a0cd59018673b1a30a458220722660dc66b156e521d63d927b24211b35afe00b71158c74e3cdc7adf36dfd88046aaf994187f2ce17af28df766afd967ab6a7ac4c41d68d2d6aacc18b069007f6a82e3dc69244bc000000b016d66a1f000da86713f5e08834e30550996c6db42237aac67e530e47de18764f867efaedd3d795df75a7a0de9067dd37e2ec3009f5cfac7e7d9f75e7f8a09845093bc077e873c5006070550ef566c6ece1623a68d0214c84ba44153d36dd4638caa2a6a89959b06b51644fa8632fa490102ee337ddf0af6e801ddc126cac433af4cfe5ee5c60cfccc2c5c92f66df341028493dda9effead5bf1f659583f63306cf3477a852cc060d109eb2f2965613490000021c000000b0028c812cdea2a5ac5d1c5067b3ffb73b427043c9a0786202adcb0e750808c102e3860cd235dbc519d9677492ce8288d0b34f25e596cd15be49c32f984f4dc70c1e2b1706ea8bde3e258eb6855bdf29dfd8936a8b0a3d10927e8afcad8e8095ed8efc6ef8d29eef85875c79e8224b4fa4140ac42a9ae8f6160e240db13b4a750dc82694733666a250a2d881b1c81f9426140b5ab7df1f88bbc6d5301a398d819e37fdc20e941c444191bb14ef000fed0c000000b011996d8a35435c2527289dcc9e0f2ab7156fbf2118fbef9a7259581f5ac756c4f8c98b57564bea3451a9b63cd4ca60c355ba9cd36c5dddcc8478da141bea514b07bfa2d18ec5145098529a42c44a86068b76255726a5678868430ec965f974986659f0467b61e3841326b2d2241148ff24a626214e700dda4c17607adfdcb17862deb3697473411673a52579af2d74b5111661af404e0901af5aca60c89d007004ae2bfdbb4492c1738041ea3a6f8c5c000000b026304d7c543dec309e2f4f1c75d7b4e1f21efd85b2de01977f9906e9c730c8faefd734d8a596b9c6246e5063ef4ef529566e0e8bafcfee0d4267dd4cea69f149dc8073a5e5e02d509c82c3d3c884e5379fc6a92c98ad0eaf9bf60f161e6df57700626be7547596dd67015995c9ee2c442be466843a1fa55851d5e54eda40a45235d6878e3f0009a5466369445d75e43f02c6a6f6be7da9614a92f53719ded8c3cd62d0c27e1cc65c36aac593f09c5a9d0000021c000000b01c7d0b2a71ec4ad23114b4ab4e21db16bc08ccf4e90fa0d9db306a8fb520a0c214ccad54433b4dde587e58e5b6e11926afa56f10ec3acd1cc5ffe8040f08807c2838716ff78709dd16afaa679944b54d05bc6e61f9f22c71a2103915d1e9061a8b8de2fcd96788eeb54f7df4e2dbd22e037b09943273475d7f8a9f3eaf4290774f2cd073673e3b764c78b640e88bffa7158acb28db09efa04a51b83282475460a18b8bd9cd80d60b79fab71540c19522000000b02157932c75ebaa581fd24e47ed586ffbafbaecd1b1e8cad71f31ecd8e7a5f0045e0ee612ee6c25d8426dc21863a8319337258482179d722a1fe96814300ab7aa80316945bc3d5b0b29da57afb625a8f8d0edfb953400a2da93b041e897dfd9b97abf8f7b514fef89e427dc648581e25d1e69a06617cddb127728d1c929f72b5988197e3be9ca57e223513010b72b0e5f273b619761252b241db97cf9b04166b0955ac052043d593c52e29325f8f9d88a000000b0128a9bc059acc688df860898ea6efbd9a0580b214d922aa7b0ba60bd79551bfa238c4fd2cc2882eb571271c93b5a363728f50675f24d7a45acd9294bffd802de96b88a3eef2fedbfd5af9efbe6d6844b81af219099b8fc2b7dfbfc9006aa20f4c9dfb26114f9b13b2bca31801be252611cad5fbf6d19389b89e07633f451191d71ab290e2eb7a223285374c480b66cf42abff38e5fb4bee6a847d01f4ae02630a2c788e2891d56b1f557af1309adac2e0000021c000000b01937666b31fc567edd26cdbabf17c2a684111245c43d1975a4f6cab00d36de61f82b9774e153db18bb3d21b6ac5617a4657d27f571e546afc29b5abbacd7d698d3e9b0113140036f0c6011900c562e2bb97abb204213ffaeddae514adfd23e9cdefd649cad4b89d634e34fc110493df3063406ef1addb0801bc9c5bdeab1f27160ec9503c3f8b5fc008c6fef45532f9c262c7e78ac43c716d00d4ee472c27d78a26dac527019d868c27d64529459106d000000b02a1af08ea7e13729f019a4b2bdcd87f175810059783cd59374ab4ac4068437086fd0fa7ce1655f3957a31af9b58b686bb77feaf9c06a9bead6077b87636e6a7acaa494f5f1f12684b5fae3739d7121a53ffb84ced2c488cf02fd972d64c25823441417249d8a9f51e77700584cb5aaea1f327093d929c56194adc4d67fbc88e0d238c2446f6caf0035dc0f346cdd15af17e168aa7adc85326333a4eca4c88194e03c09593041bb906252afd006d7bb17000000b014827815ae61d548a8c64d9eeadb2dfc1df0c13670b97a4e32002806ffb6fb1d58020877e6b04209a809bc2d61704a0917b52ecb6b6e8616146efcce4af7e5c8a924cd156d8d12946cc21378ae213c61f4e2b1e7dbaecd34002e8db7cd228043fa34750407cb65ba545f0c0d4ebf7d402b801a3391b1345363c102b3331632f2e6569f47fcd5954a127e3b27b01ab9ac1beec6c638680cfc68cb07a8c4be91afa9063af32c2db9ef948d34372837fcde0000021c000000b0111945a9944604150175593e52275a9537b5a85632e52a0f414ff2072ec7bebcb17cea36ada65ba9e68b0c02a5a4fd555e52eb64ee35b84e40de5a269aac7b84b932b73d5961d7a0a910a18502973f6ec6f802676242ca042ffdb8373ec59b8afc7bde5627d481439b67a615054106311a98f214b02dfc223e6e50d6d68b601ebfcdfd845a81a65900d9ecc335ad9752020144f7bf592c89b6116f4a8f6dfdd856c60b3422310943bf528fcdc8bf4306000000b02b2226265e2171eaad2eb9c16a849ad5e959ffd6f9845b3dfb61888aca6083f1c2dbc8378f86a95733d5935dac5af1cde6b21cdf6cd5a96f5b1c2a5615fa1d21d5220304896bace4dff32ca6304365b17634e7bffee7d96c0de65c38b85057aed0549b9d799fb74b490a371f5d17d4d12f147068820586e30b503a92a1303a8fef1c4d70c785d6c27bc9ee657ec436c72c2671151ec34473409ac458baf9fd19889435a56738999df1ee54c816ce6d42000000b018421c19b9eb7f3129db4cde29851264035b9838328233c56774783a6b75391053768f9c69fc7e1fb625403ba31e1f1baba988d9e16d478d568551678a78c22adcee1aaefdd0da7071d1bc3424ce514bee9db687fbde4a656f50bb83ac9c01f6ea319e03f9a563a9c82f0b8002c3f5fa0c2d5c8de822fc80187105bf126a640ea3425a92095a23e8b28e1a42dcaccdc32b97fa0c34121fbed96afa38cf924f096390c995304e5dc984f3a6cc015a02750000021c000000b012eaae0109f0c01636f10fbc77cb1b2b8f8cf0f23e63ddb7c9cb263810515aace00edd32c4635269f5ca7fefcc5c9e92ac1a24d68319d7c0a5a2b10a93308f6bfae3dbc785fa0c6d0c58b84b665aeb55f420e810c452ee6dc34ab59c22b6c44db877746c51bc6bcd6c5c099e02146b7624162dd6e6ee848e376d1c67ef5ae7dcc6e854bd29b0a4cad65961b1dacec2dd095493dffe848a6a98a70bc1ca4a27b7eb12db26f11d2423caa24cc06a2e015a000000b0103c8a3ab6a8a4e41dbec063f5b5600184600940054edc9acb357e217ee323f68f9d121ddab499ff1759e39e844fdc8b3f82e8a82ab8102d8e73cbc7a4df99ba1d1236b17e4dd08733155c31c157705b164a8b7e16c9971314779ada33b2bfc929342f0c47e514209253ace91281ef672e41b80d7a07bd647fdcf7de0acee5f35cb13d23bb731b30b64bb399863531a02a002224e5a52828c61a3065b3cd3afada15871ec2ef44ecfad5808a9dae515b000000b02dc2257556a830ee3c27b6f6e0eea40b4f2ec98a56e35ac0974ec17253230c9843bb8780af4844e4e2c188562004aeb56da44ff46b5d98f5762ee2efd4a1c5f2a1d0f6e5e87a4cf57de3b6378209b215ecaa2b6437bce7f641a41a9c3dd752dcb98ff200331032c4ad8aae77db3b1fcf07516003efefa9577593e306b38427122ea081afffcb5b4baf79165f3b2e55a72a3f399c6a402f886f430b3f3e80066501465bb507bb84cbb89754f0a36dcd6100000eff000001560000006201384644d824f1ada8e2b7ac98b353031431baa240856ef922864956e371bc4a1fc2a3290000003aff7638b05fb40fe5f423ea57f9d9beb991af192025df2aaae2f42b69031e6a70c5ecf926c69cf8c3c2fe33063963cd134d4929d31d65dec1799e000000ec285a9f20b0cea877b23ea852ddd40c12aa6e9cc881cc6aa43c51eb38047a01211f679228000000c485eaa325f808da4200da8d2eb88ff74941b1bd0b1454d8bdb9a99afc84f828a690a26627f87f81b88ab11c22ff712ef4554a6549f78e6ba7355fbe04d22a0744d0709808834a1dea3c2923a6f3941921952b497f8077088bf21530a0e0855278309ff4b0506fec5d408e51986c5a19d121e7987995e099fb3441807d8790252f1fe9c9813b00c715954c95db28d3faa19c71d45715bc44e0e58c768862af5ea7e944555ca687dadee0e7042347e939f3cc35c358550f57d5de7073c473029cb424b7a8020000009b00000037019841973483936097f73d0d8885e82133fc4712ea9a70b5912a9ab7e9f631f39e1e3cbf0000000f83dec94089ef54ad35f2f49f16e9350000005c1cc186ed43f7f5a005fcf2e475f3e9992f98e5cfe7eaae7342dc4f74f7b436f809ad8e4300000034194f31d10a1ea6952f4715813c4eea5bf0c61d2b379f01e2abae04c502a1555d58ec717f5cefb73cbd0fdd0f6480631ac719775f00000149000000e701a61235e0347af95fe3b72e7bd7cfd4dd6d93738ec44971380d081e18258b36f9943e46000000bf9353384caec0428a595d8c8c9b4d0ee9d68c2d755a6d0700ec2800445db50d0b7d1b7f0017011393fd08afd81e7a041550f80b2404416132eb09112af349b26a974f3d1af46bda7e860f6fea6d511c3349121668f6a80e1dcf074c267c3f13ff90c6e5966d1101bec33a524166dd474f8cabf1dcc266875696a54deab331d485ed19bb8ea364e279a996a2ae2b18b8a76acd014ef96e7b9e0a8ff489d7da8a90ed04e1b21d4e16e1fa0e70a0bf0cef42440ae38d2b1955c390c57df3235c660000005a15950933fb51a1255b60d25c05c2b502cc4d7a045d19f1085b48e9ed82cca6b455a9621700000032dd8bdc2af417e65ec65cb0036c31fbf4f87bff5af8c44fc11d4f41c20a3cd7f0c16674037d3386c6cbf451d3f731170dea2e0000017f000000a61def4f93c02617910a1e9655295b15997c3e5199aba9904879a37d35c08790cb5bf597540000007e1e04408818d56d75ee804cb71573a155823f4e729416e4b41a003166309dbe94b37243faaa71e768dd098dca8043c41d732fcb58bd23dacc0250081d65ca4b1e58a5c3d2073ee82d6549edb2e063927117dab8cd2944d69c8c1cee4dbe2ff851df73ec17b6cc78bc51d4a2fc0bcc123f98c00b59126d08070c6ca15c5f65000000d1043f6ffbe62ef61588e52ae82c8e60291410e657b6e48b4b49c31274770d6deaab8dcbe1000000a969097ee3e4c07914c71a1d1c4e5971943fff2791aa02a8b1b9080cf0a42bf3f41fbe0b96c4ae28e55d0ade99f7569fc97c88285f295683bde221c31ef625fd0fa904d6f3a00f6703bdef7180fff93913044b77b5377203578d0bf9cc3cb5e4af8ca77aca5bd0504e3ebf28d800c3bcd0d1b7a4d8c054c0eeba9b910da49ba40590e0f5602081013eba33d3a31f1bb7adf27b3549d7e8d50de03d5d8cbfa8d3d87925469f730fd5d220000000c300000073231944cbc824111414e0fd0e04511e52b01f8441659457bc2954f73ee870a70bc9a4c0370000004b26de706e4197eb7523ed738a8da7039dbefb8f88b551d3722e736c7ac00ae34d8575fc796ce86580d6af502b6f6fe9ed48e9527b10264f26e3aaddad537b967a99e6b34cb06a7d224f22e30000004810705767ec1a422631a898059c643fd54765b76f5c71df2693c371dfcab1816de7bbfbf000000020abaf14a480d15ad6e9d9f50e1e0bd937e4e70fd2060afda42767a0fc2fab5794000001a6000000a915eefdbbcb56cfa5a42b61a0bfe9b3581fce9b11d255402231951fee1c67bbcecbd281c7000000814eb7f2ffa1de47d109c1bb0ab46e4faa4ea843e9fc43a7c03672ec1be418bc1c1657c261712b324395b78fd275477cf61c7694c0ad9aa49d654a049256f4138ea0953963353c8e5fd4cc5d0e02e803acfc5f8178057798929f349129c8447a3cf01e952acfcf77fbcfd2346feaeec4247f12a3241f63a3efd6959954f926d078f6000000f50562b59c27993237b8129178b71166dabe10feba925b2ef0bc4a2647664ede533c6afe52000000cd1474623b981dd1ffc25f6820e181f7d26a52e249234a9b3dee86bf834cbb07a62daa01e59eab50f4e7c6a49a624036f1fd59c2b25abbbbe17cb5cfbcda935f7ca6136410823e47e95145ceedabe242e27fb4a77d7887672de97e7604bf51cc7dbf5bc5c23b235673cdd702fbdb8b62d04c764888ea6780fa16705c3db4d180c9f6f6d69704b0b3abe0ea1bcc19d54afebab1278fc57b79fc5732cccafae502974c5e57ea424aea8b3f93c8ce601e6b18eeea0ba5ddcfad5ecf0d625007c2b0fcfb96d98ee0374b9dbcb865b9e00000016b0000008f24d3dc626e2df668a688407523eaf90cb88c98f541a831ccfac166630d6db197d41eac8100000067ffd1159c3bc6e485ed4836452c48ff5872529ce3db7a4ec0c31d051275575447e5779260a151ef018015c8efd94f89141738efc4769f7f3ad36e4e0b5a3b638f19953daafac44e588548419df11d67d5d10b1427e89d45180d2926726f9f2e4c703726d574ed80000000d422f6f9d38ef52a58a4dc4db08862682114c6b852339196f6ea4113617e247bb0de4afa7e000000ac1a854bcf4896820bb6d71d54483b5bee7135edb0e2a2e5068aebaab2ca4e9535c4cb15ba88cdf2346cc3c714cf5d92315839b563f9b517fe2fa4331a84429f25f8f81e18c8d37e90e5870876ff5d1c8f8d0fe77db9ad6a413c11b8df6c64b17bd18704a0128e74bac396e731864a75976abd719f1e6e2bb7ad09a1952ad9be2e1c4d3afc102caff2f17c786d92df0b888e67cab538644ff977d40f915df97c4226d9f3c0bf05487c44cfbe14000001d4000000f41ea726ce9832a44ef581c707055f3e3eb078bd9ffc87a7986de2f78e808ed0c6281f7cab000000cc589403c03b0960a8bcf4a8572972b1282727202ec819d4822d69e5de2aa76d7f596313f89c5a4cdda52a3458e0cdcceb84667c6ad9c88b5358b326af16f67386baefe460f91b5775c26f7c7c66c48e60b7c01161eaa6382a3ec256fcfceb16fdd2efac1ed3e79624bb3b3631673fe732ba31ba2cc9b15c7e2528fc87010f8741dd7d0addfc577d74b0fe0faa6ff0cf68e99bae2054bb9462222531ea2f5fe8f2f38ffad40b7bbc00dedd6b2864990a45b2d7f806c05a34496af7a8fe32d90f4bf915b1bca0d6696b73d4bfc3000000d82e81144a1fb567afa20fcdcfe8fef115801905a5c1b21ad2a137777e9a9e02d225b1c9de000000b0368f4d181cf7dbd33868cec8e741fc4cd47d9d2749e6f2e4eb0b0466cc986d904451434e05a7ed9a09cace8aca220e2a0ac385ae5b26340be84444aedf2507727095632006984d8096f24402149ba26ee8baec701033e317bf794b139794d6436673a7fae033d407605f2fca9d7099491e9dc957cb7737bf4202f62d5ce49909e2dfd4d4438cd13a42a1bb290bfc5129445c4341cf51a51d070aa39debb2822267ba549e0f15571e21745d619e54b77000000190000000b429a0e4041fd4e7eb4375b506b6d7dea60f02e80dd02785ba95220b8f3fc2702c6c0dffa30000008c27cfbde2231a4f04ce1e1451d955eaf662d302c6dc0062565751d6534fbb966ad4b2621b465e698982f1d8df4339e84263dc8e26ef6c532c54a919c209778b61d3218ec8dcd4eafcf7cd04e1c6fd0f4e13712efc0fcae86732b2b995bcbf00eb0229b61d5e410ae84fe8874a5c05e96af66b4fe5de57746138a7dffd8c3eb3c6a05a265e1dead28d89f17e7d000000d41ddfd6bdf9b673f023f3988aad562675c6cab589ec985bea62b5efc6b64c44fbfb25023f000000acffdcd67414e00d2eb7b473345f54ffd3036088fcaa0a28d105441371bdb9141c2236451c4d9ed87804f047e1d3859635acc15822e2512ccef87a1aa72329b5bf591152a77db0265333f582ab56a074f8580742ff7c70e552546d356072d7667538f15a280dfbcb4ebc24fb517c09606c9670de2a1ed83b07daca2c47adc531dc5863e1bbd274e7db2cdb915f0d9c09b1a333842c3e95192709f6d5411a50cfa0f82697e5c189071c906d3fad000001b5000000ca13919e6f5d0a24616033dd5bb7881b7f69c49528a36143d09922ac9d0776e0e65efc1861000000a25f25f9d0a75e98e9a14b798dbecbc7459a947b23c821e3b1dcf8ab88339054bc28d03585895422c8470215d4c8b12dccb53b377278480cc9433f9ddc12ae3b5e0fcdc61d21290de0b4c8faae622d8345d7080aa738489d289c29f6f4263b146794fb5b45e3a33c3c2fdf765a7b241fd79f32ee4ac5bdb2bb538dd5c4ff932590d6b5fe1545bf40313a4fcf036de2ddd18209dcf4d2446bd1acdc770ab69ba7e42edd000000e30ced5dc180e58b77c6cd5cbc215960147b33bd8aab9fb9873deaa58571423ea46126aabb000000bbe31d7cfdd244f7bdeb5e14bf8442ef0100bc502f847f855649f30700ebef4bef48be92f8fbe25b96e6a9f4ec24049ad0cf57ad4fd59723900479294b69dcc32e5784937b62141341909dd4cb0fdd59f85eb65ce14f4602c5c51485b90b7b0c797d642934761e0aa963669f8730371699192416d0900f526282d85cf232ecfba77583ac61b1ca187da9d897d86f942e8bd4f1250c9ca927f08b8afe8b40a8535b95612dbf51229b504e58c5b5712cdd9bb8c96ee6de4625b33452870000012d000000d402749b1760cb3568dece46058737991153edad29ebc76bec33feb59f4cae84e55a89d0f7000000ac1605a1a532e7f12ba58cb06322750e43bc860833d36e60e53399b6b3959834e90b49ff69c9dc1e2c461554ebec04da63ccf82bfaf6dd0f3377054918f89be463496612ee7ee88f817efe9c6fa8e37f39d12ef9dae4a37916b4143317459534c0650a610747d7d250bb9ffb557a5284aeea720141e6c7f1490b195aef7b5aa01c47f70dcf30d8f14fc11c042a1c69d796fad970920b71bfae0694079cbd0e629741316a1a7f145962e4cba053000000512ec3b89cd20d2ff6732ab8b4705acfc7a716aadedd69c3bf8c0774f6ddb7e55d297b234800000029254955c18d205e56f688fff36f4f6fa6c8e8a0970b9d1e3af7be8c7cc18b6c53c6c0df35458f6dcbdb", - "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925", + "archive": "0x14a11d8443512abab4219f8a7b56272938335a5a3062d3a480461a499741360e", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f00000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000171000000000000000000000000000000000000000000000000000000000000017200000000000000000000000000000000000000000000000000000000000001730000000000000000000000000000000000000000000000000000000000000174000000000000000000000000000000000000000000000000000000000000017500000000000000000000000000000000000000000000000000000000000001760000000000000000000000000000000000000000000000000000000000000177370000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341100000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f0000000000000000000000000000000000000000000000000000000000000559000011000000021c000000b0187348cdfdece77e4f6d9fdcc65b6e2a8465f4a62844cd8f6fdb7370e7e30e1b0719e6ba5d557a49732d3b54ac3e974297226e75b2d5e3186ebbd216999dfba8acfe8f1f7615004fa5c9dc81c62268d3d10ce11d62fa12ea6c78c39b0c6041191142f5d5f54ddc3a0c3a88a25d45ee632bf919137839a907dd81ea9874e15143d51db8440bc180efca4941e6343922a720c8c17b9c59006bd4fc84f129d8b9836cd0afa6b65ac221df20c95faed7b601000000b01f0a63bd89a183e99113b11bd20063bd199a98110306bcf5eee4c532ba0a3399957d853c186b59873a30c3e84d6fdf5ebf915d278376ea294f1815a00eecce4236e8831516c6f7245ffd8195f9def5cedf630144362f9466d3f2cde01e0162ed49377c8b6e42a7edc215e35a62ef379a2407e907034726045cacac2227c9a6402e7f7adbfd048769e85f457ce134452620bda94d8bed1bff4eeb041fbdb769fdb9cd00ef5956547c9cd4cc2b6a2228ca000000b019c40914d5e003be73d663ad478a008e41e3d572525a32c40700ec4b60056703eaab027c0ae2964d961cf8a2c555d8e88b2410807de958cc095980cf0ab2d578cd22ef3b0985ecd892c71c8dd6063d09609faeb75b66f7cfd6feb0cf3fb388e12966fb9b9a00aeb01ee69934bafd92ef11f426887f0edcd2f950d06fba9142880636d584818ed2f9264940b1a34253671ecfc6abc980144f9b146fcce6e0e4111d070b929a5d266db37956542a64bfed0000021c000000b02df416918d01deca6591361ad74aa4f155347ab8dde8b85ea43c524f1d459943f961519a95a3860b619391637c3234630a111908f8d1badd2ab66194417f28c3e262aaecd1585e1e15167a55162d4df919192bfdf117aab2a996b8157adacc1297f229368b1cd687f96c64cc18ea538b039531140faa7de43871243d9b5b8556eb432e2c11885590177d6059e350399f159612883595b7bb87faf90863dba58d51025904d40f75320cf58886b07e6446000000b025c9339d2cc0481302bde2ee9ca15320adb389039b8c05f737812ad8a3bf5da59b8344270a1b8f99711123825bafd289e3b31845fa92bea269a8a92c54fb0fa60e9d5e609c5bc7e6e1254ac89fc10930ef043eff791c917e14aef31f8cd8b4897ca5bc4e26bc340c22aed8134f074c14298673621d002d5a5d996065eb3237b43dcefc9e5ea2bebec150d2ca11e126711a99271aa15efa2f25e84c622defcfb98246d35a57e97be82f05371b59101dbc000000b0137a91e6a9e0f7cec8c222d672206c9d6b12be71e4c82257dbdd50969b331492bfde779367dbfd59b106aaa03bd136ce1c87cdf919ac7e2354d2811f6e63eb3a0bf35fbbe43317d2f5280c13630c20b16427c4a1150850ad596aafdf64f9a0f828ddb8eaeb65b461c735da0271d5ec6c02ced43e2e0451a4eac53cebb2b7f2657aa50b33e60eea4aff180f844c71da4205c3a498680b74f4acf52b34fac86b1ae1ff30a2168eb8b34c640b4d95b084960000021c000000b01eaa9d5ed183e6c3bf8dd504f614476234d77b65b0bfc66cc04aeccfbfeb968f232af5f3e123cd3cd5e2a77ceeb05a6832fef64f9c440f4155e0bedd6becd5913814ee67de5e31c81d0ce50e7fa5698a8b05f155687a6b47a2bb61be939d6900c38742c008ea76bcf0caf172b68e79fa10e32913039678e8d1e8e78f21c3ab758b503c257a519a63fddc784898916332104d1c1a9653fba9fa4c31047c3bf4dc89abb1d4ffa832d871f7f89f4aabb768000000b02a9f857abe5036fe457591f3a8d721621ac3dc8b55c299546d3069d8776b922421c409776be7f3074e739db14602df226515dcb03ebb6abde0488098696e751dd5bf0a2e8d1c46eaf196fa66694bfd6b5b84106a0b604f635267c92d89e3e67ad293720433d69e24b7b1b03f494eeaf91e3d89a2f55585477a08e6bd8515de7596acbf66aff01e8a15122d3ec5c01f0c2b1029ebb9266a4e4c1f02ef5995a50bf26005adf459894cc3f0495628d5245b000000b006cac1904b422036903fec5fe12a7f679d91b77fea8bd93dcbe658d846fc9c87b204347a57b7000f660cd37eb6338d43d020248997577f181474454562f4b1a745b95313d1b555c70f82ba3029d3f01e226978d715f18e66999e1759ee3f492166dca2510bb7e55ca17633a249bb52db2f60e39efb3c42cd292a8e13fb5186065db71176295c16da06b849541a93660c1b0b4d655d72503120a430740e4d8d7fa2f518874aea34363d5f312759dd477f0000021c000000b030454f79386f838e4a858ab88013afdf727252555c0584e18781432b4bc391e0f1f51eff3d2a75891527e03c288ae3814c265f0169fb21789754912b4a5a46024fc328f40b311502b060b404296fcddbb004ba7d78d154048a66c0f8b540bc2e6ef8fd98807f69a62e9c705a2cadf41a181488785b5a9a92560b74f3984260ad9f305065b3f2134c9e372ea3c2352ebb26293fe68ec259131f812c881c2a5eec57964525d2c418f175c0ad6fe0698a5b000000b01430aaae36023e248934c0d698510e621f29416139814ee52f7c29f118e09448288631ebeb78ade7c088ec5550c690af26bdbec8d8b37abfec16d36ac85926203e9e226395d47d39c95259401e3d5744d432f1d308a0e446010544519f8a1958c9f20c2da8c3d4f3e3b06d33b04b282c1fb69d1da0cee5b327a0b65f466a269af52ffb2c3eb78ea70b2c525746238a612018b98d4e6bdae9c216566f49f563dfa36efb5761621d716c3b5afe125fee87000000b02a5d75ec1a949c4690761ac9def9ac1d76e5ef52325f8c77d3ef1ca6009edf66ca76e4ce88a33df4eb0f2c8fe2230171e1e3a68e9207a575e0d5d28cb1b05ba3293963a8e58f981b44bfca78d7ac52ca66a73bc26b2cfb0a2ecf69023c3858a7d7a14d1fac3d4137d8fc98953ccd82c515c7cea3dfeec1d02e6a0cd8b395960c516b8ce1aaac138c34d2e6f10ccdafae0c9cd6d2f57edb8f91616747f960bbdda09420a8562c3e10ab1ec8540c1d4cef0000021c000000b01a229afdae188ebb871884793d7e2a64320eaa07b7088a1d3b837e9cce77fb6feedf0340954218913b2dd1a0fed8a27671f466116033b3abb514b4a9d47af4d6f15d6f28399320d0924cd2a9436f40e708f2de1e8cb65b01b41c294ab21d43205d28e3d03f535fee10f4ef15c2cd6d8a2bf53215c72201009fd3d1f214c91093d860c6dbcf5c189a7f5530b3dd6041a7173002828e442f08ba398d6964d6fa887ab6a992a1cf90a19c991b82aaa254f1000000b01f45a7b400237b2ac6d4953277bb740fe2b48d28b56ea54a9cc9e7d8e2411372d6f520af495d2e6da7208dd861cc4f4bd4a345697c133ec041326a9f40ed7dcb050edaba96cbcf2180cea376e59e28b82a480b283879e7be99cc491a1cdb9a8394cd3cb99a25210f8a4ab130dbf4dd970389eee39be3a03b56d5ee8ee54506690a6f8afe6503061458b564f3b23ed433263ce6f31f257c7e31cc5d9580c1ad51ec6065aed557592e5f3c0019bc5948c2000000b0244a07c278445c9d101b738abf8c0f9f5031e313800e65d83963f0a70c8fceaca82dba4d4df984a9a337c5d81de8f2cd6fdfdbfc6178f332e57f2418e910c370b7473229219b85d958745ef82e2f150050c08e9fd6e91a2f900ff0643680aa3506237b5187b2ce92baf570395e7f152f0610166b0b957a8c2c11cb3fb01f3b884703c87b28c2dac874ecf8c0b7bfd64204ca5993b51ad7eafdd8d1b91bb3ff1ef6786c7095f98b0e24d4349d2995eedb0000021c000000b00fb685d4863cdc5f9573548665d2163097bd83c2b619667fa13f1fe4e5a384d32bd1c7fd39ad877e1043ecd238bae27f11f3bb52f1c7fb9438209efc08aff5f2ab991b094bd153e4cb84499be74834d36308db9c2add68170801dd2611d08a0b2a47d713b91086e63c3985cf3afc72c92100441ceebbb3a9c7cd7bc49e88e18851c606e8eae7e3d055f30ff9dd47001e100a80379a38e26166a448f2d1587722005573329d0c2c0f371a0993c713ec15000000b0050ac0ba9c8f704fa6b875b8e8409a552118a4b357350cc9ab445aa4ad1966b7340e33a34b8ec7da219aceba322295aa988638cb46ba46429da3b6da1faa526b288cfe2255e529e559b9c07f267430a53f35c5e50d0dfea8d3d62ae89bbd2bb4a4445abcdcecd39319a0712b887a0c3e00a5c23b74b7a38ac8875662b5bf03294f4a9d831d16d714b28b5e5fb4951df52f7187ceb292d464b77ad61677d35fbae89fccb8c76f81964e421518f87788cf000000b005f32d819164e8983ad63df5cad4b4a6a1867804e66d0a1488dc14e6563d7702c49757b45154c472a31b2d5248639c29b1c4d9bc7a3fec4db3a681d279eb7a4f81c4f5c98da75f8948c8033ec91c6f35278d95c125e78022efe9bc04057ec0a77ae49d53ecd316d4d4f2dc58b4f758e306cba6dcee1fc248078a8a9b933b2c2631e50a3ae183ea1ccb6a9cb6d744519f0b8e0e33d6c422095ba62937362c252db3e5b38d8f5dd16eff1b471af7f98d1e0000021c000000b02d1b08b55d9a37a67477eccd429885cad8736b2976b57f171eda5a46fbb2d79dd7d72bf9d326e5291d9c26d31f9c3f608006366fe3897574549fafe1c7681822f8d4be9816b2f413b93263ce100c1e8c249eab72754623b36976072e8a2d18a4918ea04ab319b1a9ff3b04b3d517685a1c87e56b71a924f309031b54f1c833297eb1e5443d66c8c8d8a17a8dc634fc6816895df8daa86f1ba3453e5e8a54d1818805091bee5a6f0bad728bde0cc76b85000000b02281568f269edf6672ee74b7285a22e35721c9d2608667e7a3b08b720ad9b1bff06194a18a9068ecbe8f19af862eec4eabcb549e47a1404c7898b83b445571546fd1419bb12d263a58ffb763c45ad7b995b94f01e336f534a42bda80a7c8250c9a7088164d9c3716f2d363a1e9590aa10bb3767037c7fba6cac067c6492f0eeef3f58a61f32f58cc23a3c615e3046dbb0e8df3da5e747ff50a3f690a071989c57339c5118065b2521a6dc626cb8796f9000000b00907ceeca11b3361ae8ed6c935efa4ef73399b50f034bc3143ec8f7d00960c8aa8656b42c7f0fc3c371ca78497786eaa1e817bbf64dc5535039916a1230604ee7a821203ec9fa9fc5fd22e5529a890b355354675b0ab042497a6a91d72f0911dce41d424161d938818dd6516c4123a0c1fc4cac670c284f7442b41dfdfa72db43d8d12b63397c0d98539cd48e7f977d00ec8ecf9161886cdaaef498fa6501646e571b67acb0024662bf8f80d3d677b320000021c000000b025ecd570c268bbca31c44e9a05d6d0ade11ae0187d81993b00cb08c9bf4fc0c83030d4807866b9768d1ee367fdc647f54fcf92043f86bcc615ca0bacfef4f91db0819058e008542c721326af5c3209dd21cdab9f215a7f99cf19768ba0fc09bfbce34d39bf2b629fb2c028ed7ff0327b1ce93d91122edc7930b4a837a15c6a631c31e62a1030cfd5e9c2337ce3f22d412ee94a879bd4e593cf240d2b278ccefd7bff61afc2bfc1d03ff823935cc8d6b1000000b02793ed7eb3346bc20379a9629b4ff56f959345abbec90e12643948efa1be91859c3760a39881607b6056106711050535d19aab0c115756c94bb8bdd361285504cf7f684b31c34b54a5a552412edb07d4649f6786644782d50dba43c9da21cbc1c5e6e510d3b52058038f1e45ab950c791a3cc5bc8972c91563f12260916be981c6a45c6e230acbc99390ddc98d54d3380402d114290284dd4e1049a3f47355ef5e4776e4b5191287e8b5cbc1b3ff266a000000b01ea1a8d0be28e811a754f3afa46125fe3b7e2cdf75f93edab5e108886441ba0ecf80f18e320714e5679f2cecb34b1dfce1985bc4a5acecac6700dd6446fd61cf366666bf097b8641e320f08fac4e7d80f28aa9e853e8a0e06bf590af03f90728d4c769327c2cc9c2c2b641fea0560ab72be0ebda8dc8d5801298abc09392a1f0133b14c1b5ddbb5ea6711e3aa618e690279c25f0693961910be28dc5eae6056f0e4752f2595aee994d211c8686649bca0000100500000098000000590f1683d4ecd1d2bca9c9dc031f2ba188b8b06204fac915d1852269ec73ec08d6f2853f930000003195281adb2821114ef3b7ff95589dd5900dad8ca081ac03ff8a1cc315940c07df9da92ac04b9ae55ab8285f32e7685e6ba600000037119ff2e9c0773c28b0b9a0b750fef12f973c71afca4b4ae97d8bd8bff947eca4698e36960000000f00cabe629c82175a66a170cb6a67f5000002280000010f06d820a7764ed785fafa52bc4b5ae4ec2c9c975cefbbf478f030ec7f8a5b717dafd9a772000000e73b0245912d2acecd65b71f31d7327da99ba7835cd856173bd6351ba4c5637acb1c5333a36cd93bfc8aa317657c6a6ef7c2a5d3b87f886e87f4e204e6f6b67721c1c35f5abb8d4a7755a4afc4d9260f87054c5eb1d48a98a8e2de552f974d855c868f49724ec02d1949d7e84c1f6516b07a00b9f8a6ff5438f6eedd32a0ba85d902a46a49cfe106e1f58721f7f10f14ac6824f0635820728f945f53ead0633287da65ccb0cb63e50b55429fb31bedfab533fd6606989d1e03a97dfd478c0bc0035b56dde3d06e048cbbd60f3d45c5fea40811bd9c0e49d2356a0740e6a7d5ad1f8679c3a909151300000111202a1f2b513d84ca163d61c522954acb153dc506acc6fa40cd86d80b74f682f7ae1ce198000000e9edbf9bee9a1b27e508168189aec9c2fdb5c9e8afca6ee0449656d91d7a5356e7b3aa2376592d6112884156003290cdfd8f76d4f8a5e5f00e3b0a92f247f931bc5d788a108eebbcd31baef82cee3579d0e6a0420cf0d2fafe39a884cdb830b1944009c1c131b60d022e08e501152a67b5a6d08f1d9bee735396701bb0c3142e14728e873467dc9ddbc7e81208de2d8fb16cd02400f76228f1ce37678f19c01aa06e43bcb227643f8acb0f9acbd8c27d7636b6069d32d691e6d9fb8c3b255c1c16e633b9a78bee7a327787f32c14614cd28ad8e0f7b2e3471af9ede27cc175e0dc85b262d766efca9413000001490000009f12b326c4e60758446c0c2fc5888a8ba9060376296ecca47c5218826797a0ba5762c158a6000000777d5705d4b85033be7c0f61a8e09ffb8f9113c4f1805d4424671ed5fde86efc082841662ea2b7c4a0cf4f0607d546465277812460c505bddf4fd58a879a4c827e9674b83a5934024e5cfea1195932079ea693d99f1564d99b4730053c5fcff03d68327469ecba078a5418ddac502bd131d52e1398e0ea61000000a216f68f56c1a06e256da5b19d0753914277410abec8028695bb04abca08aa71073bc8632a0000007abfc69fff12da8d0662455bee6b36077503ab6ad1c50f90bdafea6c556d6c6a7b967b67584d4ad3f416089ff94ffd658c830ba92d11700cbadaad0051f1db8441ce8c90883e28692a8b651ce9d15d867724c6421121826008ae896e96917fcc28b210043f692058ddc7ba5034bdcbd153ceb0b19033dd83e26665000001d4000000d62cc29a95c99fdd551f7b32391ed4d15ace4fedf7f137a8850d364b62057794c71940d10b000000ae048b8108679549c377f96f428601cf08d8f739c619f54b351330ac3953a8a967ce5a4ed839c29a8356b17671aa1789e803674f6b92c4a44bf37e017d7df90a5a28b04e3f9b4f1ad01fb4c8134eaa2a07c63143cd633660015abae108175a6fb81bedef564b26204c0a85e6455f18e2f02aff3e38052178cbd40a93f7870af1ad58a1b4e7d095f3eb241d7c5bedb4f3f7b0f6e6e98f542d93378d224a7e056b5de807d843207eb97315e46ab0d113000000f629c41999589ef713f748b7f1ebb48575292570221d06eefbb77c3479bcecebfb51176796000000ce45bf17e2280bb30172a29f299000bee50e2ade365763a93faa041d026b3779ec39130f2cecc51c3de949723bddc22f0f9b32e71a2c3e16597ae2c8defd5d38234a5cc4472d5de72484d7f8063803523535e8187d38b2c41c4597c1af928765532b538cbd12d512bcfdb2e64b04f4872219f4af7f4fd91f55a4563f46db59b57be1865ecacb54e413e2904ea8331dc74e5bd3746a6713ec8d6ae42b4b928f75f8315e8477a9ba83ef1f240b6f6ab4d2c7fa8bd345ef1b4f1cc9a1d5e40e8eedea8c826de3d32395cdf40ba1f5d3100000017500000099135280d2694db7475f0c43a4d94b3bf2b1814448a896993e88a76893a1f0e8af524c5b59000000711b45b1c004e95e5ac3cf2a5e0e689c5d8ae7f12cea37ce1705c72c19531ddecf8d39d3b5480648b3f9c753471692b67a175fa6ce754e1d286937162d10ddadb5fecd6a504e6c79b7928eb046ea43fc049178e929389b0bc41fab3fb2723e1956cef293e16d32af7a8a6c68269149ce8d20000000d4038f39e1d961e1e9f3beec01b1e13d7cb4aca199d5bda68225955cb28a2726351e7e890c000000ac1b17d9eb418cd60d1cf7c4dc74d50bc860dbe8cff0dbb44ec0c22fa1d9d7ca3c256bbecbf96bb74281559e7f7aed42a5e6cbfb5613c3ae6dc1719b27978c9aa111a3e9cd6383923cad70fab25443b828d4d1b2fcb854df1fb27d21d18a6880eec7b58ad750862504837ea0fe45c4e569ae985ce1ac30896e602d5ef511b495580efd51c9f64de105a99be15929bf0ee571ce69d993ca8b2cb9608960ca3d91d7934c85a26818ddd65fc3021e000001900000011b007d8919110ad45c754a45dccc0b79ab4c7ebf3e5dfa63eff9ffd81252ca937cebf99d28000000f3871a2e6710da5d37ec433641f3ae6fd174f1b68814375a6242e0f2870c88b10fd72261fe7cf09afa628bc34ee28a05ee4de1a7e3fcc27c5ec24077234ef68b40e536d357d8881c149c5803b743eb660cd81932e502ba792ea5753895e5ffc373480ee2fbb22c0277737c1528fb4ff5961f83853a0b0bc1d0e00cf68ca121702d3408e282f74da0c1fd312adca727f7bbf6bf277fe7b81bebd2fe24508f95a743030b5e61878ef94015d96eaac74dbc393391bb0cc0a6cb712163b9170656189c9242ccdcc0eb6342e87d1a7bcfd5e26a63ccaa32d7fed41a06ed3ae5917ec2a07a58e232bdeabf422e497e41c82c9a200bd4b20000006d0161e53fb586339d1af47ae995d49e0aef1cd5abd8b41b80a45c1489a8da14dbfd03be4f00000045be8cfedb8f2233e9709388851d565fc36a1e565c046092f3f0da80951c694acb8368b612c8338f8e31be202e132dc59c12d14da3aad4594270ab35366c13618e1afea02a76000001cc000000ff2dba06df2b4c002e3428490c207601a912f764122f9b8258e5a4eb613850e4efa4b180a2000000d71e429b7ddac4d99bb13e7dd718f0a61a67e87df22b49872bcd019d239fc90482a86748fd45d699de4253d01549c90e5ba253d25c5dc7376e431c793f3775afd13581a53ec41dd1ff2fd97b5ec90d6d0f6b4acd75700d3d645394feb5e1e2aefb42482dd109efa189621bda27d7a06a41ffac2fa6bba0b6df93357fee3dbf9e7e7b2d42bd37be17ec142e3faf4435d2da38b431804483f536ef703edd2bca2bb38a2d7d6a6b00bfdb319d9089f09089e3a96a42c69cefe790c4db5720ee94454dbdc786e40b65192a0f7f46794ef77e2332816720c6917b000000c507d35327f0111be8f7a2c0f9921bb8bdb869a5fb6c7ee0bf31e5b751847ff9cdbd5ba6020000009d8120e8dd41ec2bc6607745d230e082afeec674e7ba39028b48a3ac9d8abe5909f8250487e1d6b9e728c755211b13e936918a885562b50880bca006d46c5d9e9f490c8fd5d7b272ff83051d1cf85f94c1db65586500067961e3c08d0e6fa95149c43e36e0239628705bac801f205714ca96001e1e825b27472a1f36c8928da766af0d42e80df9dde26c39d2dce8930fc0eb8f5add594e0d828cd46012a7000001b0000000c410f4968f70cf98bfff75a4dce1f9c02a6ca32e1760ce2a6ef0a7d2383b959f76553ea34b0000009cc5423acb3082b9a8953662b79b8d1c504652e3d581ffda976030e92cdc040453a5b54efcbc0e7c33aaecbf1598ab134241d2110c39759c47e0fc97e923e95ce63452bb7606333da18fb7d440218eca1e4bddf99c91d1ac3707ed0f0bab371e560815f11c778587a1c842b6a2c8ee8b7a94d6424067e65aebc164bafd85f5287fa35d78a5f757075f9f7ec27597f63c5be4263f18d85106a72ed138c9000000e4035251b5a807c90fd919ac7a609cf63be8418db8b5426f90e4dfe837ea3e5c3337a5fd9d000000bcda1fd936638d123f8ac3da0b3be40f97914d02c4238c14ca15b2d0414e2b5746eda9ec1dcf61f67cb136de446da71c6b01579c569d9e5e9ccef815b87cb3e2ae4bf4fd6b161fa9a33da216f8e45173e157b5a13d9dd96136eddce1bc5f02f73c65c4ebcf6a23526fce2bb9694db9301a3f5e2d3266d974ece47e9c251604643e49ce54e592a0cdc9bc73395c3049ccc214de47ebe6496edaf356857848cad61025b9168e24ff5992ccad5159ade60def20078911ca3d71b3b18795e60000017c000000e012867423643740d16f7858ff1975a1eb20128e10324862da855b1802ba3e45b59d32de80000000b8593b66099393b9c1f0589fcb7ee9746cf19083c438c9a2271db3332749025b1f402f03736054bdcd3946648df0bca6307390abc994bb8502fcf07b7b60a99032f2bc76fd4f9787cf9aece6f3cb74ac8f0dd8b933f5a6c3bb1fdc10b133f8dbc66142a63096ba6b780a0f4914301d4c37d19960872ac0e8c074999bede96291fe44191e98695cc53da211523a6e7f09f1e07340a1e50cdd80a60515a842c211cc7bfff95925a44a47f1a2dd0a81d85e8d819dd782d0917c530000009411babb6465484a0f18a14be995371acc7cbf29e611c3a2ff5d4120f9d542ea298e9169c90000006c23afcd8765d720f4789dd7bf78c4fa4c0317cfec12e137a00261c63dd754f75f91e3b09ec034f9f4b66b6d024529b57820dfe473203badb4ac08f264ff7adf0bd813bf6cbb8cb171ace411cfbd63e84eb833f07e3e15625d44ca9826f3c5829e5e665a094cbe8491228141d20000006f0000003126dd7b412346c45b555c05818e0c5cf0644fda95ba52624d6c71e7a6df91db6a66b60dd600000009688eca00945e81faa400000036300060174f4143162b6201566eec1d3801ed41c0677211ed16826afbb3cd66138281ca1f0000000ef89b4234e48d0e3bd0b1b4b9f26300000190000000c505575d211eafee3eadfd9eea3615a9d97ca37d610475a44f2d6acda2ac88e10fbf634d590000009ded62917cfb9d15c2db30b3465ff9ab4ba819d58b1f2689365270a41b63d332fed0708eac17fd686a1339cdfbfbac91ee55209b3072dc4028b1654074ec2fe0a07e3889d4892a585c22c8c1fabc129db669fe2cc236a3a935c2699c51733fc8b5aae918621bfa436495f149b15bd4ff92b6b76e32de71bb4be05ad40dde4869ee54467ebaeb54ee95ead24f9749d679393cdb7331bda71440fe8ea5647a000000c3279096c7a640b405269cfbc51d70ec05070b90a65129df37c27a72e0d14370c69698c5d60000009be7a07a79f805151c09d4fb001adb576e7f7d08f734f290fcb2af6691c3d9dac2634071adb13117fda9e28511b4b9d227fa276bee093aee639e85b0ef7bb6cfc05d769efa5a79448a389e44f115f789b8626377bcb68736ed57157434b9a18c788e6229219c09d7be759b833c711caa6242b6b9193acfa69902a2179c854e2a818944327aa1d125f5a8dbecad2aff039c1d8b776a4a8379385c0ce600380000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b7370000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b60200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381100000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f0000000000000000000000000000000000000000000000000000000000000599000011000000021c000000b009d3d44fd0eaeba6734dae41ddda4667a43b7b49b579de53a259e9eef02507bb273489c126ca94acac599b2d33b177d1e791122f99482b38ec004767b4808d4a6ebeda16c539174a8fba245d7ffcfba9141c3f172bc4811d94e2ec6e7c58865c62a80dd019399a285a35ee9b405f0b5d22526ff7e55d79d8cc74e7c3801e9716051be99b2418d76282818991f35520ca134213c9688410f569b7ad4bf0045cfca3a48caa45b982410ff2cc07fc32c274000000b0133efe7004005e42d13214b53c2b9d3a13742f3cada32113260615fe1224a1f876d5ae7e369d8b74b5e9b2f56391edc903212ece6530594a5176a993e12b9d02f9aed2b8a851cc4b9bd96e21296f54597f44f7df7bd93b76b0253b4a79b44214ac49474123ed51899e3b47193fa3af8a2c2cec7cc07313f577c00ec1066847bead8db5c57d3de9fedee5a98aa9da7d8711342426e0aaaff8027537b09fbf30cd446e3a4f9ef77266e19735e23473dcc6000000b02e5aba0a5d34e41170bfff90f61065b50a0315686cab19df15dcbaf80fdc8ba114d8066255989fc7da84cbeb0d04b8a7c31f9f77f509588aaabdbe34269121bb3464064d24e2c1902b44340c511c34194e5143aae8fe74b1320603add83c69e7a7ff52acc70632f67c16ae9c0460709f2ff4da3087c98faa4384b7d679bd5c5cc50909567756b33a6768682d32e42a7a1d3346644a6ea8fbbf3e2ce4861bd1a7900dc46d6649348644dc1a11974545730000021c000000b029305c9333060680e3c0e1a429b4266b5f4145b4f24bca2e667bc3d7ff503a6861ed53db1ccc35db38d30594b6bdc063014f9c27b732a8a16e83f96273d0a7771608cf68d8ba1a7f7dd2746786c0eb5286c2243b250c5b8824b87ba3718bdd8ce99eb266648bed07d5216ddc46392ef6203e9e53fd9b49f71f6bdef5920cbe691e58abf202716057f2221569ae40214f19b93550aba711c736a354f49f64fd4eb36e82f9303f584c77f678fd1ef51b17000000b003d22017d1e711cb951655de37c06370b887331f5a9c315d28c226f95712fc7c925192979267fdb60fb16eda3d186d4538cf918962b5f49e037dbd63f4f108c007e9457fe95f77b4d1d98a56c38709f94608a810975d89dd287d990673a67ed0f61c696328799178841250dbed9d7c0923feed4a2973e12c0673af8500948d22229dabbc63015070baf5906298a9ecc52f1f7bdce9d7c0b5e2d697f9d11da52259aca84949e5edbd204da24454480955000000b00917aa6f898b69a3e6a05218ea49a9723294708130a5ceaa6b27afbd625eda282bf07b625ffabe24c1cdd94fc389941da8d26c2a05b3222a9731f388dd37e4a1581ff4824b64c02bda836d92c88fb6541d141dfa41b7697210b4f8b612ed1cef62aaefa82ec0be97042929802b933f5508f04285fb3184a88a8b6f72f6f78ac89e15dd9a821d3c201215d31c047eae7c1a775c1e86e0d548e4df07c1765bf145ff3ff216ec19d1f8de218d8ef40213ad0000021c000000b00ff080a3ceb1553b4a83d5e44f1c6f0ef7fcf72ae9a90686365987acfa80fc8afa99166c0c0145cfd0329c5cbc3d62f46d2e81c2154f714adabbe0ef9f8f6552f13b3ba8931a37e1592dbe3a5e6ae8b3d932e7202e3bba002d36ff085a652d302526c42ddcf7e3a11ad6a7b5c56dba2b0b3c274eff5a5a54799f5c6748f609cfcdcede1d508a889e048fbafe3ecfad410d8c8cc3df671104abfe64ec142088e61449f0a9da5772b27413c1922079ffd4000000b02833cd263fc312efed78015bdcc38ab0f974ac349660d6d829bdd9163cbf501a7c59988bc40b4bdfbe34f38890e49d9b34794d363ade80604d2ffd4ed1b4e9286197e246ba99bb9768f05ef298566e3682fc153de33c2631584d19d6a6c6e56e95b48b24ae520d5b8dc3e7a86bd7dd242cd60fb7c3e484a313dade0965e7398a10752acb6c714af486dcee14fa98c7f61ef72a3a13badf5c9d0d6e39747f5c7996321ed7696d9969f3f6dd2c878f312e000000b00c13c62c77b461732c77d9649dc7d07e7fe29e114d0e116938a6fb488ab5861ae52d312d8626725c72f92c2d692d2c464dc42362e6f437a59dffc599892e585993f54b75639f3a0be6eb80ddccceacae8d05ddb779b3ddbffe5503e9c4eb4eade5fda01cca3200f5c5cc21413d3224242af2a106e79d2206aca2ce1526f7598a82334910d930e01de393c6bf16e552e5132f5c00674775e4da3a87128ef5f95a8b6ead19c7bb145cb853baed5e32ab540000021c000000b0001dd5f04e4015348dc59ba581c98dd8775d33741a41666730701f6c3e2f97f5b60a3117b5635a27985887bbc04a11c1105c408e55fce7bb0e4b81d02347fbf99e3251ddd8d693099e97e795341f84a73799ab81a7f594db4bb3490acabf0ece7a464c4959006f43fb0e85db17642c472dc06b856290e4b9fcfa423ff48b5db431bd80fcf3aee5d64f2c289fb819b561016416ca401343214297dcc095063a4d16dd8f831a53e32e7fcdcbd135b7932d000000b02e59398acc41dfdee412a6c1f4da84152b5ebf642165fd369a795e3216f77ba73c81329de6b710a0250623363d80de7d68c5c44a3ff18bcd99bd149fab555e753a201ff00a5af989b29b93a0d03081221c12690e4e436208f6d3670c00f821bf619cc3c5ee5193b9fa40232114a5db6e1b475b5865c476e6051afe6e79fa799df0cc8e21c90bf9f2ec1d48123b87648a2b49b73bd710ed569b7c50fe95bd3d425ea9b9abe5e1deadc82de2f16049dc38000000b00006aec61d646e46dcf6879cbc539c745a6b96a88482f2ca5c122841b37954553de7eab8e366494353c567fd0fb19d01240bdb453f74133cf1f71bd20a2010ac6f49d06cc96d12a7c5e84cd58b0e65e84a2c4932feee67fb6695fc86f355270d1b1cf0105e97c0bf6828b6954e9f983b0f2d1fa69f15a9bb9a08b754a919664e5e9aeb2ae98285ff9cad993f74f9cf630c67e9e290a50ef60667f4e96cc3553a43ab95d9742ef51021082e1851c00dd50000021c000000b02156df7a67a763055e09525c1c25d7939ac2983986850f490150e1d37c5f89c04f2f4e7574186c960a2866840cff6c4514167e0d1c8cbd9e9d669bdc9dccb3dfb80bde431984010e026cdff27451200be8efa7b7fa381ebfcb5f71ee41e308934d27bfecda8f900e9d5706541799666c24f1547ea64f554b3bc02cba23bbbb4fa974dfbc7d3a29241f0cbb68e321e6c915874060df11c309522e9cf1162cc72bbbc515fd5cdaf5420a28990e8d832d73000000b0167712591a3033d0dac8dfe7ca1c0cda96700b20c39c68c27ce1960808916718c3d2ce632c9f32cbc404da327296b54c478db037dc2ff78ee679a584496800e007742330db9f6a9157df65b2f1b845db88488bf23fd0dac4b5d580468fe59fc30022c3ff85725e6a9039cec2258873c7073d6a8d37df95a23b8839e3808a27fc8080f7f52036bd833b13f382f07e2f4f2b524d8695d95c5b44a3fc110ed7b614e69bb0930eda219d1c950548cec279e8000000b00ca10bbfea0375627aa20d565588e6810f4d0e5f00cb1e5bde12ea2e28a002dfb2772d27548b6d55f290f9a980d069c7651ae32ac17b6bc7f7ca3ed70072d260f175a21df48c2c6cf5857aeb13ad0ee5da887f8d0521e777311d47db4808eefbab4ae691c4248354849d98a1f72f0eac047e907b14fc87c2cabf0248193a17dcc70602504382875629ccd25a2041c72a0e7be747dd5cb030a9682bb5b67c6deb71e59841c4fcf8cf23f90ed6f247ee310000021c000000b009757c9782fe49f9381bdb9c3798152258ac88e7559b24f1a2d0c88c8c130c6376a79980325e497df0ce6630cb3561f65693611079d8b7e6dfbcda2ce6a080ab127ff633558053f71b1cfd1c139bb2fe238a871a65cb8a3976b572d62b4c1fda8f552abe02dbe599eb0ec391d4b57ff505c0573cabbc973697cefbed7b9f11577acacf24ea3080dfe805cb03b7fea0002feee3c037b728dfbd875a1e4dade83bf8f7fb7e1c37819294ebd3582c8b935a000000b00953b88f0dafb02f713bc7a5db503ec44dabc3df10cdc06b6274bb7983e61cf99ddd7053ef629eefb0133f8d04838429b94df8df534c2bcfac027e904bd6a84fb3b2fcfd521c7c8fe26f714bd89c473b1103339390381041141eccde2794ebcc64d6b836511fe5c2c1e15277e911ee7d1d8f05f8d0c7e36229bb68de3a1db5cd2e0680a08afd11f845f9a80071127e472289c42b9b217d927d3df2ebfec4ca1d332a1d67fb8fea71fdcb09a492e3a3e7000000b023a3cc30512ea91a6879c72906f90d5d3773f37d40116a7169e0cf52e5cd18c12073e93628992aecf89f5b8af68b21dd95f6e95f99b4fe6e5b223e5c21409202d337cb94fc398622b6515259ba903a998f63848847bd270cadc41336d73c2d1b87d6e719a36f793de1f95208a4944ba529b4764b7cdd903b9b301e62fc18d68981ddeb83bc67215c1ce8ae0905b0d3681ef8fa479401efc8e70be05d4b92ca8857122eb3bc7ff6a6ed12bb4f9528c3ee0000021c000000b022be67abc18a83cb42e04101ade50c5830abf5f3d75b3553d880cd69656f4b4a155b67cabeed49459f123ed3c54306bd6046abb3a8e04679ce8403bda5079e4dedafb0330d833bcab66ddcd3d02460cb075245f38128baaae783695e931a53c4e391b71de84be3aa8c10758ff639ed0e2cd550ac8bea94eac614c5dcede4e6544f7cf7a4aab5369d11b27b2fab9c0a450e1e3c995dacbe24a954c24a7debc8c5bc00233849ec8f463bebb7a4ec25f73f000000b01be868e05563546472e65711734d745e7887838cbf594e2d4c550d595c7671a210388444bfd930cda7a37d599d1b048e103521b2b945b7d904c02002f4dff575ebac4758a55824e5cd62312c5a0a384ed7c29f3e48d6589043e5fcfb1997e3844049f3ab527d6609fcdfb517f6122fdf08e27b016c85bf8bddda4307e533b025186bebcb273bace7f30b9c28df8daceb176ae61ee7c2d5f0945a4d938931faf0d1e41780d5eb3b6cd2f000919a726e87000000b010f482290648c04a63efe47f9bfc4626b7515be3035f7f07f476fb076ef9ac6a6e9ca1481a30270cd970e661dbc120df72fc0bc690cb7f2d11e5e8b2106965aa3da9c371f128648bd9e8484c21830b25af193881354667c1f59f44e02eace7ee239895344080ab218dbaaf0d6b8d821f1b0f8ee0740ee9289dca33fac2c0281d52c930c132ba6388a27db449c1e29cc11aa2878c55d0ab91fc4da35a4a052e019e9b836f9b1f8eb649ca8d3e91638ae10000021c000000b0189fa6f8ab4d5cdd303463f1700a300a88d3e2678ac8cfadea1419d5fe327734a7d7676bfc40b21817360f65088d902c23449d6dc372afefee3245d4bde92e34a1affdc10e66553007c9de5c566122931c8de1715edca1a6c8c202af10cca3ac63cea9c8f4b41cbc66f29d0710afbf42138fcedd0be9550e7675fc682c333a3c5082e47419765b2f7600d888b41dd78c0aba040fb22e57fca696be8052712aa84fd74c5dffc37da58208414f0042dd61000000b02e03e9b080e0d610503aa9cfc0cefdc6c2b67eca044c37a76d9d634b06c19f21f2e98976c6bb6c68ebd9c42c7aaa89c6e2c3ffa814c467f0cabecdbafd11a48e4ceaff130a230a334b98f7cf4e014b8051ae8a0947ff607c91d917e74d206913b3c52c93ca1581e02e47f441156b64c309768af4dc51f441dc3f874c0a682b649bd9199bb94f59640443bcb82483cd872dacca7ffa588e76a64e476c029e24ec80ed09c1f2be89363a491894ccdfdf6d000000b021571f3ec20106cf22012349d6b63ba4acfadb6b6b6d65bf5d7badda29ab0623d6fe138596d0577d33767cb55f57e910682344b0f1eca7ef316305643c38626f371dd47fe755e698a07ed096b88dc2e75daa299d5ec1cded007ba9e1e2acdcbfc8d1d4d1b09bb853f1426d5064e2425c16c1cfe370fd7cb1d8f34f84caf7f44b13bb6680ee8ea28f2f7e1b389e3eb0b4151529da5c68e266c4b33ee415a295e8abc21a1e6451f2f4c4d8e8923788a14500000de30000010d000000bb094c00afc1cedf79d7404a2c9dce14a5a9442a05618f377981c7325e5ac99815e199f14c000000933d5f7aa28e733a24dfc209f6ac69d28740b4c0c2d002d58eaf83376537e12853da67798605d8fa3039605ec659175ffd22d03edcc71b13c430feb969f5101010a7035c4768e420c5f2b2a6882b69e425071342a4ed6b0f59531af4a3dcb41a104f09f96fceac74b7ee980b268f87f9f6b36c0399e776e81994495b0caa0cf4f75cdaeafdcdf808569b26c89c659b415000d4bd0000004a2cf7e689bb1658129c0a9bd83bec58f2673985c839ba4a340b5d57dcd905fbc1409a3b37000000221c057469f23e6e294b9931b2196780f957e0bf7b8de3c3021c90672fb342f8e84dba000001ae000000880547efc9b3dac4672d77be5c1108b06524798378d1460753025e2ec1ba123d1bc47f36e700000060eae2721c2e1a4ef2be7e774f9e78dc10459ac28e49533478fb3a8875f71cdef43895ebbba28013c86bbc9076872541aebe57499019893d380ddfc3c5f9104145f60a0af595cf9031412eddd96d0873026f87b566ce7d8ce46849d02283f98f810000011e29f295583b1a2ffd429677ce2b20b721cdeb0a811508647c3bcbd9a9a953f7bb05012e88000000f649469bbda35723e3dfa9153b4078426520d1a7c29a36fad2f2e7e1fe8c8fcaae6b402edb5063e0c14b24b2b95a31bc3e0500052aa422e751cf725c48d9a85a33cc0316fcc878d32e4b09a538a3132dca0541eb84c69ff425b6d9531c57b43c8ae28c8e94c1d270165a085681054c1d51f2611708af336abcfe36c979eab5a02b74c774e5ec4d9519cfc7fe40a7189ef2308b8655a8ff662f5829c6568f5413a932ed3d688c51b5a7105de5e3aecb48ff6bdbe1bc34a17cfe655334f8b7e6c0a6ffb1c0ccf058af68a45c81195c6df37973557d45f2a1b5a22c378d745146f79f83b45e70c9f3fe8d5862ab72ed1ab1ef9ed70469f77d000000d1000000330b5832fb66e1e19f02d073742c8ed5840539ed6c78feee4049a5037b7291e008f761d3820000000b7e982e984e61a86227cd3b00000096235becfa11106c2f20debd06ff899827c2520d8b2dc42122945adf9557afe89cdd6c236e0000006ea958436f20cc14af49a825dce1adf8ab32a44e59881142abfbf09f71196f86e68cfeccf09bb01bcf4d16fbf188d2dda918b4a9ac550725cb17945dd3a5c223d49c5323d00a4bd1beef0c8dffd67bd8e64a3cce6c8f500c031f0ca941a5927f87f4dc42d7c230e34779fc00e374a10000013e0000002c2d0951c43be08319b99acda334178beb89bf9c43c4a8417381332074a88dc00cd192535a00000004aaba57040000010a25cb865a8d5bf147f37c5027a2f48af1849b82445e512f680772fdfefb7fca96932fb1fe000000e27891b2b747e604ccaa605b497751107cd9bb3c33c4e54705ec5427e65165d7e9aa9f51f4b30122cf28d568dfcc37ce0a476f7866c462c5088a3c30da457b9f8965ad0dd7f101901848ef20bdeaa84683311607ae44f027648135f42caacef8d59ddf2ec4366982c6417f7a6b7b5bda9224d4079c461adeda3c821cc3297d98959ad9dbafd53d88b51c8678bdb7526cad29a63ab13224117dae1a148880946328bfe35a55f1bfdfe4f6337a3f4680a0f48518afee22608d16fae4bd5f957363900267ca45dbede3f8f3388e48a0db9ea64807fc0e983e864b930bdb4232b069ce06c50000020c000000db1154f41afb3a4d877e1694802ff3716263ad9b3ce1c0c2058d62eb7e29e1feef99b62f23000000b3aa0d0cc1d1c52ed90447e12f8d185585ab9de75be62d379a74d9dea4ae30d078d3e355b2cbe82349052c0017bce291e6eab2b17f750b5ed5b9a991161d0c49e78322118f9765c5de11f7ef0019e9c3bf2ee0c517f2b1493cd4754d350123daf538ad933dbc5e923e45e2633bf31079a1950ff9aaad04f198a3538a3ad3fafeeb3b905cc22dd7d4146ca954bef6d0a19476b182b13bee097480c195162b222992fd506ed1cbb01d3cb9842ac49fadfba2d02289000001291646db49e9fcf78bda2d0c94f65a3b9090c9f8fdc36feac78df9109310ff77f428553034000001017bb88c6bc4c9d4860f9ee4894670e8739db7c25f4807b93f945703a4708711ce8d1bd859bb0f10bd06a6ea3574e5e6d8378525c89a65fd9fc716d69cd441e677e91285107cbb1e1287d5991140ef0416b7dbe3a1279718e3f8b707c31acecc823ff7e91029401d4b802e5b19d68472dcfd6bd85643fbfb35082c5b8fd736f13f22841a86e11579d5adf17c1005edc3f95b94c00428e3389f231afe113d4540b1dc72228cee5072bd50ba6195b970c9c0e926542c4fbb16c6790d3db1236a990d6050747a82d6fb71d828702fc91c6cde304f1f8a5f0ecab01a6a9599c79d12dd2086edafef97fb93fd82c153b6dd633e3a1a2e6db2c745e99cb2204e7d06cc58570000007d0000004726c55a75287c9ce74b1d0966af3d9e56c7ef97c530e26d387015291adabe9896b894bb0c0000001ffc794f2dd27ab1bc6079f68cf9d041a9e10dcfcdf34a339efb1d1d42de4be60000002e23a22e03c409df37aa8ec2a48dc25599c8285bcab9c95d814e9729a862b62322d0899b1000000006a27a1263023e00000157000000c701748c1ae8229aa7b45bee95f592ede1464301a14e30313225343d601265aa2f4cd5f0970000009fe1e88afd115e21938fb302005e91b4c00ffc1fe6a4ee2e36fc833a7df9d8026cf69c56411c8f26f080e14f38660cd84630806ce502c6f199e44809117284798eda1af0a208d674d9a45136fc26c958338e00ad3b63619967c889b9ccbda596267f31417237c3f23532f7215f82ea09b3b9860ff6e2356dcb256b6bed4379e48327cd490b7481bacadf744af0597a7eca77c99c77865274f01f34ed4afc030900000088208bb4d83d0467ba59b2ef195c1fc263a8167edbdd1f4d91aa5251b0cc18d5dea85c102000000060cc7a0ff7724dbc81788191d5eac74e0245cbc38619c8c8daf02b6ea7b34fe507c01e028cabc599f4c043de812bf9abe0cb6760ac492e90c1281e74e99559880dcb7974dce1c70cbf531c3f5f959b1cab66000c4a195cac90f6dee2a4ee07212500000193000000c3007dfd295507b6138525a0a48b074b033740b03e7cf09acab73749aa3a88c45735e7eeb20000009b82bc975f7111bccb5b66c991c677da5f5c93b1b37374997a4999d50d3748510597a8e188d7f6e04d8da092b63786b9df8a738d2fcdd218f41e2525346c0a050033c90dbfb8f34fa54121b42026533d0b704f8634347af1b2899214d04b61a120fd25ef27bd5cda7b9760f206e3d3fe87c70198cfd9e0bfa2f41ec3d67525d90409558b6ba26f2b7e6d85570b030517d562ce81e133e0b28f42dcbb000000c80117a0d38ce76ad529ba33c704ad7037f44fcdd1475d9cfac50e30c0d5a51d261f7513b9000000a0c1afc23768011767e916a8a3b15aa5f4842211b0e636d3fe98c3601dda39a5079d2a8668de169e4022ae0ecc2e42eaaffe987a60605876ec910b752a8a4dd24b45d5ef26a23c3e371d8bf4d15af3664213663739d979a6145fc98dfcc85d3b6ded1dab9c4785e208f39de306a0af07bcd98c538180b035f0f55deb5070d24bbfbf788a4865057a0c80a436c35c80f947204a5583a61550a87000e3d14e44d5ca000001250000006e0ffad4367ad3473e5fdd78c30c0a952d1bbbc83169a6ce2c1ff343fcb3cc905ebec99bd600000046998ca74d5e374ed960b14c4b4f6166c629be94d07cd7e81a2eb5564c8b64015de7d0f801bd0db757b115ff27876cf8caf7e1373257512b737db7c61e543fb132e4472437d3ab000000af0309a5a86188d2548387468449977687b2f75341bbcdf538b9004ff1bd796c9444b5f4f80000008700f46e1d55064cc8840bc11a229b6810efe00e344476c3c8809fb4bf63aa8cd1db103fdc971416bef863f7ec288c9a36ef28a3ae7de7007aebfc8b18f6f1bf8d079cab8b9a1c162d9568d3a7d821cd52dd99bd601153e293833ed18c22928b5842ac4a296593294a794c699a84c0caf0bc91ad25340b5ac64c8f2eae2bdc69f874d214f853fc420000013d000000721566af7a4559abd8f02666866045b5fee5c8d48f6bebaddac3b386480a10a3c4b2e07e730000004a7cd0fb949ca80647aab2220ab7c107be7e8edc5f0b2ae3b3b10bafa04e7c5078a782d9a1c69e943c20b0468e56a4db46b31d029ee8492c5505c40752bd6c4eb5c3fc611b12355255a31c000000c31c5d746e267210c3b534b54d00b281cf531383774f9b9827a09405f03e45c7fc43f971780000009b9449a4c59374beabb464e4b45846055d773296d185fabbe818344025dfaf2c84ca09bb1db46ed461516ec73113d83e3b711aa61c5f87baed4577c5fe0bea62e0c7e4b35d1ebe360d01351eafc47bc72564a1c35345e1e765c7bbb6bef952c52c4235733e4858adc2c1230890aa1c877990d5736041f2425a8f9663cda9a48907bd13ab4e009eeb733ddfbf01124402b25cccc9199e7944ebfa703000000118000000740d59f81a369f7bbd1d20dcdb91b7cf3d7040b3c6c20ed93d45b593af0e1925fc0782731e0000004c222c09ce4e6297d601822ccc9eae92f2b63dd9f0ec7a35d985cddb9c1a95a2c35f8c23649dc676f4bea87834dd59109954e20d49b1c587ee22cc912f67c17a5299ea9f77d333ae5324fae06c0000009c2bb9e68d9e39303e9352ce1456f9ad5537fc281e692bbc67b74b1402421fb891cda6e57e00000074d8483dd3baad51c7e83a41040faefb6f41c1b1f06f54ab3f7dadd3c954560465f21708282ad481fe193af64e89b6ecf74bd719610efe2ebe149f3e836accba0455d6b6bf2c7ca9ec34ec89273df58f273329803cfe5e49ceed3ff05610c36f50cf6c6ab9f6a535aa1c60d85000873e2260cd1e0d003800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f73700000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f60200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c11000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d9000011000000021c000000b01655f509031f81aab5a8db12167e640da69337f33de8611cf2300747cb84328357703cdf4d67b1fe93665b1d1f441e7643074b9f5f97dd7a6b10aff09c614cb0d13a5149144e38400d3374ca6b29eb7e90d52a11088fdb89724f07fed7fa609913c98e89969306f7ac05899586674f58154770346124a056d25aa0b7aab6eca163cb6655efe51c92ab36f0a0afbadb3e060f35bbe58765fd1f336303e41f5f1f046dfbc6eef40bda5c2925267d68d290000000b0036af7c7281cced0b1281e975ac1eedc2f5255367864f6c9368ea04e1a925b112f516b939002ab380a6e0980e3637bd33a7bf599df90ad7b8c402bfd185933bd9734e742f5170a549c6ca9396adb7f2958f5ab75382a5ce16ac66b2b11fa155cdedf51f804f267ddd1eb67d3f1097ec01f21a11f7fd3c2173bc89462537135eb719e8bac3ade82a24082f1b217be715b0eb5548651a1a6e4416ddd880744e70ef0dcad7da61c4e39e680e8014055b833000000b0146cf67ebe9ddb6d21597bab436464454f19767578cd0ce975f37ff2c88d6beecef622a4f4868f4d508a1f5d3a5ccf89cd256ef620552a875b889e48d2ba07efb823791af240a4706f3fbee5e2e91ccb0b250d0138b0e7647fa86042b9b384c1c5fc4dddec0809a09b59a45036528dcb133a1fedc830f394d33e04aee0475fa168aca58caae2a9fb4c4b1ebb17c27f300207806fb5a6f8f6ac22f53bf8438dcefaedbc6c527557bb7c9db04566d0d4400000021c000000b008de2c1edd4d9e046c156f9e6349024b710cabf72f1513b8af2c356dbef6ee7ec5629b4209ec813c3eeaf7c3c1fdd353c3b2289a3e9baa3416f88806e65d4149dfbb4b239b5109ca352ea91d459acb995ac5d6d46c383c915a2b019853c17e37bc1826050301997b81d9a647cb9022b82dc79e544e0185db155b5e22c99a62e0b187018eb22d39133f2cd7b677a92bc70fc8cc7818ebe6281acd9e88470d0887fd0fe6d90a9b7b0c3fb867599211d49f000000b02a445c7822d364d7a5a5a22845c76928de9012b280dc83ab2b9b7d46116f85137e586dd38dc7e6c2ce45081fef658fb6d3983a5e74d907a7c9be11dffd92f4ca06f48ff83698194f76bdf5cbad7114303ca4f31005621e7951d0e03307875a0e6ab35f5806bdebf626cb38eb2189c5a52361287e346313434227e5f5c797ad0529b88941c99381c8209f065604b57286031eae754599d76d25ba86693bc8fdfdf8419fb2cdf5136adb2e49c04e95a847000000b008336c1afa8fcbeb0c568d193dfbb4c963937bd5ff23a92d9f87e69011ea41acacbca637de731ab317b5bb129a6f16b389b982bfde5d4350f5a9d9042a8487d3a7b0b8d23c096220c4225ace5d91f649d1d769534a52cf6c07ef12bc86a249da460c80488ed943bfd4e7719c251067962d26cfd4c5e1c547b14fc5c83b649a7798cc60eb01e6df5351b12b0e811b941d253e954896dd57fb1ce38999cfe2bf516f29859b740bd143d5fbb274f7e810760000021c000000b003e4a79c1f4d926a626db8e8cfa474325dbd2fc1a1ce94921b57459d3c62b23b960d33d172134dc307ef0d67d072bf18e232d8b85c5b825b874a72fd28aea18fd0abcc9828696f182c3b3913d53477f747f286f70789954a6de50d68155b910066bc2edaa9e02f28b2d9a5dba75710a92115f6c285f52bdee513e428afee01f966cc8277c68a8ac23ccc890e85f4991704b65769dea28727090294098d1225ce4a32c1fca8a221090351dfdc62e0b7e2000000b01c3492e00b36a4aa5123c673961de1611afa67a7ae26e05cf38b266beffce436dd730969d46a67752db923e81612e7232b105e790c68707aa5337879f389c0f8cac8ec2a9f892917eeb6293bc0f32f00306ac0243f87e7071043381f0a8fde2e4b5e4e2f3f50eec8da482dc60ab3c3e81c058d34f790655f1e9a15230aa7ae68e21a44649032d3fad76d2e396fd31a90180020557d123c1b2fd48e0904cd40b390ed883fee60bc4f65af9c2fcfa0b055000000b02e7defcad2ebbbba8cd53d0f3f708d8277db91208e183c6062f10f4cc957ba6a7712287e5892a76f94b23477eb05f74adc4b1a3188c5fba6be50e5fad85d7def5f9d5d300b5b8604171dfc687e2be04eafdb4c41c1a80159cd04324fb4f8d04eb5b2daa3bee0470629f9dd1c90ca91cc02e2cb7dbd83fa8ec7331e1fcf216702214815f207d60b7a6aa434197830174307feb7c98ad8b765269cc23479c53aa17b13b5bfb79648bcc1181ab2fabb7bb20000021c000000b02f6622029da689005d3f31e2173dc5c693b90ae8cec1968f28d7f57f1552288165058058caa51405c0d46595975ab99fb7828e954afa1577af6901a78e305ada8676a871060301f5b02453b0c9a543596e4a3cea38b8a623c5cb0e4753a87e8f16c2921e386e19ab246438ac63324c18237c93f0269551adad51be0592a0360d7a2b83296736dea97503510452daa29c2ada296e511d2ec1fc8e444bb219c36f6317818b8d55038d99af78aa21bce2ac000000b02fe3ad248557d0630fef9d42a41730fcf29b2faca9913cdc12f4ec0e46484970fa04844dbd4d57232859aefe11589ea18bcee524267a66df67e7659ece82fa2a2291a114001de7d6ca227725876ad61aab6b63e34ba426a07f10e78aa7b2a3d3632326153905ba0293dac8e1c7108d67268cf60d6ff9aa0e225901a6cfca74602f6dd9ca1e425a0208e7412fd70ceba31fd8114004714b5e402ebb89affe3dbd9206f922777adc654185215fbf966447000000b025d2b4dc6b54f4688875105ce373a65143bdee13d777677c0f42964f9b107dcb06bdd8cad394a3b87f116ef109f1cdda7752ded785c4a4719f79141f18fc8b564c821f0210e080cb050cb9e74b3a1ec29594aca64cbeab60ce2255f0dd67105650cde15d81bd488e10a6b9afa07a7fe413b3a9c954fc90b4d506e0014c158370d81f69c158750d34daa8de899dfaa1ed11d2704726a7cf58407e29191aab283b64bc9ce551bd852ff9a720529c2668900000021c000000b022e122d6433a680fc290cf4305104bf5ca7b6af8e2c3ef74eb4bc5c2880300b68d0d562df3261daf1f7c6d73a9e2c376225442d5fca01b749a9580174f0e5ce93d6c1adda05131fa246a27cd9beac61181007c49bb6a0ae7be6eff3fe476da77ac41487200c30796c40493b2793195dc22031ade30ab68fea9f6e92a3654aa6022aa31bf5ef3fd14895efbd6b0cff7c708832ba2e8786646030ab349a043e0b2a7b88905d559d297d1550649015505e6000000b0242fcb4c981723f12414fb2d6e8676f74c3489d958d4ff351b6275f637d368b97a76e0f6eb7eb343e099726cc02f645210f09daea4dfa927cc81cd574a14f7f8aaf98fec356b16fc6a05f995b18a4dc2df989c80175460a861b56ef73a6e1278979f17239613ad141d4338fb68025322066bdb99161527160c58fffb2bcb0667f4a561b1373ca1c2adc853aaa2f529f120e50bc6d257b591cef1412556d1208b7fcf569ea2597ca3d1d87ecb09912bfb000000b00e0d0073fd9b589d28bc09a9b2c426ab11e65fa87b3b2c5f775c9ebedf06838e245156599a821a98e20bd86457e873ea714f4481db990872afab4b69f072e1f3bccbbb39a73a36cf221b24c2f8f5d278e2565584c88cbb81d21cec293421fc55d3b6ea63e6c156e16148d56447f0cd180fe5b76af3f3730f761d637fc0105d94f554880e6185e2e42af457764c0033c01041d8a9790e8f5a4774bef14a65d95ce3c960c01af593f45909060227399d370000021c000000b019028b1b35963d2e8c1163c479e7cb6c0fb6f98dc669c5b952450ccd714f4c605132e825842aaa74f790c00a1582b5fcec070a585163cfdb351a27c4b48d8ebed5996b9aa97da2870534ec521d29ecef1389513ffa7718b3b2e949fcff36cb086feae50f541c29e34fd3f9be018a39e9050ca58c10f64b6d7680a82a09f017d2bdfef572923c8f4fc7ffb4cdcf10a1382e320bba6335e0340449b3fa0e12525302e29added63846bce83f7c705a4b2c8000000b01d1f87ca168da47d55b2883fe016e26ba061ca954864badb9574c18433ffa29b5105a5317cfd4c362d9fe1d33a65fda9a8f13447a4d87a6cfb6fa21e65582b0b55aded971e4403679f5404693ca8b0697bad0ced3389e992a5386fff2f972b4524fdbb0332b3f1eefe5876867ffe52b81ed2617ca7c957c3a3d4830e0991b4e8c15e25e4ad83345337b77c90874249f51cd6b7719359637ac018fa2b2be0ed45f0765c43474749e06fb518dde008ec61000000b010ea93ad7b162fcb294675059d8ad7ebb615ca026b93da7b31bf6f84758495011231fb358954089cce1deb722db59ca1981f6b4a27839401812ee97bae24b5c71da42422d848a59e9bb419ef18dc8f5f9138ae059c30f28baf2bcaadac895e26ae6489814a4d4438248a577b9f1c949a053ade5aef30f6a3c51a61194de9ce7ebb6db7e383c78cf9db8369ad8b78491220d25d64e1817c28284b8ddccbd728045d84446618db7658ad6c59b6afaeeea40000021c000000b01177c6a21fb2fc915fe64d8ba947edc2d4e9151082f8b017cfef6dfd4c21738cb52fb30cfa87485f86ce91d869fb8ec154dda25632740ef4031e643e910a756631fc1d301d20f6b524305921d92d2a57ad0fde1f3f493cdf1622c7dba403fd4d8f643b606ec134a56d3f50c7de832c7a064ac07ce1e3efb726301b13625783b4dbdac08ecfbc3d1d4e10783fe3d6220e2ff131c89e5e75ec1415f77954dbf255c636a4aa9a49c5967f9a004002633b99000000b015d2194d98a15460cd0938d6e3ff5efd776c05b78c59c2eb6e42bf3bde6d1efca8f68845bf73c6913a391616fa789c5f01107c6cb07ba3cfd6eeb08e38da1086ffdd08e7bdfbf0174ad9b7fe609e4a500eaafe23a5010993f3981532c0d74e9c03bdb151662cb37fe17e02dbce486aa20723a004a92cbf2c229b325005ead41fd9ae7661ba9c3eb6d8788424069e6af709a8f1d216680f7aa41347618e428a9affd6024616391c0e910305073795bc10000000b00362eb0b3d3be1cfa27146b10dec8f2662fbd544e3d90e981581e4d162cc021a1143d4ed0c50d3b006945a2e75b31060ce773ca4851f713db2373e0c8cf18626fb68c634a2fd10179d8cbe5563acc8385beb8e374cf634538c26ea68a841e998402f7eb71b94af8e8a108c21e908cae9295ed51fbd286368947bd5675c67e8dde1d9c33d87bd4052fc60e247ef0030a011dedc9cab09c72a4ebb1b2482a33a4bd51ba52aae1897db3319856f71ff4b460000021c000000b02e7f8e8daf305e6003d506da51f87f34377f14a4e4a4820bd6cbf5a17cd4fcf58e9dd161a04dd4e8eafb06ecba755c94a16a6fd19d265890bd261d79bb80a263ed9e25711af3dad5a9097d5da16da5eefc9f6fd3ff9ec0a3ef1774bbb6093b04ae28d98d6090dd99c850739135dcc6a00777fb39f16b820971ba10d24b45333bdfb028e1e29b0ffaa452a926ee4b16fe242899aed27f9318dca07cd55464b9588bb3d3d893b06c8dc056831fcd9ce9e3000000b02fdde7e5a1ae7af2d30b222de7e5aab8fc777ed57f3aa6754f88dbcf1ca514a7d2f0119a47ec57fab4e01f3fbf146a32fbd93216bf0431903ab518bd1cb486e99a7a080ebbd4425dd9f8f83b7f7c4fe685c25844b3c78ac3f2dee255290c62cc0888bb15f3d228732b244d296ce9e7971982e1100a96b3ded2430235d097c9e8f02e6d9a87e13e2a2309c89b55cc49b92c252dbc425f7f5a49ed4e2082443824858bb3837227af5fbc4a308dfc23cb4d000000b026dd7dff1b90fb89c4bf432630703e43edb0160dc2db4083e4a89b66b5c21292e4c169e827eea20736b3bd723fcb08576d1c3bc50bc305308701b7e76673a1c98640f9fe45f749026f2e6ca79e28d2b7ee6ca389ba572f098f47cfc03da4d439154997c108773d5e76834997eea1bad82d95d68e46c1b67de779a65794a80f401fe4dbc4cab08b704aee645188eefb6901434e853031c114d56bbc3c267bfeeff7895eb0e0a67a0a480acf38b2ed5faa00000eb400000167000000732f6e1c546690f40d0e4c07307de24803a80363f2c733ccc4e95d9e95f4d789256c4dc66d0000004befd8f6f74e10d13c6e29356551b52f4bcd946fb4d3e03cc05ea9ea59c617c7675fff1363fbb5338556eb1fd81c36b4021066cba9c0e8ffaa472f6cecfcecb8b30953cc94428fa851f27b4c000000ec1722b8311f65e84d53ea3769e763b8a89555a86e2454f739d6100d0cc1c5a5fe64283725000000c4b57738b956e0dd7e9e7bfd8a640fbe26565359e08d0d6f615a9a64b98c282b99023bcf4762054862b08e7703a71491fe83a43802a03cdab57b837d51fd2f10bcee72563d1ce3869ded62d3e734b5454a46aed3cf3a7b51c6c0805f21a85675bea34d0162028848bcfada3043c40b93fa2acc0e5ab8166ce36e07001460cb4cd8636878e5c2094d2074ba56116fbb37c9e1c84b8e2b66a5e250665d583524fea6a1223c6401c97033816d30f07bd2dbced378750b297375c4e0f64d4c741000ed08c5554b000000b3000000471d2dbb2201786090d02c145084c7bd00d3bd80883dc5b219c4af0643751bf638898684900000001fec8520f53cb96189de3eb182b934bf24e9076fd88eba02395fe52f949a049500000064024ea34047488b498268f2851181d6a86e0443aec819a2bc8ef4bf96179b71c6739675430000003c5462ad52ae52f744e5635ae0691e76c99b9fd528ae36a5cad0661d078ffbe481babe5f7d96b3382855dbc0d0082e2814face231125c8c669c89b88c30000012f000000482f49fdf10066878fefb9e795bdcd3e223c6d9b2ae434ce55ed4f3fb65981060f8ff6405000000020da6bee12ac3bdc13e5d9280b8b4c855beb5a59bd1ddc4241097693c882ea4e74000000df0fde4138fe595b0eb935603db8954a781c1b6e2e0dc5673b5dba551c3e46452f09dd1777000000b7b43a19e8be0544beb648bca3c77147cc552c0995eccf51f22f94460cdc3445b034c270c8044e513c29f13f2e3323e5f36c65163b50c98508793822274355c8bc24c2b761ca6741123e5f3e2bc0b7b95731746be6057673b32125db602e0efbd79078c67a7dbc0526311d1882fb927dc903abf677d66a66d7948f8713d9e76a86333a8e79db6164c6df64b51b5a27c8214c773ad37f09553472de6ac82029b4b4d2b470ad97c369ec36828a08d10456ca9b59bbfa01b6bc00000194000000db0b050c3dcb4a602a31d0f89ec9faf81d06a9f6592009b1f53f15883a504c3fb6528f00e2000000b3fc895224ce0cc46518aa29670f5f218bbb3ebe92e064740b825450d91fbad3802f69b7c9149272bde4b8f244d615e448c23c0cf86093d74bd77c19f8b2d126ffb6b3501b3a43a8b36cf4172cb518686944dd7e5fcdd563214fe8dca660c4a47410b36597dadb5cef976560f9e60fa72f79afa66babdcdd78a3fa556743f7420b3bca356e4260f12940310178e8b2453b51ee2e0037deeff220d7d75fae2f6ca8322259d084263ded9463f03ee433554381db96000000b10c179b0cdffd426378a200eb30015d39c05431c9656bbf3735f987246b39649b6521ed5f0000008921b5cb374046bd994c4d02998b8f577f25f9530b49cf9d044f04311f897c7e5548612fb137f6fc70e0a5aa532e0065c439c57e9b21b9f699bd5acf4207b19ae77f37ab371106f770d875a9bc912ed72a36fa677ac6dbe2317287a3cf6e21fc1c74dabe8626e4cf9e44ef9f3e488603e268540d47f25fb4fc7027e8156d870d8d88e27bc5c00fa6f163000002230000011d0956605b670572fb58c5f0d94715373d9adc7591963c26e75b370768e3af4c232de8b15b000000f5169918c40e9e6613c93734f17dedfab4effaa78269aaa8027f5805dde93a30482c52225ce771fe83fca09a98a00d03a7a4457b3c2c5092e0c59fa82810e5b2ebe2d45178653118f55182e482d7fc8ef82cf95a527f25cd3d0923c72fa7c49841fa2704a205a1c9850b17f74dbb80f917c1752e2611630d7067fcadefa3cd2ab2c5c397da69454686268e1d0575979897920961a7eb3e609ffcb811b3ea0fbbd4544843d29922d6f8bb61063e2be34a982d908ecbfc08cdca4e37f052460d9ad376821586c8cb867b474060f106fc9fe9ef8509baaf03155e590808c2de2af066a73277a7459a92d07044d3e08703123c238667b573000000fe0bbcc86c84af57246702d24e1c3e8de44fd05bcd42c4d4626e260787778e2a1dd89b3979000000d6b321e77d3ff01e9250932f23cd11f3dafe7c37e9832ba58673d591f3bf7735a5e4a3ff63838db1577758bb6c531fec50c2c894cdcb467e24f4b4c0755df8de00dfdb332509ebc8573fcdf91ccf788c4a1701ded95deb0ae794e66f21a9539c55ecbaa19b6fcdc4bcacabcb3568042ac7c952172128d1033f124d5b3451f246824c1ffda29d9d9ed375388af342f00717d4c2287e8a4d8576259df0ceb0f4cdf54fd2aa8c04366562951f95abf7bfa9970c03a2fe7174c3aa93466d876485659ec8c991ba946f95860abedc3f2fbad934ab945594b1ae00000122000000b30d5e57c9e8ba2903bc70cd2cb987647c8c5735fe027525060b99addc8eb87822927d84420000008b4c3e4ab002cbc864ec455383630091544e7573affa06acf7c552fc4bb3c33c475d2f98679b881bebbe17b9879bf250076a543fe4f8dcc7a58fc00e326bcd2b21f33aa537c43ae9946f85ee4d41c09ed6607c569348600bebed3ea67200de09f21fc5cceea1563a52977942b2d90cb787ccbc5943a9be8a0ba4eb45cbd79f3c8af68533840aab3a16163e480000006711e9ebe1e337802e52cf9e79ea7981a64d78e8b4c910ebad383764cacf6a7590cbcf1df30000003fdd15d238e91901edd0b6d80ed52a1056ea4abd25f42d57b49f97507c260f1f24fbb55cf4993a651be088d082a711d92ce5774a9e4cdad61a63fc770f7dd46e00000129000000ae11ada3492de076fb15e56534795434fa477116c7521f81acb258e456ab4f47a2c804e774000000869783cbb4bebbc7d0f1731f1436457c1cc44893d80d994aa1469be5c0ec7fc2ff39c34b033bd8a4199b64e319b0ea3f3b98f9d09e72751ec4fd61c26087eb04e8778d1b2b739b6c3ce529c4d55c12efd85ad9d748436778b9567d6ee540001476774e9d778827c19a2e5a46796652ac795033dd1dc43ebbbd1ddd3adb6b2f8d694dabb754f2b50000007327453c69836052bc92ab9546728913ec6de9c981e3ae38a5874cf52707f9269034bae5860000004b925b10e917d937fd84de0fc34614bc674160221ce3c825b11641df8dcdbab391c1f8cf72a5e01345bebfe614bb5add4533fdd893d0ed129d76dfa9fa5ba7b3d49d03dd57770533f0611262000001360000005b0b876feb1cc7e254281cd4af3c19b2f334b1d97b9041e7cecabda029632df4788ee1fe0c00000033132c2938ef418e750b4c76d6d2792e7a7f924632d533819107d06d058931cde22b73bc0c1a9d794481b1818dc09f46ab3e7147000000d320c2fb9cce3e0c33b80a9b2354cba4e14a8e2e073742ad583c99bd00a75fdbcb49060c24000000abb32eb636f7088fa38292abda34ea683cc962dd204b994cee4b7b9b452404cf07d6b3687b8f1057a5eaa11e05a81fb44a63925a36205a5f0dfb420686f3687515b74590f6ef386215b8a166b3ff019c962a0e9b5d534d4a7ddd5db8ce72280ea225cbe9a0667c3cff85904bd6045434ccaa01c7fef67c946c0e4753dd868bd4cec88905aea56b246ee0c54480e1fe95b1b1372396f4a1b37e46051ecb9f36f852b4b907f09d8aa0504cadea000001290000005507dfa382e3f4259d2425e55430a0c966e793bff0d2c184cf585435b119721467de07869d0000002dfe0490b47591dff7241c8a8791d2f44e8ca480c24ae8120cc9df3c831529f5770d59dafbbf2ea46ca042bb58fa000000cc260a2f99c2104a111afe7129b36ce2283c3eaa767c4fd93b19f579010570711e33c79fda000000a4bd7ddd6387b1e570126ba576342fa29a27413bac151f46062c0739a76ff840171788e45c3186bc900c75955d5641ec2c76b29a8461f5173fb19d6d9590ebe7fcca0ae4c01de397f6040c428f9af3a27d7b6dfa2b849b2599de0ff35a538cdd2a4a7ae7b0e9d8962351403a1595e22339e7e3ae7175382ca60d28a73ee1cb174baf968354faa9ba1ac994473f07a33c2c8120d04d7c14d869751f0d7354775b6b83e9404e000001a20000010410b5b4961c685ef17c0a23c35f1bfdc97a58ba3e6d3dab4e9c9aa21d67f663aa1ae321d2000000dced84dd4cc55a2862ebeed168076cd840beacdcbbcbae351d32378a50e1864b139fa0aecd67527a2ac1de516e7cbfd377dc655edaf0c34160ff56c89cdb14ce68e35d22a407331be9e974d033bd9d595c98e7037fd93761d7134f3a1beb49549d9085a6d0b98b17ce7abd31078f1f28a7826599fbe96fc1fdaa1349a3d405f532d4530121949690e23e0e0b2fcc57e4953d3105b194acfc9bce66cdbbe29ba6d311c75c123e9d789822dbc1a515150011f88114f131b88961ba01620a816b4e25601d8573728c0d38e4b585db9c31ee346ebfb6f9f7babe3d1a15ccb80000009626eee8da65cc5975fe30c5c87eb28e5ca1301c7c0f5d42e676fe2729164ebac534ec6c5f0000006e3eb1c52e785f1ef685e4f3e2c11f5aa4e4aab9b671cc1b30ac04b211eaaefdf6db4f079b33a2eacaf8f5da8db12f432e5776f7e9efe0decfe8025c5e035cb87658a77bb4bad4477801ecf31e8df10e1c891336759e495073bb6ed9851021ab68210fcf7482eb130a16ef21f77d1b0000013c000000972bf33196a3a35f65f09d05eea0accf9b81881581e571747796384a56d2a944d23ae3909e0000006f32dce72f14f7e034e38f48348713f66d89158b7c0562e4801f0d8ab30be4d0bd70a91763d138b4cea3f670b7a35f230e7b502a513de425a49eaa14ffeefd2e032dffaeeb03f6c54ec5b31c45f2ea652366705fb332e48df84cab390bd05ce7af557153f675be564d1aec6a8d544ff70000009d26b6039d26fb315efd4afb66719f025808ea0feaea0eac769028d82d00e453ed30248c7800000075d8f51b24fa63191e164d6711af17404ca32ca481c881b57e29e024696d6cb7dacd45bbfcf0f1f7a54b231980be52bd3b2add609a312327c0ccfae00ec196b330d69b98b2a021a8767f8ab972c3bc2ad7935770395d29d7720ac07225c4e2ac8ed194dde88264ab21f56d8e3bb6bd3e3b69c1446ea000380000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f00000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000231000000000000000000000000000000000000000000000000000000000000023200000000000000000000000000000000000000000000000000000000000002330000000000000000000000000000000000000000000000000000000000000234000000000000000000000000000000000000000000000000000000000000023500000000000000000000000000000000000000000000000000000000000002360000000000000000000000000000000000000000000000000000000000000237370000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f0000000000000000000000000000000000000000000000000000000000000619000011000000021c000000b023615cf79b455f5b4680d8a2d594bb67ad66cd37e09b3c93635e8ebd88ee76d59193c3795d1f08257575d665862530c7fdc8e18ed54fd0a2059d44d5f3d25966c08ea4d04c4535c5f2e6d9c4e370bfce5ce61c26082c43d15df99a2ce41d1d1d4d9e9063eec87dc39bdba999687ad20f2fa0f665eb7953c1e2fc6346357449d1475de12614edf5df028b22162ce6ddc52f48b4c5dd6750d86e8389f75693c13f411d9f33809af529c67da4432e0615ee000000b01820e908d3d8df2eb5560fe19715bdbf303efae565234f23b51fe3e5eafe1099bd5fce4a1abd3b6058d287eed1ec33998eacabb718e8ec3394f48b8252181d7810269cb196fbb1989860adeaa49b05c4cc9206e79b6d156bc92192416ee8c45964de9a36862cb5aa039713729fa715322dc7587213589b51fb1fb7ed466ca20669377040cbf57013e596618f99421d9a0eaa25ed8fe539cf2879875213efc5bb901db0a8b1731a47aa5ebd20a290c020000000b021a97f3c16decb83aff7d27a30fa4f624f43cb7f1f4f4783c9acd5af926c1fb64d7b9527fa9c3e2d84248425078220a11b7724a398adf27f46850a68e83d5c34df71bf864a3c79071bbf56a0c2a5b76ff6938864aaafcc98b3d0f886b0b062e49984c6436e2a255dc2153566450a2dca081227b2fb01f69c86d6d4084595b2ef95acf93f09ee64167d2a8e81e2f516d614948fd13c2205150606314a3c0256adcf758390156165da6d492a880f139cde0000021c000000b0256d9d77eaa6fbc8a85698c25f7612cb372c0cf5233b047e89cad57cd96be2b7e30b6fd9ca1b531ebc2b9ef2e697647b3e17a326c6b48ab86b3d280cd4c485304e6a551e4bda4dcbfefd60c59ee2021dd4b70fb260e63e982eb15ea9809fa3aa368b8ebfd0f1e8b12889479a4d9cbdb5213957680db65b65044c10f240cc0922a740fcdc422206e4fb286c75552758722d12ef596d34fb57625315a47ade09b8a73ce4f1ab7d46c6a7036a08dcfad451000000b027bb206005616bb957c31ad63dd3360ab23bacd7709eb3c3e3eb57124f487d63dead827fc11ac69f539bbca12ad3381d486903cf73ae848217df0b311d0b168678d9c93cc5b9ae5d6b8ba934d2a4ed1f57690c6d44d1bc62e6744303c278f368c91890a063cac887f02d58638286b9fb07620f20fd9ab68b2f921ee55e2e97779b290dd20aaaa77e26ee58310c3b35481d184ba9d4bd0724872ad5c4732a59a6ee6218cb9578f00d0ea1fe7a04679048000000b010ccdc60688be39abe54818d47ce80f4ffe9e5d8f7385d582a15102fe3fad40666258919197d7984359cb6e8ee9dd96912881fd3344b2dbe8538e804f2bffd4bea5d29c1c09e0a371f6b6412cfcedfca0f45617583851313b82588225defec49b46519dc46f0e93dcb9dd4397a0509c305eb4a75457a978e90176f05b057d3b0b8e430c318ead23570e7864f28ae8ed32bff4951d9158298b7f0c36d9eac2a9f47662d1825178ddef1717a4ed69111c60000021c000000b02f4f633d86cb3e7c4b2c85ad79381c75793518b9a7a54b3cfcf4f35c4d30aba68d3b3a8d850276aa30faed33ba33c5d5adf570bf5f35a662af766eefb300e49c52a89b16e2872df8c71b26182e480fc704c52e2976f87f819cd7d8e458f257f8643fec9e7f6c04ba7ee63a3f1d60b1401d3fcc896f27ee6cfd9f73c6467c115237cec1b52fa7ff502a6fb1bd9b2ecfbc2cddf25a50f067a59ac069ec44a85a59ee5f6e6dc7c2e1b06f76ddcbb24fae07000000b00e5179c31733639f6a0c60ed6d7d1aa18e653e9130a16f2cc2a5d207497cd3f50179c2bdcc1a598936873d4c4e671fd0af2f87e87fb63565c5639f0279afd135da14bc745976abec4af8a8f9ec71d72a6c38e8d9bbba6540bf5082f1666f3b59bde08cc6a6e0c49dc50742ce1e5fd0f62f3b5833c62b05fd6a0c3bb664b56a36151f4e0988793fe84b394d83c0d8ff99126ff19bffe51e39613e2f2ced10dfc645d53bd219600809fc6091db68c7393b000000b0023c6e4146ec420cd1358383a7e1a762788d38a42684fd9eda60a57749731e1bb9eeb806090d39d268e0e18a3c67e27de121107d11e24a83bd7e6e1093918401287f89249ba87cd9848b999875db8956d011c74f1e90f75360d46eb71ce431bf9fcd4ad17e543255473fe574a67ba9f118c09e769ed70221b200dc06f2cc4409109adaff2d91ca0774667bc3d388a21a16d4c41fe4fd1bf2ec5e9f0e54cc0abcb70dc528205b0d5f3fe7e420eecf4c3d0000021c000000b02c4ba1519faa49d010bd2c8f02eb74c34a53d88e40fcb32c727f30f190b82a5df87a4af3561a18341e3c4f0efbff7d278d58765507527f910652b06f8a14f0d2f29cc723e56734aed848532eb8529e284ce67f974e9f551989ed165cd07fe2ec1322f16540036cd388226934233a17f415fa2e3b6914424983fe57328295a5343a759923d9e19185e73c67a1aaa5b6250fa0a3bff49073d04bdb4d553df2367135034b5e658644c399dbb6e967098a3a000000b02366d42376bc0caf289f27268399be19e881d336f229dec5d4d77f4f60bf8aa4feebee9a3a6aaddae4c071446ffcd84aa3a12c0b5ef900fc6c5d33a557ee4ba0c579d8b9fc1e4ab583ddadf6c1489136ab394607796e0f88d34ff7541ec71880aca9a99688a94fd2f90f8453942b27f108b0f3e46cc9792f3f9dd698c29da8a7df51f6d8928fd8678eadee89f4c5150c238390ff9930b0c64023ad6119234fe6e6122611caf3304f7a1b772d863b1e34000000b020814b8084db66ce9cc0b5a9ed74aa55319cc53047d9a1d4b889b62da925c4c4b20d24b8ecc42dd1a6dab9726c96429c1881468509b361036e1277efaf282fb850b12b4aa69dba3bed855c93e98f9dee00e4fd2d427916bb3074ae440733f1a0d1debd2f6ceb01c2e36923a68f198437222c2bfe3b6f033f9fb27e2808294e7230b792804a50c0da50fecce1205646411bac9aab7f696d547fbba13e2affe625e2821165fe4761c582d6dc11c19957f10000021c000000b006adad0387d1c46745b5937fd3b10e8897fb74ff644a649303de6664e36f4ad6c6c865a0b68aaacd373da4e370ab45284455d29e937ce3f30249f55182ee3549f0f06ac9b22016ade8b25ce6c933d044667c42f3bde8efbaa98e2f3f56e051226470a966cc1c08027e298ca56e11b09a03906d7081e0181cacccfb95fb22ad0bbd25ad58d93012cabcd4d46d9d2bad3908186d33ba5e14dfaecbdba3311e8d20050d9b232b0b3dff32b87be8624788af000000b0178e9cf53f1e0aee4b6f2e5212c6de81edc8078dc19020c934a00e4ca7efc15c5a40a9d34e9858b0f1cbfeb958eb2e331144b5b22f408eda8e5770949056e72ffbdf6702e8e5c4b17d4b626de93ee9ec8286ab5579ebf2295e9ba34a5d789772779ef3919a2129a2c9ec0522fef15ec71ee125adc37e84653a21e0bf74617e49eefc89ad2a194ed9fdbde29ada9b5c2b01d598370ab2299ef45fb3ee281d087170722be62feeaa2b5b652214ad41913c000000b02a7c68652482766b97495aef3d1f2064d0fac02917f725ee649f85335581814e6adbe80da3af23431f933aece8359eb380003c697b950022b7108803c73a48f164c07aaa7634ffea497a47a0d49eef987c1ba2d93d2c902e4bab3fb8e9074f2b0666fc181e84bbc24b04ced1d6500e510244511dae80b874f3aeb789e6f1aa2859e23bc50f1c75bcbd70a39f71fa79a106d80867303847eeec77c5d705d53bf61fae7220298c4dad6e7c9a351a97803c0000021c000000b024cd7bc6683ba6d8be5346536e4adf784d4e422d5f28a3c8666f78512d1cddf5b51a536e5a942f64d16ff7ffb02a8ef8853cae96060afacd7edf7aacfce47b3ca29db84f955afec029da475fd702e26d292f53709b2bbf52d967962e456b06c12479496996662f36b478375438c129792627f0727349ed5d1583f779ac6bb020e48d57962dcf0ebd81a4510a43e45a6f1531455bf265675743d679ae50b488b90c3a4031c9c0dbd624a0541ba82683c8000000b0248227444dcac14af8da51a2e51ab12d2bef9fd4b1e49bb46251dbb29e4b5b6aaae178c7cee8bc1c4ede5b5b2d98fae66f0747714512ca0ea8eb8d58293e9f7f37ca2b59291578ed57f92475c3da8f507630a81ceac0f0df9d535c0c6e1419ce4dd55085e2397fe8a46a45760ea54b982304876ac8f3e8510b4e9d3c449a707c9998e1ebc6597f8f973ff4fe5a9a16410392b60bb6347c46d5a606c30cda1d39d1651e3a13e89b48f3a7ee438ae8eb17000000b003435c5eb8fa7057150c9710cb3713a916b7deb918f1d953103b01bee4156ae591f74763ab6dc37835e8431022e3184782e280c612cd3df73f1237a76553623b6f3f8ccae023bc9fca8fc126b4ff7d40d7f4d0b2dfdbb3e969754173bd2849fd548ad6d6c83f0fdbe545ffa93a562fd51080757acdd557c4cca6de2eb5268bb84bc128400c201c005fbb4826d9b4c9d80cbd03a93f660424e58698f4d127fb37e05f4714fc57fb2db0473d9dd9965c930000021c000000b01f699931f6bcdb2b8a8b146fd129ca0c5f09b2da8b9dd5493a594f6901b46cd53f22f261d615623df833feec5eea7ae0e5ff7c1ed4efda68c398403661df0cdde0121ebbe65b72c9b6ce6cb6bffcf84e9feb8504898eaba3b5bf59543c0769c43c1cba952a8111072ce942d76a22f9cc0c20731e3d7c7866ef1ae50c803ed4f568adc68bddfd0f6b3f5e15ebee17e7cb1260329be1e37f69d38b6c400484c6b8440b1add94444bdaac84feb3403cef91000000b01b0003268462d464b9590aadca9df90b31202b08718f0e7939f60c4207f3dc9efc396fad9db509dcb02363e1745edbe1094f61b228b6dc0b8eb50792297f8b09445c262c3c76b655d92df5b99412fb24810819afef71b659fc24c83f28c1de15c8236dbf388e36d64b80d95a8ebbf48e09836d1317fee09daaa54ab3d4ca3ec26f9c9aa30375dcc53b41aa47efa3c55319872a6382166fadfdc0e421a87c7b7bfe02761ccf2be7afa5f2c37a6209cee3000000b023431d0a9c00f8f8083f5a27f521b20d134e321f670cd92318ce02da270c353fe42afcd035111e7b2a803cee414cb93e1362ad0f079e7fbc790b2d37b6c2b54e045e0d4accbedf8dfccfb333e044aa8fef5a0b41b352fa4b82afaad98300528ae58f65f1f3627dab307cdcc0f1d30e2528644595c6d75822af8e74e6b2b5d6e3d83185e732e0266789587e64203067c2208e218e43d11cf52100c67d4163bc39893149d602c6ebefc7dda3da88c9e8260000021c000000b01a84e8157eb71e43aab9d0988440c96bd8a3a222b03de2b81e22280b5fd6e4b33b887f01c46d0f6bd6070509016eaba27da30b863880d907242ce086317a1d98c02b0df632688abd4a83c01d6d19cc25a826ba1cf54fe5bbf0c31e461de0a5061ce35ba4021618dd67cbf652342a65830cea427e7be7dda28a020a856a21ca2bd8134a05fd6fa521ba9a81ca250c85cf2a4e6c98924f56e5901d700c5b861ac4d5143227d486adb79768cf821459b32d000000b01199902a5b70af89b5eca7aafce16777f36889feec1855a6e31b706cc1276ebdd6eb0a5c708166429e60fbcb08fd934c9a6b3ea8564a146e2beb5d55d07be53a952244669fa114f7a8f1ed4abd57073cd19e9df9ee19c4cc84e2ac696a073f05e9a98c16d42507907abb85410d5727ae11e67e6887da237653d5b8c744ec7b07a395b33ca0dc286795e83b74522b65ee17b8156b82dc21d16949696c1ef12d4a186ba8a1307a2d9d43a00b5419c9fa39000000b00a7a34347e3e2d7c28910856d046b981c624c1c105042d5e139fd0f8a622b3252dac6b45614b1a0eb6c1912649efaa55b437638f70a0ea24fd6a312322bd2d1c44b435704d23195f600a2a5ec2034fede40d33f9e957854afc1de9756ee606aaa5232a6545f07eb0db933723a5a7a42d181cac74db67fd3b921671258e93d899918329ad50b568298fafdc5b0f455a8526f588d474981ddccf7c3e62ed170367f5b360a24f00febb1f82b98ce6d97eae00000fb2000000b600000080040992a8ba39290ec0cb3fbd659f5f0ba45f6836f981e79818c8b52e2b1a71db663f834900000058f874289d58d3e927089c2640e4e0c1b2473d4b8f717a7dde8bd0362bc58a560d7a4e9564e961a6be3e6edb403837e4a74e5e88beba359fbbfd9266bac4da8e36259111b82e8fd09d47bafcae7fd95480084e4af8136d88930000002e0784031bfd31740a990c43bccc0d6f2fe90dbad1b99a1877ebff9a0cb9040a1e18cbe080000000067fdf8b249280000001380000003e1c4353939f13bb9af64b20ad359e86a48c70b9d789b83889599f12a1c431d5177b29d5fd00000016d5b0d1f3ea19f38ce7c20bcf962f193ad2a039b77e29000000f21043c4fbc75b1eb22dc51c5e4ec543d0d511d5d3e5cd9d385769b6e998aae9676fe754e5000000ca1bdb7a13a61f58b6118567735fe30e2b534fe06de77b5bc2a2d1e162959f497dfa5d514d50a6a07e85d73be35c3b3f8282c5119210dfe62309471a5d3e8ec42b3b2db10af83524f156eec6192061faa86275bb64496eca0b6eef0de2511178174f0030423ff71c4163196a6d7dd4847c66c7b8651c981c5bba96dd879702a6fccf957e248b45a97d5aa1122785687846596e20d4660c0d1d37246c00d5f2c5656976546d4289241497a6e919e4e551d14760e409d03029c4195a5152bcb5263e88ef27b6bffe038b3a9300000165000000a126e773a9905cbe07e94d260c2efcd174ee9a4502c197c12a1a8c7b7ead08ae85d5bba5a600000079ffda7849c962de7522b7cbc4ce6d6202798e921c2e8a9de31ab1e1f566079a977dba34bf2204117a6cb83fef76218ba1b6a1af8698dc4f06c98ebe83c6c5d2d20d22f73d653f54582f75837e1e6a30c3e48177918e232df49e45deaa1c9935c7dcbc86008ecb3e29e11d69bce1e3fb8ccfd820030fc57135ac000000bc03d4ebfdf3cd32133d82559d252f6f01a580f86ac6422f8668f7d54e9ba267a3620621cd000000944e9c81fc8bc0def7cd9f6bdb8eb18d39efae22b5f353659726a7c2c8457e71aae16c566d7af697d7e833786f372e4301180d0ee085407ffa5e5792c2afd09b8da8904ac9c47b5dd0d0309f3dd82a8725268f7f071d1e62db38d7b0bb329b5cd9810e17367cd9cca521070785d014aafa2349bb3e813e1d7b5a0a88804b8caeb254f7749f13b41fe82a2b42ec1920058140bf4c00000001d1000000e420ba5298edeb05a4a2b84b00c2ac55be7de07663118bb0e735d4015e0b2c8963bff18e2e000000bc15d9d600cf8b78725d06bce462ea28033b9739c7c738f687ff94a75e126911d339156809586faf9188b599493b0fdf7cb021e6a54234f7f879b3cc5d0d5c5a7aee313f99ab9676f141d73365c06c8c29e4fbb524903302e268a39ba3b91458167b1d14964dbe67be5bf417cb2f98800dc71b1472202c9808e9bc4766ab4b182264d851ece60fb356bde4e534da436c563771a0a9b37f3496089978901d939e1d692c78b53d40ebe8b83fbbb35579351a29bfe03742c0739afec14e89000000e517c7ce1980afe440d8954137ee58be1c34863d6ca0c48ef1cd71b73eb82dee82f3daac28000000bde36b85c9cf536b9d6e78e35fa933299f276d775abfb8ebb194b5d10128fd1c529b15c51c853c3d42c37740712ff03560503bd6fe8c026276cc27204a4a1a5d42de7d9cdf6fecec9503c4c92f5a67437ea00f9322cd1192a017a7bff26d66df3ad70d2cbae9a6f512eeccb0e53af39346c67b73f15fd93d718829bb6c9de39071e3fe9ac6f3679281d3f9058a9315c9f5eb5e583771087a144df3490dc95bead2ccca3ad3426b4bb944449f90f74f5add989beeb2c220638df9ec5fdf6d000000c1000000382b68e9390403015c674c14e8757ae6d8ed78b254daa1985d0feb83cda201efc3fd0bb61700000010dc71f2e9e56241ca3a2bd91392fc12490000008113d895a08e14ab3fe84904b2da2b6f14cadbece4eb5e8d4a964e76081803e48332acb436000000599d4cd74496d1dfd9eedc633a7645dbf4f69a7f8d2817b6b117b468f6a0a954b2ff2cb46bf1506814ba760cf28bd8541ab9f1ec10917845c972444e2b2c5361554bfab3b7e77570500555d989c7533de515e571b9504cc8a3ff00000224000000f42cf7a00fd06434e82bf3b55bf35c7f64cab4470212d2cf4fb73c06e04f7b42bd4c701faa000000cc62b438d21fde4ee4c8d91347db05f4f7938d635d468e154ae71a81fefe9457e3b1cb124372ddcc86e2498081f99da7925dd25a481d0844eafd329fa9fd0ff3a1919d6f46bc88a8ecc1c7e76e5f0570c6dbd099c4e30c7d7d967f336a0feafd2d865b3ac8e2ebfae6b71bca66f6bef4d5726df04b71eff9dbfb603909babf3594ca2eeb4b64ee638c690095f52c346a83f51d70f9b6e1d70caf31c2c0e38b425434b0f8047cc211bc70204cbfbb2810c55c0e970022143b2e3a84a74c387bf7db11c645358a521d90510ecd980000012829f663198c9273fb4b352a618b23e844095dacf6e9a21c6b355001e9a0d81ef787e3892500000100f9aa2725ed6f622de9a8a901547ba316048c37134792f664652a62dfeb9d7920a77a2375e33e6a8cbcf6e179d9ab4782a3c2f2ba82df0c09d7addb3076783372506a9e3a2cd91b7d102c421fb6aa0ca8622f581840c76eea069f37585b4145b9400255f1b0646683546f93137c66142bd8aaef285ade816950a0c1851cc0b5e2f3f3b6d69cd12954d37066b0bae36ef5caca560c8ce127d1e25e25b16a069dd553dd6bcf89f8387a9a6d9054c4935fad0794608fc0cf44ae443b793fff117d7e3cb0897c2d0794e5cd149cd43a6bcc43e88bfa0bf718fe234d9bc024e261391ab1f9e82c1420b8b85b4d7d767a617212c07e835e9c0a6fd7eb41b945c73b66dd000001f7000000c620369bf54fc0603e1693af471dc83df2baf919b6793ec4bdfe05157c35c38c03167734d60000009eee1123c1a2b2208d2c9267320c6fdf47f862464774535aaada429430e8dfac0c42210789bf3156db2fdd8b35e08997096367119f59cd1043cda220736eba41f6d29d137d270ec5e24934db61414ab75c9b2cae2acc83f228c64c555888db81a8029380c14efe41ed44968fa2e34331f0602a4d6428f90e3e5ed8eea6ffd556766d99b5280c7edff231ac8ae097f43ae89e50252719bc1cc1a28c121fe936000001291d6ecb534620138d2134e568117178ebc1b5e907bb8aa70a8ef02b43423376cd4fe9453400000101484d36f611ab92255ce67ef86ed38897174e51cc9853507833c4bd3b6fe65d979fb470d07be00a46c60bfbaeba2ab7740a0b55f0b03033ca5b6e3ebacd9693c4aaa2550c1b35ba45f6c4a3be6fddf32f0c33cc7f0078402b7eaca4922f7159a29908511270bcf124fdb1771ec6d2a1473c7a88f0fe61fb09ed3b2508eb66896e6ac5cdb3b4a358fc674656e59c9b075a2462640fdbbed8f6fe18facf4f709ec69a39ad1fa8aae87fa2dab4424efd98761356fa2e6d087d69b8502a6794146191b62d4c60343aa21468e29635652848c7eb24991e57472d05629e14fd35f4a0fb53b256dc88c3f0f6a22f6e76b1ad95b2d5e7a1fc3f9b9fbf9325dbd284d09c9e7c000001a8000000d401905d65cea117124bab459629e44142812c0ddfe31553677f28f786f2ac4f1e40972ee7000000acbb7ae45094743953fd4812f86d6e78ece5251a72b48c029c08dd3903ac9b16bd047cb18576ed958232100bd1c49748804848aabd52d6cc8e20455aadd09526b78fc30a752924cc381631ebf0134053f373cc0c1c73281d97d34cd28341d12d646e66ea89112fe4ac4c842ae0b043f34c3563ce8c903fc822a1ff4764c9babd3fdf1a2d8b736b6b7fd348f485bcbc17f6348faffbf85735081b0c3226e3e18edbe082eb9cc7810a4c5cb861ed000000cc114c6c74a1098799d1ca49f24160c5a09720290224519b0715fa8dbbedc976b014b80832000000a42b9eba210da47db453f9efba4defc8edf7c226b85dfa2bf9afe041166668b6f5d22a649c9a25fee60bb10ee75b7d522a3f9f9c8ff4b40bb55b34b3c7bcbd8c0998d7426bcc87156bf439a7ef180578559ea2e48e1d1152752fb07d5fe6c2bd758e2e4a58c43134404f89b19e103e99560ed60f2c238458152e9cf2fa39085596af73b250abe6fc0eb7acd9787ea5babac474e78baf404056f91bd0506cff7b76f26e2c4b000001410000005b213601f100186d32d0508e1efd5d9f88f1b35ced831aebdba162aa3e09323aa049f555d5000000339a372cf570ef8b1612c2f982e53f79b8e83da27a9ad0ce1d3a75a742e1ef4ea365049d86d41d24a565174fc9c66757e1d9c0d7000000de035a1df31cb0f8b04768b35d795cc12aa02415539dfec1f1a6612fb01d33ef6d67f1aec9000000b6d75bdd1cec795a1507008d4b785000b07ebda00b36fee923a9c76639aa980e1256b4f494294199ca130559a384ad00e7878a8cc9b58b19bec0f8b7d8242cfdc5eb53fbc856230ec58072fe69ae859ad09fb1e739b2530faa6689b8c1cf61412a8671d0e7e93d4513d36ec09b1efd2229ddc1626af7b563e7f2cd216b004abf28be3822be6345cafe0501c345d78fbace0c02178094ae9a51a34e90db4b33b82c9fccc4cd29253387cf963f0499834e60206b78481b000000012d000000ef22bbeb690e3dfc65effa78b9fd83726dc9bc5881d27680eeb8d2927b390f7ff73a4da25b000000c7ec03240a337ab98851c4f88a58d8b99d20271b09b18b9daceab4d2e930b5c1aa3eb4afffd3071cf066cff1a6b8fda636f96801d03ec3a80ef33333244ba383febfaa42c372196003daec441098ab8e3b4643cfe06a5c3af9c4ed4b0c800ca3fc227c1541014d423aef17c63a0c7703b97a92f421dd7b46312f2302f2a85756798eec4d1f92021960452175e07a2204512edf5a8fe7aee98a95727cd152027899ee24ce81613532c0d5678d0925377a20d04dfb3bf26e5753bad859d313273cf42d8bad751bbb1300000036237be72fa49c30a26dd7635ae791a7a0832870084f38d8e2bdc4ebdb99c9ca0f5a3b159d0000000e9ee3f59d94c986b861da0d6df3a000000170000000542b0540d9c18c145b4d64248f7908317c82a8605bf537d726f3e0d6c90c8b95179763a2530000002c7fcd90ba13e150470d2d6ed8a4fcd699b7f9e8bc974abcf03789c0ee5772d2418e423d44881e382fe2261e41000001141b8c95a933202cbb22b0c478bf8b153823fa93f4355bc106580054904a54b781ce4ce807000000ecc2929163b599ac2196f687ed2e309c2754c66ad4c5c5b93e637a6852cd921b2f9d482813a0b8212d8150b4ac21da37d817470318195bf2d66ba2ec4f170456f1904f92016599020015d32e757c0e7d88f3f10a31494fd25c295a57ce31f4efd2faa0543902ffb9a7a7d974744fcb5184b7e12372c73fc27eaaff6ba494caffe5b94caa9f08ba868491931dd86e35772d1a0c9fb7dbb5c5d72152336c998eb8d494b951e63d1e93fe279e44bfd63151d42a753a90c33be7b16e185998736b7d3f32b8561000f7c55737bbb1ffd148ee141c92b893d9053f91a3e1f51dec42ac5d794e00a18b827ba7acab3257", + "txsEffectsHash": "0x0051eecf5501d1b40ee4a46a97e8fe1019b793af1cf8e9b2f8799ddfa7221ebf", "decodedHeader": { "contentCommitment": { "inHash": "0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c", "outHash": "0x00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb6", "txTreeHeight": 2, - "txsEffectsHash": "0x00c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba1925" + "txsEffectsHash": "0x0051eecf5501d1b40ee4a46a97e8fe1019b793af1cf8e9b2f8799ddfa7221ebf" }, "globalVariables": { "blockNumber": 1, "chainId": 31337, "timestamp": 0, "version": 1, - "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", - "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" + "coinbase": "0x8bf5576ce39fd6eaaccfff10c788ea2169aa1af6", + "feeRecipient": "0x00294e7886a600098135632a1504b7370dfadf7506422af0eeae04625aee3f02" }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -77,7 +77,7 @@ } } }, - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd13000000001000000000000000000000000000000000000000000000000000000000000000200c3ae0aabfcb173f9be38d2bd8455b26cbe20485329cd9401811b68d0ba192500089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", - "publicInputsHash": "0x00efb18046515e61fe5ea99224aa9d9ef6b4330521cdcc698b4810c6a4167309" + "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020051eecf5501d1b40ee4a46a97e8fe1019b793af1cf8e9b2f8799ddfa7221ebf00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000001002c672a4d7bd90c4b6ba35bbc9906598862f626554be3cba05de19265a8ece71000001000ed22b14764d5756c4e97521b31e93e21192b98b3bc2e2559e07b1263ce7b1be000001801faf8e36b0fb8fb337acc1c32316e1fcbd0465d53c47a2dd73ebb031042566cb000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008bf5576ce39fd6eaaccfff10c788ea2169aa1af600294e7886a600098135632a1504b7370dfadf7506422af0eeae04625aee3f02", + "publicInputsHash": "0x00b9c2b69961a28b1d6726e5c9cf6abd22a3f166f3d4c982d6a83484d6e3e9d5" } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index fac2fac552a..e201f3095b0 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,27 +34,27 @@ ] }, "block": { - "archive": "0x069b6a34faca1d26293c7b2180bb3ab11288ff97ea64341639d846e2e16fe21b", - "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b01cccdfa409e3e14d1a02be06528e7e9a1ba8c822e7b4702d6f83bfff18eca561e25bbf87b7949778eb323576264464cff4897322d6ea9954e20963cf5c2ca4532a221d05feb30ebeae425190a4a30bb85706d49e102146104b237861b801b98ec8237294c89ea946354bc2a0800107d82c61d6958fd67b75f885db8a9d7e4171cde0ecc8b2cfa7818b28282bfcf5eaad2121baf3606c6522616ea96d73105d9f57ea7744ba44fe10659b2f6c07ff459d000000b00b6d781981b272e312a56e4470ab4f546e355c8d5adbc0d9c20e449a71e02fbcc1caadd4794f476b4907601e64c6a5ba935d02cfaf4ffdbd3f577d592ad3cb6133d1d5f8fb7b5c13da6cef9206fbf6e8f062e2660e06782b2559d569a7ef645690663080fe6e637c6a1b6ad4b5dd34161914b8bb8e9d47673cb4b0df16c510d238afb5fb90c6cd851096bd84deb227582292a2e0742a94c9a262c2f903e020e7a52418a23912a6a1254a0659b860e3c2000000b00dadf5ef1869c869c14d46bcc3bcb6650ae555a77e74797c9c89a6f9d54f8a8c292c408e8b844e49cf6cd8a7f77c542cf4aa2985ccf6509619db87c7d2999d0d5a4ac9899e78ffd7b203dbc82c3d7de123220ad8bc6d492de3d37c880ff9de082c884f9c789437eeac9a0863588e78d40643141a95366542c203c94ff6c5303e49f5a784f5dc5e546791ecc5a69276d81657ad82a5c4d592586328904111afc95c9edf9290ed02cb2e03b398c6e87f650000021c000000b014b0571f7527574e32dc1a104c2da8b1d0cdf7ab040b52690efc4aff99235840ba8ad70743428f4a8031537f0c3dbaaad3fa7683c268a107c4ac818b138c1d3935b5ce5c0b8ab947d114a4a430dd0af62b0817f2b7e4c8d180a68f0765bbb1ee6d991609b1d2ff3e3a475878ea44804925a07be18c7485977db7ec5d2aa9a12bbda8c7aa803e0b59eefee7f34b4330f41f6d12daf1fcbd49c0c100f91090e65ccff5d9d83425d19133bb4d37b71a2db4000000b005f4a5e38030e4e0d457ccdf030b91984d62260af471fa1acb938d4994e78f15107c5ffeb82be04ac0505f0005e38f4f823db2275c2fc048df75a7fc27d7a429d52c4c58f28944f58bfee88b744caf4a7a7b1d204c2b8f2a1b7f9a13b5f9415870a3bc95f5b83914e465f6b26a1166970db39039e33b8579d15ca81b3b4bb274671348c374aa01b81bb0422cbbba09b017758604899d1cce743b8d907bdbd0f652efce605d1c8c4fa7ad9fbf4c90941f000000b01ba2ff8c40759d6f152f9263f3768c930c1efc6af0c3915df1814ccdf47c14880bff5a2b5296c61708eb8d3dafbf9d52203abbe57289c434790d23cfb11014823d20385ecbfc3cc5cd767df7877399420dab13828efa3a0a7cd46214b001cce340087239d68b8a6370202cc0070b8bec1e2ce89bd452081f0857c77e47394ea9081235ea65a75d8dddff1a77410833472b059f47021a71f1af462a63af445f290aa5644051f565613cf47ef766232aed0000021c000000b007a5abe5d5c17b682619b68ec470b2ca1c09532f6407ae7e407505ae760c8f4abe8d2023b68f4bdfb2df44cf7cd6a27b9b677e61f8966fa6239e035d0c8d910cc3a2ec5dff26d8e23f065e447753ad2706ec21e7544786f8c2b3f0763c69b955f1b59c50d14647103e156a28d5c93d402b962165ac1fc769866dca38d31529e18cc793cf289a17abaf1a914079302e911a003396bf0179fd26004da3e6861aa9d5862f9ea50d8386d055c65c013dc159000000b0272d22c9320210d7ee823c7ffd20235fd9c33e99f103903f65d08c9e960618c6adf96f9cb0f73e1d01d133c2b0b5117e3e0b450bbb9d54bdc8b4b7ffa7df4ca8224a2d5a9a428bb56edba175a678afa78d9e108dac2ec27df14a92cdf808a80a642f8c4c39e84471ccf428ad2f19bff422ee4d5fe484a732d11b3e969ac97c1f7b0a5123457d80db58403877b8b8bc680cc8ce1806869a0fca21a2afbebc81ba22ebf4b52456df67b01bd6d7bd7ba900000000b00fe0b1b55f950413528b351ad5af93f13c667f01b10c62bfaa83555e00e6f0851e668c967dfbdee3dad61fad6dae1231b53251a5acf6889fdd2f90a95c5dd0c0473e6b34f35dea0d3e0e3ca22c3ed25137b97cc8b2df5230e8893f5379756adb3e4d44576911524ddc0b84fbe1118b080eea14f88cc6881654b1d88d02711b491f436c7069e21332c7008df05454811b16a2e323bfc8facb305e47ed3420e1c2e0d157ddb2762fd8946d8ff3833decae0000021c000000b02bb35afe2bbbe7d4b83e3d056972a8d3d652edaad506941f87f76211f19ffeee03ae3bd84d5590fe69385ceeffbef9638eeddedddc88ea6e2f2fbddae258b13724ec33c4df23db53758beb0b48bcdf72d8594ab2ce907aeb36ad29ebd9d7c299e95a470e8f9ed8f2bb29271571f701421c28a41125202e211ab2f95eee4ae034d9c977da10f5d95f44d396d86aeba00e2259a7f0cfb3f16add3187c1d0d4d5fb6c09f56ab2c14a0e110c515b64e26323000000b025a6bafd1ba17ae5d1e6d091fcbe083e40239f465c27ff61aae10b708a08d4e8161111d59e2cfba652e099e00c1670c25c7fa6949d156816724b8ce1889225ec820598b36040f41e799c54648aaaaa27d5ec64e7c63b1b46ce595e67246faaa69a01da8ec71c145aafab26e7d5c9627e194d3e85b2e65f80624c81f874cceef400d1a0e16fd49dd8a3bf1ff04cf408cc2c2855bf2fa7b8f260e7e7809c77278481bc64a172d9b720c718f41fa8227020000000b0166e0658c80af6cfffb0638f75897ac5162d510c1168ca0da1cf4fc34e0b6db08e7998cdd268eb55636854947c37e4cb50333456fa5cdc212e79859d9dc161c18704b51e02872f57b44d3c18b595a8e5f3aaacd6b64e8f8382af61435414797afe4d09a17ca2782d83ca41fcd01a8ea22e599e2b78c80b4ef4009ae580d4222d121d7748d2cdef2506c0971fec142375289309533ad9b5660798ce5b501b0e86aacd7c6fc150e5b957753d52520ffadd0000021c000000b01c65b3b8d35f7bbb20df800d30e76bd0133f10900fa3a5fccf860449f231f047014068c1c8aa1c1eb24c813239bace6a9a0dc31e49046189faaf1f71ba87d74a0dd421d32c045e85f18abd3a0a6bc33c70acd2b95718172e9dbda833c3a0a32f892f902a52c17b08cbbd786edd582748210e00c94645571863ee6f8bff96b9dd8751ada89928b581736f95da5eba8f3103c7d2fcd20628cc9b154225f07b49f4e57b98925ff433ceb4c6f232902941dd000000b02c7b6569a613950dbbfbb5348d8bcbea68ec09834613fb7070352a9b82dfdcbe99f1766eff480cf0307f54e4f0f869748719835f316dae3d23aa15a089d07a109c6afd8292e2917add56cb3ce01fe6082964d38b82800ef38616999233216f91968d068b1bfdcc266b13f4fc8607e3d02bb653bfa0d20adcdf21de48e71cf634115524592a670e8dff95078077b488800d0f8e9b7bcc3a9d2339462817a5eb0b094155d8f9cff233dd719a36b7159947000000b01c4031657961b27709eca65b4a09b7daa002825cc779cf5c14e5de45e657a55aa07fe3e033222256c28170584b1e4f9676b3f45f4e45435d6b27db3dde81f99723d57e63fba10d6955928f4b880dd0ed948f922143302fd23f0dcf4bbd59cb889e34c5b0be0b8723d11d3bbefc2d28b02fb7d1ac0f6691de9dbc893c6b6b87db58c63df7439f4c089042ce23f50f9c7706e1334ba997de6a76e924f3e968239d1010f8186b6cccfbad9457047cbdfa9c0000021c000000b016a1af708c1576469e24c7ece11249803b791a08ded47deba60c81e201eb0ee5e96ab380a93dcf92c1509c112e2fd114df29b41eb6724cb2e5ad409e7191047301742c64d6ca1a603146569e9c2a6d244e027abdba57e35284141a93b760a07ba11dd384c58f8849cb3dba9981bf95012cb2e806206d060cabbe8507716ca805f6182f56c027aeaebf4cd6df9881f82b2727482ddf6e6449374787434e31654d01899bc79f29c9be27081fbf96dcdcaf000000b00378e2be7ed2d6e36f199630071ff360d880f5810647d05c9530b4b9b2bfa6382d82f9cf6d094b533aca287f0e5de21d43fc45d7c60b25a5010b90ebbe7aba46003b7265059449bd55b2819b031753a6c2c75e012f5d3ac9fb4f5b31a5f05fde78c1d38f57aba1fb920852f3fefad26a13d161ecff81e55508e845f5c10782d66dac94dabf72760eb99c69a3f94ec8f5199682bda062b3632a192bdcd9f46d87df7fb18cc1625eb51007976bd752dcb1000000b01d75b72ac48a40e2219493c807857cfa0a3c3ce8ce1720cad88ee781cc3db7ba8c59baffa46d963f9fa4da0c2fb7e3c6cd73607c557be4efb125cafa9340948b8b664741adb8f5fee38d1a309505a524dd525e959ba1839a9d8728b00853a25dc02b900506ae603b25e9aa3de9a15b6311d56f9e0849d4573e1b3fabbf4f7801dfaf50007c6679bf061e60a11634033e2a126a529c16a2b38c2d5fab70d9cacb4618353d5a9857564193bc81b25f90bb0000021c000000b02102a1e2a0991bba7d3e3ee30658257b4b1dca5b0f00447b05411f77d57403a9d0d410a61703fcafd1caa57da058ac59f4fe8e4fdcfd03fe5c1289a2889c7f539a4abb3efebd0654fdb2fdffc363dceb528bc1f0f13cf7b8d609376f78b0ce2982e2ce53f32d984438638f70859c187b2c024960edb9ea00faf43d95eb224ab964271d8d30fefc92c5df36cb2c5bafc3056edacaf783acd0c3f66344a9e6a72fcff421a68f6e6b0c6e5e6c022fd0df96000000b00cad9cbdaec7af0e7cd968d1420847f45401be9ad9296c30826e9e309266dff8f8974221f0723d93485ea05f853ae84504a3416c61a72acfa7bf541d68f647110859e7b55d6191aaf90eb19f7a510a005ed18482997483e22f420248b22f1fba77e439d13020091bd9942964bb5665b5199b7b06a24d8115cfca5e042a216ab0fa84d733590f9d60820822405902579414f90967eabd0eb9864b010da5b424a1d92aacd19ab7757c572a380c4693f615000000b0151a0fa9f0a9d6a74db6afc20a180635ba6a4ad5232d055797ec55432b69b5fd32b9d97da4657424c7fa05dd0eb847406b1313f47232a19fd600930c736b9c73ff2903198e48408639709e76e74e96347bf254ac95325fef3278c9c6dbb866ffaaeee058893f56cba9e7746f4d9846432f44d79665258385fc13da84fd8e6504833cc26ded42e5fccc3e3021e7359cff0e5b3645213b41588f5343acc140edd01ee9985c029a9093a88b434b1aabe5b50000021c000000b00481da8fbeb92f3f955d1de236681fdd1b436dd955b18df77e0a0ace915e3d5d2438e38cb8f170ae5818a394e2e15dd87957a060199a377b16c9f2075699922afb3583221ef4f2f95fa67c88654451efc1e9c9bda6decef0fe94bcd838e3f1b674be82bc9c800cd72f0a95a65770fd8f2b917df09a9e843b6bc2b7361e52bed42ee00ec0dea4e342a59fbc252ced75b829758c47d0be99bea5ada45847f32aadaa563c278887c7ce37b44eb586ca2c54000000b02ac772336dc581e6729d096ef8cd26c8a107b44ffc7a5ff3b5803ad8ea0341f4471541f8ee48170c4486c41146bbc6c1536b51a14aba71750b524e451b83405cb5bb7a6c64379e3094807352e36a8384167fc399ea939537eee7cb25bb0bf90f58e70c2c0c9b7083a4a3b31c61bd39a10d427205c49d534685498325dd1bde0db60ff0acd080d624d26fc98a835804170ea1e5667c92ff6735eb4aabfc32f05d5dddae5f7139a51f0d8c546c8350be9a000000b01c41c407509c96a1ff0d703deb373e51274ae4356575ae35f96d73db174c1c1cd0cc431ed51dfb072600f810467cfb76e34feda5d2de2c3bd8584f64644fa29d6686f6ab85999e1f783f20cc4df97d7f9bd6a8637160d5fb4e296ed441ffa0d158a2d23814c124a7604c61e5c210051b278f287ecdf93c3e870a0e0a60e0c2f8f4b3de785d239997eddcbca46211026c0f04e180cc13435f710e7b3534c16c780f8fdc8d0f1512f60e6b2896a5d07adb00000de3000000d50000009b2e4f97d93db50f74fc69189a5e26b799510243dbe244dcbb44967aa88656da1c48120616000000738b812b2a894b7a041f4e64eb90eb036b6b313837fab63019dffd18d228eaeb2339362bc050d2fdc9d74a5aa679301f6352f34df8e6eb14626d1adf0f6189df161a93703f0b94eedd57c79dc26ee45095557e120b1164040c649df6e9faafd9ea478f6970a67ffb551ca2a61f4b3dd0cdee3a4f00000032118f11670223ee4c0f789d0bc948f9429499679acc98402255f3b7ebda50b7096f07cd020000000a4c387693c78b8330df2b00000194000001282f80912c099d4e3d750334ccdd6715173d17840aa200fcc15ee91c6fed4ccdaa3ae268730000010051a214c092e29d9de3b199c52d81733b911044214ac8dd34dd58d43f64fc0f9171a7fa241af5e3b4c1b3d387586e65df994a647f134b8c66217263823e8d1c006a8a562b88bdbf1a291aa4124907bcaae6d60ddd472e1240adc6813126dea5dfcff57f881127ab5c6775335a6bb84d2deb8712632bd735a7e207c98a4e5b4e75e5c474f5c80743fbfed4889ee8e956156e8bab7f88a635c28355a0665b641e8eda59d42f6bbe125f8f7eda9099f3e503b57b8fd725770312df952ec5aebfff65c6c7db74fbc62af070ee02fbff719d330b08fa941abea737f693a9a5bc31c588167816995c9fc78fa6e2d2e9b62ec0dc74810ada723a1a1a888b93d8befaacfc0000006413f0e872373f0a05a333932be7481450ed99cc8bb946dad2095ef0bc3d36a1beec7fb8590000003cf09a5fff9775bba30cb6ae4d57a9bdab795e6d71ce13552d7a5c3ec83b1127f1ee9ba21543e335453ad888b42605bca2748045d40780adc9f0b71f4c000001650000006d01a0dfb030d5d45eead1e9aca6c28ab592623d752b9aba59560b247b676620d21dcb7f6700000045dd60f8bb788b861b651c0e29859ccc5e52852a7a7f3b437eb86d2a97703b57860da3dd28a042e941f7078ee53570fa5868b1fb28d410229a1a724383e0b8e5aeafca1564fe000000f0222b9969378dbfd4e287d09e00fa2306287855f50665795f5967bd5635fcb66d242301bd000000c80e904f491366eb592189b815cf906f09187d13b7cedceba2d1b3a4e901b232e1ba54320206e9a1b74150c5619f6115cc2045c929db39dfaee8857fe946b29a9867f84944e0679a46a67b8fba76281e241c8375a020c05c4c00885d11f941616d610b2780d24358657adfde07b43fb267991239f15b0dc3d7008b29724c982cd21942a826f3452462a4143e586b99d1e66bba7aa92769d6add1f8fb898be59360103b24f4ec45e623cd1a3750bae1db2c33528277ddfe374a5ef31d37ca67a2e88aa88542b4cbe4da000001c7000000a80a98bd98eff03d49246c898e20a8c08f24a3d228d2786a22e0d494d0c22e32820c939caf0000008039f93f100b58dd0b801d2b7be8a64f3759d7798d8bba6f5679ef91d42057b8d459449c799eaa9b5b8c191cd4e8a207eb7ba51266650f90c2f8dfed258d1e8bebe1b4104138b42cb391fc14510195ed659b0bcbd11160a2efbe35f0870f51c9c1e5698c31c4e69e135a3b309c63d49ed09873f1bf0dac63eb7ca3af14d3cfc59f000001172249ba38eb3735939c2e61cc026438386ad8983b207c9804caca99af3fa5bdbed0577e2d000000ef300c240dc5cffa6ddf8605080ceb719fc22f526b455ee006061582a032080d53df8bb27daf1b8fc5c5a25b2e9755a4af319e62eb62c58828744cbe8295fd1fa35141991069070fe15f412a256a060b9106b0915e7a51a744ed836ea103c1eb94c67a44857b3ab13ba433b5ead0e4b8e5aebf07bb52bab76d0a0524293c4ce1055bec5c5c264ce8a3c3449611a8df668bbd386073cd79c92c5243be5751374c2b41ecdb4bdee00726b8316df2b508fa6d20ec0e1e256b073ec0a179ae35197ce51189f7c8c2e2067eec20f1389d35582f02dbd70607c6f4f1c33df710ff4f984da41e8a6b095b60efa66146d6781da900000180000000b41fb23fe3cb799b468d43176b118694a984232731981b6076bc1c2a4cb61f41faff82a05e0000008c41644fe8d4771a6d1cdb22b2f57d330ca0e86e002f9274875f668f8232ff74edd74b2d8b95d47f8ca39a3a5da8e1c7f110a4d72592e51d7663619ae84a5511a22a85f8205a4dd6f8d9b8b6158fb6b312204e3fce0a6061770f294083988b5df9633ec034c9e734a9fe6ace25a5f9df09f2aa099222ffca3033a9e972eab906250f5ca43ded2cb85a868f75f5000000c40b628d5dcfd23e3dad47f64a87a243c7fc1f7731ce3d6057078a488f5554df298ad232770000009c3599a096ad019f2903d6634573293b7fb88ba4034506dddd538fdcefd30fad3514e7f21c1bd8c9ce411b37be709505d7546fabc0db27aca6a0cb4b3fda21ee3498919f0946e8205f20f2ad8ddf1602ca41da42db96e661cdfdfc458a4368571e07fa0d7be2936c0a977731c58e8b1ccd1ce459d15ff4340532633b7ee24eb7a8e35cf808c1e2a42eb30c427cba0cbbe2142955acf06115994319c80300000123000000311606efa9cfd20ed91cca9e235f580523d5f688f8c5bd7a77100753f30a527c25cf37abf3000000098fa3449e18495ff602000000ea0abff8101380cb7f2088ca38a028672ac02ecba172d4ea76a2a54938cf20e7cb181af093000000c2d8150b34763f7fdb00164344294543ae357ba387f0f3281e3c26ef1d2cae588b0ca69e619bff5e406abe9df4377ea421c62a13259fc49a098964bc128d6f29390c69dc1eb524df2b07cfc115cab26b494bee13a6c348b8bdca248420ef8e2bbb5b172d71f67c1b1dfa60dae4faf4536b437c036fafff99fcc260f718bfe407ddd2397a50d2bf41da4ad916f4aba4eeb8f4fa548fee97247a74be476ba95973a7ea7059a2bc1a7af577359eebac6fb04a0603bfbd04f17fc70b1e8eef821b2d355658000001a70000007b0958e3b34f839790d42385d30cc4e76350e55cfcc2b869cadd88f74a6720f5514af243ae00000053a0d934fe40922b10bc58006ab871ec42789b6b6ae4a3cbc80e3778b2c4870e69710058c8362a4182c1f01bc2b1bafa5716aa8a9ab0dd1dd3447393cebae338d486145cb3531ae4b2f54568f840c41c130e54800000012422e40a9405841ba87eb94ab888332a1c1fa95bea47d672b5171c255ef4ebf9d763afa19e000000fcb1ff0efda2f1bba8f64569b3c07303adc88a6592935bac39bdeb3be9b9eb3978ce13b15be0f2fbe157cb8ecb618c3b231f4f1961521d476c6384371222a8de40fc580d6cbc35d4043cdb842b7b8f74bc7864b849ed5e75d0d81217db8937837c3add7cf7720471ad30303ea7cf26c44f2cab9907bf3e0434917b5905bd17720f1a81a8b96a063221234d18aa0d9d9d700f0dfb5d229171a34cdf5a8bd4cc0b0e8537d5188be1b53e8839a4f09e249dff35f9f68514ef9fc3a25606d08f5f06162a356cea54847454734c82a102b5a96b261415cc06ae8f9cd40782f5db460c0632fee0294a9b68aa0b231bdb9bf641c11ffbb277001d6f0a1789aa6e0000009f0000005f23d5ab95807762ebce1fde33b83bded8251ee6f3ef81fe0176107d520add2ad50f045a8f000000374a65349448438a651831277798edccb13b33cbdebd0956a2c44376626ed825b87e78ea8098758296d6a5616de77cf25160162157c361a200000038207c2a9878a818da875db212624be3bc457853969e58ef8ccc5eed8fdfd856c2988d7dd300000010eef4ded52fa70de2c8d475312dcb48c900000103000000ad2663696aa826277ff4591cb8eebfc3f4294d3bfe682cc0e3f67eb3711e7ca7738e7bc793000000850a889f968e38232b5e26d158aae10328231d03a3cac72ca51a9d2f68d46b6243e6e29a4588e5a644db4be38988b245f14f1d0ea4ceb91272f5d7c6acb2a4b39ed6d18b704a55addb2f00f1c4c6bee12f4fae4282847add62b1ae229f613098a8ca155e74322d1629e28f39b58485aacc331f7b9a8e6355f95f8c74c9c0686fabdc00cbb8280000004e0732d1e5a52368eb98a0cf4b7e6ea0a405272d3326301509b94a706c9d4cd341329a1f0500000026dee3ef2608c07830c5be2fcc972bdf5407d70201f7926ffa9322d16153c645c39f4166e5e99000000123000000360bb42afdbc6eb6e73f1d19ed5ef0d509efbfcd13edfbe1d99a0c430a439a99095ec8a2ba0000000ed9e77826e9971e62ab45bee72a01000000e50f6eb42c6eb91935993e3ee929ef6e3e6a6e412b0e99fe237f689e53981293e65848ff50000000bd6212a6de88e2a6c109833e9c377915acbda2338876f8c3bbf74a845797587d8ad5d7975c9311b590deb07be644047f0ee92866b195ff58fcde99255417d9b3257806eddc4752a60761c1054c34b5732f3f3e7c51a545cea98d06e6952173a60238714a138154e3b1264b12a9a34ed31ecfd6757d9c3eac373d4af975e7474baaa76de3bdf0aac9b119e29527ce5fa499719b6cd7590cc6047efdf4293390fb73af2ae91068fdbbf42c75665cff5735983c86f1144ea38d23dbcb4f42bc00000113000000a800c7d142f82bbfa67f1a6491909ff7232e6a64b3d40d117482a37dc29629055f59752e3300000080ba4ba559520b295908c8fb35c27a871b5f5a6b197b55f3dc60c896019297c1e9d8f641e6654b4d3026f0b2b232d7dd4253c3d2168bf372744d195b8e62029a5db788b9d811fac55ddf2e244853d90e21b979ab46b9aa89c408f796d67792453353e5e2dde554220a2d728f24b55ce796883529ff119796e59d3b4bb6fa13dacf00000063260e879899ff5b18f539c8c37d10e815c7fe8cba209e846c8763af3b93717c2d3d247c280000003bc7345ad89e0cf0e6c48cc65f16ffe90965a1fc55216b03d0855dcc33683388cde4367f0cdb2d0187411dc121c65e47aa6861608c8bdd2b3e02e2c100380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b002d138300338fff5b1653e32c746ea38073699f4ef36b2a21d544285079e89de39db6178a794f5845798821ad7f8f14dd60dd8cb9614160e9405a64d4dfeec5cea589d74d3c9c9317399fa1fae51ec10361e5f543fd00f08e2ae3f9402dae18ef8284aa8c5701af8d4de603b1d99f11b218730859b17a392b5e1d7e369234026b760af3967cea8ccd9a91c86f2126605003ce399337dbb636cc26f2bf7c03bd041476ab3b8967c77a72062da0a6e60a3000000b024f0b88c631a7e3df2ce8cf5f0c2e7a0d8b17c9e3e9f9af854e2c2b631ff8a43b33fbec6d3736d3ca80fd714cbd7f7b6ec31fc7656a18a4075f0c14b906b4989234ebcd779ceda1f565713a9638fb2d58c5025384fe7afcf25a0a582ef98f34b4f83c3929a6cccd67a2a039d6aaff8e71dbda080c43590f7bc2b714ce2bda41190201ab88b57a008dba39bcb6bf822a20ed738cb8cd9daa9bd682e13ea2509871736e790a8e151c9f6ae7f95d8be60f5000000b000386259a10d7a31659529e4be89565f21880c6d3ba12d7244c10417fb5e96e9a362d14ec37e81299d7e3ba40dc6f7af50c76243c8a6fdd2982b943ba5d7028ce7ec344af7594d31b48844cd83837144565750a3ea49d72cf56a30ba5e2d99bd6989b80a571b5edf243535c1181cd90c1d4aa93a5cddf369e6ae2f64fec586cf2105b2a268a93fe97c2c7e9e771c32c42f87391eca587989303592a89fc680edf7977b77bd0dd714ca588b6c0a544bfe0000021c000000b01234b682808dd749488ca128a9e76a02a8400856f51ddd96acbe4d8e0b3c794fa2cea7b6f1db493eded35742434709d9a520218e5373491ed76b45d3a717260256bb5b50c9ef75a24a3cde435609f2390cdb42c1d5abe896e5325e911fe7a5eb738841aeade8ec5f890c62c1f195b1db0a724b659935175e15ba2628dc73479b6381f8a5e00d4b08e5dcf92097564dfb24a6d53ba73c39194ed975268a26e4c1b7b7fbd7facb7a0c57ea5f6a7170fc93000000b0146ea07b5dcfeeb9d06d7fd14d26de1af602bef14033c1fffe24ab22326acfe59a03b99f82d2794779594162b1874fc7dd839c6be40c7b20e076f15184f49adcb343fb0aed4c49e05299ed9de33f60853d4abf346429c4414cb6e4a0351a5f049daf8f60645e304a1e29260b5b96e72326f06940f5577aa2a2cb89ec88228cc4621953a2ca8ba4b0ef096a9e814bdc8a01c01762ee8cc425d3f8dfbe799fc3da781bd578025356ddb74ec5d6fa77ea97000000b00996217a379524f28a6765d437185e898801a0cf8113fbd093c920b783c7e4f231ec155ad7254a8646868749f5cd89e5ea80b676668f870110f04b26fd0d6447df541c566e441d347d681bd6fe86b987012083fab5455a8d3085135488285906bd85322d34c50b1401e97d20fbc40cb1262c95bb37e84055e5b7211cf5b384ec5ca9bd67f36b96cba45c3110a89b01ac0612197fefb167923856b3f335e8bfc5dd05efbd7536d80a1649882e1f17db5c0000021c000000b005102fdb9f5901e8533c03d9584de61486060ab0fc485fb4574159c8f190474e72ee4cbac06f9970901957326ef1d7470e19dd696c402a3a0b57f80839fbb28509b44fece2f8a40aedb0d06998d6fdce266f2b9c12bc842a6bb8aa7aba0514f90f1e9389bed6e157b7517afc8a0ed7461a93179d5b9ca381e91cc7f1455d2d52d26524b0c2789e83010e92ba7711b6c606705bf746ddd988d1c5ae2541993de61c07d46c91e9e427220509e8396b35e5000000b027e413fb264edb09d066a05e3cbc3543c6197a9fbc8ca0c322dd81a5dd16b1800ea842326d6ee9df71111f880bbdf96dc6e90c7a3b889f21926f3879a28063129fe264b0d442664883c3f85ffc26da1a1623996d985b5350c7dae81f09faab39eb347547305a3fa724f41880b8c1fded04ef041be8d2913543dcf303c2cf1753cfa12f470b91a09baf2658262c2440b8285b26c4f97280a9b5477706fdef3fe0237dd83b3e5bdd926cee40ee9dea1705000000b01d9dfb90f09a1b71185761de45cc865cb54c2b6aac6ae76183edd2c35031738d05be9f773bddc6b7339f2739a16c707ab48e23f028c6f324d7e93d9291f671aad09f27680a9bec589d0605f5e10c4bb8b43a7e435d215a49cc1098e1dae496e9526cb585dafbe19ba7c066da5be254ec2c1b780b2fe6b7c30a3bf0eaacb20402d37ef413f32c5aee48d71429b64da1502cc15bf075781178084724f59bb8dea6cc6d6c01626a0a8f383fdfaec67f6a3f0000021c000000b02aa0f1e2fd4f68edf4b95fa0d068d06fdca5f70fa42520b7085ad3ba58876cc5e0944849fb175d764f6fff08005ebdd9dfb2ee60a88c9e89de20d5472bd4e8cf000d1719ca5ad0e4645eb19f5e2e4bc3b2b62c417c5d2f2f1dcc28dc3b1f351305888b57e69d8cb4c4a83214136a7a180f91b5938a9b0e13ceb8e4ee2349ec8b907a9b83091140e835ebbd10bb7a0a171e4b73bfa6a3eb5b5efeb096bc4c0383f2dc3130fb9498e99c79f77f7359b64c000000b003cc88f0da61273dbd7242f21dbfdb54690b8b7c659dd3d8079e804bc2f43e25d2cc928917bc8f94d27206c002678424ac1b84181e81b02776ea2f859d087ae049aeddae848311781df981a4a3433b11983788dc2f1aa585386741939e8e8042c8e1dcda7e5cf459a87ab4831e5148ef2af66f23029b2d69779eb0ad35ff914ed1cfe3a861e198d1eee547eac6e99daa2046573c681a1fa29b3a3f41ccbc102c5861b507bbd2caa203d4929849128df2000000b01c68d36e5cf3f902614fb0b121ecb10082e8f1dc3f1276f8ee0c9893a41ae203e54c9e346c62943e371e975d6df1502c811c812a96b395738526a391f2e313b8c8d56ef6b66ad663ccad684ece91c2f35339a8bab06dfecb430cbfdfd298382d5a1c61c9d7f06a6ec753783a304f72ae0bb462bbb93764d5f203e7d93e8f33803651164dfe3692f69faf03976e2c9ac103ae845f41a49079465c79c48bbb86fa4a34e8a3541933c22f6edeb2814d31770000021c000000b00e6fced82f8ee7992c83ad30f647aca340a48b9d451a5582f2097eda8adc8449d548a635a81ed3161c39a947bdd1a8cfe87309457be5378e4eea667f7ccad139820b4dd04f9b4aad9c504f7616c3da49c41d2cd93153a416f8d991cd9242566f4fcc190d363a812ce0a9a0dc033f22fc1650c90786bb579795957ef69a1d7887b5c04a0fcd5a2e9f2c7003f94656d5dc13ad9891206f48a941fba5aad1c37aed6686f4b711dc86708cc351a836a54a77000000b000f888ee79ce01d4fda2e83d1b3af3262cd146e5cd7daffd8e0e1eb172d5333ed54d3905659efe44f113ebce9813e3fd390aaa1714eda14d6ee9f84fe2090d71e8bfe4d7ba04169013613dd473aa895a51db6be8bfea959e367b21192c307f18557f02030d33a398a7ddd983aa98ebd62ac0e9ac9ddf5d8b738f958ecaadee1ae28fa8928b809d98b972e1c2e8235aa10e9574153a328e59b8e9a89d4161d47da551d83447573d2b9a2ce1164744c651000000b00f093c45aa424186d3c06f5b9588c1d916e4650bfd71e67a557630c0d64e6202300d8966b6a7a121c69876c09a32746277fc7345b627352446de8d6bad366e45829aa749fbfcae203fdf3772658a04679123d3886d2e61a87fac646a8053c59b2ec75d115e7dd32093ee47e467a1fdf5066fe007a5c9b03484c53958c0fa87ed4a174ef1ce0990cd368a6c6b9a72b771073bc5092c8be169452e9fe454e7ee7b3be310dd6f83926299ead0fac4dbb1400000021c000000b02b10e168ef98c93fea1c8a5bdd82100c08bc7de4ecaabadf0f3da6e8cc6a8f643573544fdd3ad9cece0707e1a364453ef6ef0fa5da539b47927bd4652c03b03fa750cf9ab7d10fdfbfabbe5fe9745288dee4620290b0248401ab7b383f6e218e650e5431d7a66ca601ff57ce7e5cc35f0da5eeba849497ea3a2ff814629b65661498c05b3233f2290368bf3f6d988b9a0cf4707a83d21f57c2187b2c7aaeefd775430c2ccf680e55f963401877ac4922000000b01fd699509ef4c41d19765e5d0215df1de62745265a1d9e1ff49ee4c1ae8afc43da19530020e159aa277212b66f6e79541c853d74586df22b80f8d1d08fed8bdc2cedd081786926686a620dcf249f09cc81bf3965a0def2e7833c475ba23a1edce325c15a6e1ae85689e93c50510a18f31927c5528ce6e0d4f1f56c6274869caef378c0c75615841200a0e6f54a7deccc0211c02b197178e7bb50d19f19c41c9b0c473d46be326505923003978ad334a0000000b01b0ab0a7187b2fa3c616ce04cfcd9034aeebcb71a9c664baf679166240952bf3068ce1e523d48ebb34219b2d3e6c1bf49992fb027809570f883ed562ddab5a7524b118db714510f7c94a1ba361b1b35bae5e9c75195d883185da3339fd133390b4a2ce917d0bfec800be68396f904b4c25f8f21f39ac043bbcd9913626879d46f9ec4a2ae0a6d9c1beef149005a7a1782c2dbe04b713e1160cc59606f7a2fb44b84b57851b59b4e973f2501c1e65d0900000021c000000b00fb61a07c968a73ab9dd7bca90e7b1504d4edd28aaca0658c4268718ca3c26a2ffb9c70a49c7b6844d47dce80246cfa480851a4c07dfcfe42062cbc46493dab5fa06aa85afaf8e5d4b90ce2b9b4dcb05dd80b2c207befb067fa9c31241897d1bc52aba64034200e5a0b5b5b09e07670b2a4660dbcc40d954ccbe16703f868dc5bbf80905e4804b015db9048aa9c4890012c5a39e2439b5ed3f518517193ba3f97f5698e4fb4fb988eb19ae122f9b2493000000b02351f4a26cf29d1c8dd03c70d98279f1cb0da27bdf17069307ca797ea057313afdabe2af76ad7c3c22fcc3ff932e63be29ca771836517c2e9a27e9a4841df11165f0535294f35bc5e8ae1b90236c4ad5c676306e31ab751043d3d6cb4c646c9739a7c142e8197a840dc77e42f9eea2230eea1bc00343bf9d4475f8bb68a6e9c1ae99a935d97e6c9db24a6692d909be1a11981a0d252f5c6f4d4a1e663a12811a5b3ab613ba6b3a7cffcfb1a2f6aed03d000000b01af70b0cd480b355656fb77756020148b6f7d55b8b19b842253467ecefa98ccd8699c69916688002a7990f3c4e473563c6ac9cc8bb61cdc6fdef7b8a93d56b31d4da866aa8b377ac3ce483620c1d458784a1d9622f4bdcc4c690596f0cc866d66c63ebc4c52bca9c553628cfa0f9d2df2d01bc243405773fe443c716376a9ce2959fb4603c55c2739a751f5d3efe5ec6215092edcd13b4009f7c5af7a1d3e03f1a68f0454bc396f28b38d6d84cf29de40000021c000000b02b163d735ec236543998d9474caa706fe1b0042b46e4cc5353399d40d4d30f07fb66297a71b9cf1b3baa1b90bb8721e03c2db26f608754cee24769c864ee02246285ea896639546396d4a745ddbf1de7a7e376f9e3e7298eff823c51b5184ff11584219ead441328088c2a0ec618b4232871565ee6b842979b45aeea7b1509e68e685c7d20a79b9abed89d1cbe26dfaa1ea038c2fa2905f5046fe7a209d50dd4173b5a7b5db9cb8ad437bf38541d89c8000000b01d0c0ffcd5b00be3ecb12fb048d4f883ceb8c50616583503a2e337a63100f11f73682eacd16716ffa106bb86d5e213b2918f7a419798c9b24f0f9f781ae6772d36d53711446985f77a27dab840515ec0b6212169b68b00b72d849d821b1d7ac11e606f28800a443954298ce750408c2024bb9c3bd1273a3ff0a77f636b551a0969476fead710d56bed356f59e3d4df4909f05dbbb28a995ce35276dc9f5afc5cc2d8e37998fe87eb3e91f7190721c22b000000b02afa426bd8e9101af41eed38bae0a85229be42ee8df899e7f3cbc07fd92d5bf94dde99f6dea56e5dc8a1826f120e16e44badcee18194ff0a7d4c74e51c1e075d5d8a94bff1820d00f6a645a2f0251f24bbbe764379451cabd25df7ad9a220c1de42718fa47b7af5ea4ff34027055cd070f263f74b5e9bd5e1fa07bd3d6cb00b24292b350e8f7692ab8bc70b7d9eeebf805b3d5892e1a11cb3b75295a447346ee97cbc4d8ea18d01a0bf4bc7d4b88a90600000e91000001d3000000b013a42923f5b03d3ede2b2fd2510bcba6ac256d21a7334d63a5ae9d9ec85367f28f8ecf0b00000088befec593f5a3c9e715bb9651cab46fd76a7b4c510a2a1e7041e7f3207b48a6efc38e753688b29348b9741bc34dc3a2c3b843cb4c9aaa9791151990f097bb4bfcfe8b25081259f94040fd1f334f8a4dcb772cf6ffd183d1b73fa3654c485774164b40e633ce88a53ebeeb24520bff790ff22295ac8f7b04911139c0c300f2d9082a553397129c04050000011b25e64a494ff9f9b3c735160565feb34c2b1e0516a05cfb07d290fa5afebd12388ed19d42000000f3dad49af3d60c5df20186090c582de8b40bcbd8836638accd1f0bdd42075dfe00931d6da54b2024f8a95f534c27bd8387daa2331bce2309b9070a0867fedce763957bb20a0e312bbc2991ee7645041e30b9e9b20778b5bf4c1afff4882d214f146b8e56f41acb18125ede8e1245ee32ca2724fd48714e5d487f1fa68da328f7504872e3dcd504ae15abb027d6da31d266a75e4c3fc22567b0f39edeb04bf9fcd02803e190b694f35bb3769e97e76e964eea85fff90da99d511c755a1d61cedc2f6e2bf170b4a652f87619daad6f6fe4cecfbc36d4fac222a3fa0fcaa7ab63951cf67afb9db8f659bb6f16a60a118c6d72d211300000009c0000003a1f6195a09471343198b23d748383316da63e00d27e4effcc00e9a83fd1f2ca461b880d9e00000012a447a201a852f05be7211028cd24f3483df70000005a230d26c308ea38272218752855b0f15b165c1cc43c9564060c099466a21345ee9268d7e000000032467f0a48843735afc54e569cd2aea9172905fd0b2aedb9e6ee3445799a0bec5452db346211afbb742de696e7e79ac2f5aeba000001c6000000c816fbdc3297a99ae6b1db1a03ee51af8d8cb20d675f190485e7b310174a149521ba851dfd000000a09c7e6183ba63e024e6d14f83efb6b26dcee834b83d21f21074d6c9d495417d3788cf9bea259f3f0c3067cc7708bc68abe58435b32d2e72ba67b107bc389c65105b604282cdeeb720a632fd30e2c6cf78d2b1664d84288aab4580054b7d2e3ad11ff082b67701e8d458b66da10006f5c9b7b7e258b36ee2fefafcb5b1caea706b2b24e7266b779a2ee8d475874d742220c4089bea742a0601fb9d9ea541a5136e000000f622e7942f7513801020f84585c9d76b890f01b72f9d51821731d01b024eb39714ca54d2b9000000cef2a4a7fd5f5e062cc5407c27a3937ba2f534681ff399b8f6246de9d6163e3f9481ddddb09035ac4e9f3ba5a820ba3b9e3afdb130b7a49da329c1101e5536e6bfe9d89cac52f6e96737d38262ea5b61a263d582b3852914e64ca731a3656a98941843ddc0487ec723ada9c87b9582e34eab9851349b95f011784ddc61f1ddae0252f8642f7eb44c8a82f0caef56a7d54bfa3221cc9518d67550a844da240cf2686f3bd159b83c0d5a8ff46501b86f103dca7a81d71c75970e6dfd12fb800ca1f2868eb13d63718d4d53491fdef15d000001830000012417fb3c79a590567e0f0d634f1927282ab7fa052bdb699e4f1e2470a5cbba70621d681d44000000fcf3f6088d01382f03e100756b18f23902cf3df58f43009558bb42fcedd429d0d3706680f9a08278385efd5c9a9781ee22423deeee5c6a3fc83cacd3f7961205855e3a0b6bd1307519f20ce7996af086acf1046fec667bdee3a2102cf90bed3d1cd066f3df1b75b26ca6c5b96a346eab80099860535826aee5b0a2363473658fd478dd17ebf143063102480089e6dffe059990d822d6c12ac858b58dcd1e1bb0d8c47f93c1313bf99129263246cb6794aec95afdec7f95e10b1009c52cf71ad12be436c584df1d0823f6c9f4942b0ea69e6bc120eacf9a256cf6bc72ccbc58a5b00976ca2d544b3789c2ee97f50990d5ebdf600b13045017b112cb969b000000571d7258a70c3b346e4d801b03d5cbedf75a02cc73c183c765363f9173440bfd1b3d6debcc0000002f9d59915a834468f453abcec3fa7434c6f558619920542e65a56ecf584c433b967b7a2041207af80f63e6ef977aea77000000f900000082245d10104259594383fab7c3af8bc14b0a7237712579d6a1c0ae634aefe63185889041930000005abc1a0ae2555535fc871343ccb992c97227de4647adef85aa61ec1d4dad0c8bc794bf9ff66c7eddd829ad1bd14859bacc90e4a70f16dff95fe0ab4b4d333834633e040405d0d17836a80034bde42717944cccd32244b10fa44f1b0000006f1cddb454ccdeb8b43e9e34020a20bdb4b45b68a9ce0b2550f66332ff2c581e837da6b1b500000047cc8488d3c323dd0086b9fa0dadb7218989dd430c68ea47c145bc0a79f2bdbac8fd6ffb9494b3ddf1a11bfc73940c93cc3e60ad702758097308228e3799375d5ef9f650d31a74f1000001160000005a2f29cdcfac0380774e7e187a8f94977c3e325f42a03acf7f3967395a2afd8ff6233ad431000000323c8836a04313f74cb629b3d54c73f5da57ab4922facd0692d734c21b5e6a481c2fa192c45f92cf594eecbc2771f9cd4be510000000b420f21243ca51873a32d0e0226aeb03fc4ce2d170ae81ff95ea4c66f617e897fcd3017ca70000008ce87cef36a8c6711aabb16c17ef90e176c9eae684f4b8541c1ce12c345ab5b11c986f9a1c535da67f5c5d44dd51ce14d788958ae75fc9c10b0c07e71c6554196aea7bd7e9ca7a28e39febfd90aa967dae8f58ba7fef8722f2363800271a6188718180b88403857c67c15561c298146c6a849fe1850ee63c74157a3605ac515d7bd65bad911236e0f4357a30ba000000e80000003c212f3623cc8cdc74dccfd3f6dfaa1ecc05c2e53648146ead3d744480c9dd040f00050ea2000000147569a0974428f2882959eebab9409ed0bb66438f000000a423a3685c0a3f63acff002700b41285495664c5a5b9cc4a52d48aaf79949fb022d0c3adde0000007cf0a6c74eb735a06ca74f406449b33ca072c30a7d9098ce4635453971559b470d50ebb7fd88d55bdd3657cb12392a2ad40b40836d31b6a048ce725b37d1943a68c58f2cdc385c6cb3f3c4d583763949082fd948e3e6f301a743cea76cc8f58583a57bb8d21ac679395101b6c64146ea06fed81744f8e5cc61720d878b000001440000007a1fe214dac2ca2d148fd63702c5a5934b234ead0fd67dc7d4a338e717131f86b0ff1d0a7000000052b8bd812dc1446ef298121153db53c3583473bb0696c84ae6b1ad6a9451e2ca20dd0e0efb8cc855c174786b9c6c8d97ba6de8c9952b76c150fa51ae55a627f29b61df4265181580681395924ef0e308cc0ecb000000c2155809b85c0a0123154af087ac094898f1a321db717523db34012822c91a666e2329e6ac0000009a1c944e7af5fb6560a5a551e1982456408806d99fe052b12bb177cffb17dd958b84891cde3577f2b570d8686b0684c9ec23609bd871c7c0bf24b17e739be1328a19d92334320f8244ec86444d10b5ab6bbc60db29ebdb67f620721962bd018fccba0f723d86853bd6f16a22eedae6f238c4686b232c629908dbaeac5bdd1f0fc0caf4037f98e0ff1d39a67a2abad0e33238067fe3ea16c79204200000015a000000d811b05ee9a1070ed352e02f5f5271a59377ef551be432409839c1ed17b9c64decff32c766000000b0450d2ba78ec6f2b72d426dc24a4fa91dbc52aceb9995ceed6d9d7c59d92238e7d9ca68405e206b740aa5c7d04a7ef13439c11ede22d16c2aa7af4df6245e969eb463e7fb6474a09067f3014647258ca5d6a95cb887e2fa6062b6791dbca74b63e3c40ff290f14b028be7449a25435b12fea5c6aa1351e406d32b9e417c9fac568e2868112190163e16900f8b38883a1b0b28b2c023d46dd8759e4a063d82954c9419fdad6f4649aa69b8422ef096d5b10000007a13018d350406e32d12023bde818416c1ba1d837e22df68e6cc4dda833b872521d7292b5c00000052b94f0c41b5ea84e799623440374f8a5d447ee6d2b7c3055fc32a5f75562ea4e9d1127581b551eae06c6accaa99cdf5d280217fad02d2cdec4842ee2e51790406d3cb82bbbca57781cd57259d8d87f78693e9000001600000006a142a679ab6e1bc1bfa39e11523e7c55498f1b20791ad60456253870357dd86c444531d74000000426ba9b970504f6df1ff25ff894542cd8a764b01d6174f849e2f0f44d8c020b0ed0d75fcf8f59a88bc3bbc9c63832a37eb2b44a2e6d19a28b811b81a6516792e58b341000000ee1ea2fd1d20c6664d10bc28cab6b2ccc9649733ab8e159fc26ed67ce6f1ebbaeec0ca086d000000c6a91b3b3708fea3f43a74aa4f330e2612af26ff587998ea92b55a6db0911c98c0aeede0f5808d5c8dd9fe4f1b40813a2c811b2d85d06e59962c3b852b387b95e73329e791e02ac6ff35cd89e0534053880e52b1fce1f4b9e43f2299278211b2d0996d953c2ee6ac388a874b095b9b7afbb34cf5ed29dfa0ddb3ecb94cfa879d159eaa538488a0a0eeb1a2109eb0473d0379d102d0163eced465899199116588d75203e375940e42705cba51b3a5d7ca039114f9e20aa85b1dcda0df8da5f3edc179b2a035d1e6000001b8000000e426237a4f60473d3ff7ccc6a6cb5f1d794ac968c30ea8ecb26419a0db2bc3cae2f1e2af24000000bcb062fdbdc63bec9e9328402d76e8e26b27bd0b885ee44af51e2090dc3ef36f360af1e7adacf7e964b6262bcf327bfcdcb7ddefcda009bc6093844002551a33a47fa21924d7f348cc5966bd3eabb900b1c216f61380a26a5f249731131a7d479a72b18eda2cfe10d2f4f4dca587608f473c218d20f344749046c96433b1a175af4b07a87d069ce4638eecb069cc13ad52c5083aacdeb2de1f40b75b1a207962c0a5080564a640b063ae2138f8a94f84300e694ff3ddfc30ea29da22eb000000cc123b0ec16fa2c2fe7534f44a7c1f1f6c5b78f7a98bdb1809e5369ef5a3830368359a5c30000000a4541fcfb226e5ef28532ea338155975a7e36fbe38795fdec2998fd58a215319fa4cc77dd97b5dfa9d84c18804c0ece9cee0e4069edc29df32678681d36cea25593ec8879f46330bc71467f4f8c017c1b013a40bf92255dd65d18a08ca91b656cd8336d335e91bbe2934cfb843616e6f029cd2311165ad2522395f127a09dbfdc88028de578af77d2df9134a3edc31c6c3cf9f1c985c810224b9b8d85b25ad76bd42316ca5003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b011a2570e1e3701f4d2fe25ae5dc1c68c960df9114392e97487d3cd12dd9b5d317f8baa024fb9b9fa92b2291538a539d311e2585fb32278edcf24d900c7789269a09549a2b5ea3527c3edd26d632894512d8503c778dc6a490c288d0ced6d8efd6f44f1473c786a373f470906cf87673807d796af040f695add3afd32e9207859b9d49e803e4149e6c2948eae1b5a50972eebc13a7c0a687e5749a9cca918a1615e68915bdd5858fe89cd05b0d49b726b000000b018de35857e0f419d1a3ead4b465117ba3c890c59c1ed9191c9c3291003f56697bb1d96f953684f32e52e429ed7e1afcd7abf9aa818ae1c2d692fb202b859706f14b3dba6c60108ba78d0d70027faae12575e948cc8760e0a9049e60bf99205dfb4413f1dc90d93be810962074d1e61f52d11cf11a1b63c3c58a43900d0a71c2678211f4e69a764a981b21f804a77b2df02f13500e13c72045d0f43feccf6a159222b7837f9bdfb722340169601814205000000b00e198c9cff8f270d1d60932deca0e07926026cd0b04c0903487b295bf7809df255b48ca5650727265293d1e0765f692e64aa52d28a17cdc8ced83fbebb96cfb477869f99dfec107b25e75b3c95608ac843f28c8e075f43b49fdeebb80b1981cb2d1f631399987e6562a8817591314a8c085f6bedcf2f2896b6bb03ed9a97e58a85c7eb4a1c444ac455c8b391990fec08267c4ba97af12c7e966cc7f9b975a9bff138fcb75ff26f0e1059198b6af305f80000021c000000b0023951f9f22b58e56d3f93898fd27b2c841b8f1b057c2d79bb465ccb17aaf405ab960e09a74c49627cb5616fd3eb72799f318591515a8f89c96e2b217d48fab693cb7b2f398e424d04afb1218e73632039113a5b40947ebb6a099ef5af7fb8759150de1ca2c1e97af9ddb7c269a546e123ae06f4b4f7febcf17da94ccc54f56c596aa67df2482a744a3138450b33c0931bccf55b2590d689b7522c9ba0f166f4471e4d047966983861a54801f1137b6b000000b00efdf77bc3d3a494eaad31b66218f73698d242e16082f30bb8d18d5bc25bf2847991824de3fc4640a1c1b49a2b67b7308446dde2110bec701662e096780ee0bed90d5c798b573c3a98f120413f68b35d25041ff9e454aa137de31e67ea1f290e073ee8f6441478f89cf80cac66a310941db9f2c7d6a531cdbd2a772e0b7faba6de775aada1149c48c7d8c49dc0bfd3351b6646d3f3b2ca6d769c149fce2595cf2af9188cf4108141c096cd57badace19000000b026050c122d1e4ae2bc25b049dfc65038d7456aa4de1f37ee0f00834b503ecc959fbb0f84e8dcbe88355c055aec73719ed67b244f8bd91dd41c754ab3107e647c0a711d05b34d6376f66e8ea61a7036d44fa56c5a84c803d47c921ecfb126cf3e5bd79459bafa51ddc5eecfadd1b6a160284ec0f2badfd197059e33cd2779e5d8ea5e545c9bc9c70ac6f167b2cc12ba2519222b34dd5009ba90f9a62db3d28fe0a20b29a455e80f0803362ea93e374a010000021c000000b023f9b29b67de5928b813626dd3839543d23bfd90fc546c1b2b94c47cac98e7a91f670d0e3b0f38228e30d147c0f4f33a7d70a7814adf43df4b511dce47d7cbd6ad892ea9e34720a7aa1e972ad8809255fa8640fc1b3865397f44bd1d21165ea8e0e87b266693e4e5dacdf55a92b5c1451637cb08f6e763b742547902112dd3e1835c7e48981fd47c0a0c26fec1f08f9115877a0f42066212aeb9ea1734056dad89c73f4af1ee4eb4a19745f4b614ccd3000000b004466a6318698635afd6e60c19b8148091f34082022b366dc642707e0ad8df4a99ebf72b82f7dbdec1cc2382132ec761feda380d9ab3e3de2cc078ec966716b506fdbc981b6de8bcf73b67d5617cc282d7f8d51c9b85cfaeb715b72c42040292526d904ef1ac8ef654a75fb07524052e1202a30ba2f297885fc7612c75d474b3afbb82499d2f3b5de80eec8daa8ba3222f5751ba5a0e413089392aa0614c9e501aafc0a06473ecb5af8e13925be362f4000000b0064cd1c3b8e8b0d15e6265705ba11690f2480d89d298dbf93b6b2e045094c8c08305d48af50e34a4f6ec1a941fdd6ca1b666151965618a8776361f56bf7d08ca1d87b49a5da3edb8c80c6e4320e470a8e0a8815a7ab1784f44bee758363c02dc9e572a21ecd1b9ae8458ceb377007d711908105dbf2d659d83b1b6327447b81907ece0707484ee0ecead9927b00cc8330d9f03b283932c94c105a2db5d3a9445cfc55a9035c1e1a8ae8d0237f642c89c0000021c000000b0044c5b764cbba19ea45e17804cef8516b4a2d1dfb659782c5f734f9947334e7f25309cf99656aa2d36c787bec6e406df1b5be655ef6de066e5b23789eda4f9471b8443f0177bf42ba3743ce8db190a1c585ade1016cd0c8d59c028f9823cfbbff664ece3a6af269adb4343f566e93269044efc214928cb5e25c7135a12cbb541a3d824d857dced82d76c76ec1b7a63ce27ee659a45e94d8cef8700e31ca29631b85b77e7b3da94540c6d9adcdb52aa9d000000b01954e5333fa8e85b0ca6766884b963e085c131545839261f67444737bbed9cabe16bde89f434a283ddec0840a6329c9a951a816909faabd6828cad28e75aecd67c3d29c1b27f9e04b86acfaf1c2cfa49de62262ab0ce6ac7d2b721232328afc560563e690847ecf0ca18ec08c4949be41b96001bc5266e9cba85aaf3c5045e7b13f42a1c454f541e03ad944c1adb79aa242573f592a21533926e11a4b6fce488bf346a4fd8e24ffbc626a58bf86ac63c000000b02de8cad17ca0fb0865788ad8ae66c5d7a4c8310bedbf0a219c60194de9e6bf7eacdf8ac5e50a3e86bdb56d6e0a12a850c12ced7a19665fe2e18af942e2bb00e7af5e7e120a8b574c5cdd26fc7c223d598b9be0b451fe8ea74eda49b43037cd98a3705720bbebd6dd64deca163fdf3c852a16e001fc431e3bbc780a0e1d42f5889e21a9c76c6e232b3f397b04e7c995212ac37d68bb19ef173c50e018f1379b9e9eb23d4217026d5a19b554fa9c1171200000021c000000b0056a2f6ab7f1d6514711d671148c93560d6855c8200aa6cd353e9a0ebe8c4eb3e60751fd95c3a1bef9d436514ce044fbe30b38b46d74a0312b213a37594e09e729bb1b06a482549e216a8628a0c6248204e1f6a3ab2be8ec73bd8d62dbcea62083cbe118638383649cc0cd2d3e855a2a144a08b28fc26e3815d20056b8103a9cbd735f4a8a8976b4e3d7a7e224bd0f9610ec99b3e5be1866db64251fe4ae07531eddee641f1000dac9e91188a33587c6000000b012862a105817d5e8b9fd001b077963e9c3b95ac916b83c8a958929419157854ae5da4e4704e0a6e6ac6fe1aced358e45cce4fb5b772a2642d35f53625262ee01e89f11b2747bd70c0d100975500b7e7e3a26443f92c4b86c721bf34b291c5c1b326c678505b79961de4f7ec18c6b85e304b55556ad9def7631c9f07208167768daed15a13ae6b104c0a2faea79cdeb530c758413a58913b9aae60143d15c41063b7715abf23a665a8a56f37fb2eedc3f000000b00eeaecc6d1af12987072bfe3e8e52ae0e2d267c0bcbc6b762040fa89b6478f5dd75ec9667456b67b0bf556553902bdbfbca5c1907b110749ff75e583e1f00d982c4ccf1c70425a9ee17ed6bb20d0d1cd54cd07de20afb93c4d51e25a97245207a45faf08dcba75b355be397ae585b434149b48647c01674ca4abbd38cea11a713294c0a1c5d4644aa4cdba9f4bbdfaac15a631b3eaee9d167f9942103f25995c5ef6b11f6736a45feb622c609ba63f9e0000021c000000b00374e0b29c5a094f20e996209ea9456f39b12ff8b33cad3e0852cdbba022fb322b9a2d11040317d6c023cb916a8b188f05830bcd96e91a2dc73cee40c59bb623e3e4e3fa8f7977b2c871a9d405dd971ba88165efbd303e6c364809c47fffd36b4e40086cc8e76f71b0b9d7adaf202d32278e56a4168d02c0f37a3c7fc162a2eb8d79bdedb13e14d354e867a4410c0f8428055c43968838e88b32ad473804a957670386c4f2f4035fbe543e769e076b69000000b0244f157d4dc1329ba218137ef130db59947934df118889b43a9d362af8df127b192cf334e284ea140d5b907ed06c79753e8c7bc03d856426fce45d412356b848a7f4e20cd1aaf7ba88f031e160d15df2febd3c237687e5b7b7815433054b2ebdf1ae3e5aa4e38ab5f0285423db43e02e17ed23af36c855f2762d57af35401c01c938418123f33c4a2c0ef44bcf3fa6572fb904c068064d525f1d24c1af7827e4ff3d06c511226e73c5bc4388201b6fde000000b00ec8308a45f792d709ee120656a561358391808271b959d2b4557c33f1540c02efb75d4710c393951e6b0979cde73eebf386973462317a9a62c299190001905208e622e246bc8b6ba4e49d3bcc3e138e75e49219da64eb1bbf40f83740f24e948190ec71d4ea08e3a37b21696a1f3e032bada960e85295b9495c6d69b6ad9af4ec5e91c66043c89a6e0f444f16c1aa760a40ef9172cd15ea91c4cd3fd9acdc21e757fd798d1ef7e3d27d74080ee671220000021c000000b0230b530550f1d85b92ceb8f9700b038bab1290c6741d947415e8ec4e72dfcaf311e8fa6e3a1dc862a1e3eba0ce9365787ad9b807aef4a47070515483905534e427f49d9606c4454765380d444e56b09fea20d73d94de65619243bcd8a1e728b85544206585175aeb6576f4c7841e7ba609faf94e848061d66b0d3cbcce1fb8c27c36181f058d679ffb126f7032688613070c0faf9d38ade608833ce9d3908118dda6ff4e86e481d2c82129401c394687000000b023f5f0f768dcde7362da46307c7448d004cc5b0124c89fc627d06c8a069d03d3c78ec4159e407cac7e3be5802fa9b89f364b34ae0f6462b6ce2208183e74bc87d7a231288b052cd7c6211472b2d33fc85bca30e2c93f04a6f32d8f557d1f2e08a5b0a59c0909a441f04f5406a8ec8f96239530ca1f8d3c1884d42e2c7db77749b6d4497ac442a6175b81add20931facb29ef3c395053f8e39d260889b9ca57ae3eb41625351e73d06913a073394f9057000000b022b0b5076b20b24e11836a76a522d572ff638153b8422200e80797b8b73f365ac9d322f4a1e4fc7a08686acba10db6263c1c740547619a058ed93319c7f4db22f1863163868b82fdbc7f16f004e5348969507f9aebf68517dc1ceb63913b8f5408241440a3b686bae9abc909d09af19f1f6eeef10a73228f2437017979ec656248a7f31bbb54ef4a6e1874b9fc2ff7b003b643cf1d78e137baa5b826f9945b3ae9b7b181ad5b15ccb78541ebc245204f0000021c000000b0058df20aa9e2d419be4c85e2ff12f0ad9504f6d184b068b4a958ef6e1a106f7db13beb3d3fff4800fd5124d7e7914a3caf644f97b85b2aa41ef24cbc80456ac8e40f4fe582cbe47c0aefc80dfe08ca72841f92b2b140bb30a8fcb91a97c5528e793bd8f9a54918d17851cc29142cc70829ea267731f1f49378750d6b27419b75112fc81008cb9f2147803f059c449efd14b4f168cc483f5dc459e56ec8118bf13a7b05acdac8d1634038488577a0f702000000b02409b121810cef898432ac406937a7bc31d5d66cb134ed00e5e27bf2848702b8eeacb29474b730fa54db88ee7f3ae2276148e70693cb1a026c74f0387b8956351a70118bde8ca189516cf15eb2cc337f46991f134404687672f95c449a345fbea43f947d6c5d18e4694f8104caf7b1ae1098d518de03f9471e5c1e6b47e77435dcd541b4d3fa0b8e6bc617bbe46166a8130df798d6620fd55fe36bc138f276271d3a811751de32895cfa9cfd2219ca05000000b0185256a98a495fa1fe843337693442ea036927e8f61b33397ac732722b91b959cd1cfac9e5991972f907eed2005d693b9ffc0d78662c58ef2bd32aff1407a7a87503e69457754da59b91d3f98ff8699c25f585647e19b98397ba2f0bb08824d9657d6fc4b11d64fc82ca38943538fd712361d1b32af9628073572d37a6e7620b89de9bb26c1f3fdf805f312b03f6815d111a3ce84520cfe46b799ce9002b60ae51967e218f21f87ff57e170a5bb6bb700000103b000001cd0000010c17d9a481b492021682f9d98909e7826a8cc90130fe1dec54735faaa2e0edb5a12524890c000000e42c81f2011c27513d18041c5864011a88216a3f23f529aea49d93ff8b90614218e8eecc655dcb7de83a4dcb465805ee1f6c306a6435030087c1ed1a3f199678b0d2eabe48b9dab926046611d35be886a9b1a0fbe87c0b1088bcc4cef405c0c5b286d204d79200fe0a5ecad48ceccbc8a8d4f61fdadf826fe5ed11710294df686902811d6e9b26fab9d053595332793d950428923a2bf61ed6ba3c4519c47d5a5b42c4d7fef26c6c34fab0264a8dd21748319e47b207f02f2d2430723e32a16cf656e920929d71264f6a4ca594df091308cad375c62e188cd741bb2c83592f2ccffb40ffac000000b901716a4aa86886a1dac02f2f9ff903ef7191caa8c4d7018438ce0dc349f0e47893b7b38b00000091ac11630d5228ec825a616c0f869436d1935019421d104d8758fca35c2272d14cd77912733858c15eb73c93742f57eec908aa9242b9970856724e80edc22edd8d0466a746fe3c95a5b1f5b1076e8266a6e1dc42400c7603644d3d1b6d9ab1fd94744a5722da693b310687c24eea31c7e744f10be6ba56de2c21625c145d9dbc1d5558c022a6a8bfc093b69d389d3b660d74000001820000007d1e45d2f6a0adb570c46c5412de00213e2f81732f7e99b130d0f6bff4be1b479959054885000000550ff1549bcb6d4e77fcb6c743104c3b958a7518c0c436b0d9b4a2e8c79fe41168f945d5c3a6769775e537015e385f7771dbf43a6fcc6432ceb0b0a62cd30d82af8e1bdbd4224e69bc463870aea40b2dbb5bb483f251000000fd285f862161e85895d382d356c34840373495af46021f4afa250257b88eb649374353487a000000d5ba9ea72123a6c4817924c4e5f9a237892830508bd858d12f4584fc89fda717b82202eb18b619732adee8869026381f86ad752e6f64608c4372c754c9c05faa0811b90f453bf07cf05733d51ea5d530cd8ceff191d40ac290d1c6d88dfebd7bf43b034d453653528b84e827158985341090efa3d549882bc5040f225a9006a20e5716f70436f3d806bd3628b49a48b819d2884cd087dd9a5249be12033425270542aa445eed80d0c741640bd180865629beb4b25ebabf868f0f0ac95bd1456fbe178bc9a33b29db5622bc8f2f7faa666a112a9dcb3a00000146000000ff265a06d88459cdc9958206d0ab2fac4e7a46e0af7f05cab2743c6f12cec2b580856362c6000000d7f592eb6485998575fc3aa1d6e56abca597c09a0188a3425f75dfc24981bdf00e656e704d9f4acaf7792221606f72f721feec2eb29548e3603a99cfbb2bb8fc8b185139ef795c30994d0a299d094e4866a51b8dbf8eb6a26047c6d8ecda06c1e6acf4ff3cd76efc882ff17789919a19c8835e5d1161590b605260a361ac12c3c61fe4802dcfbbcbcdcf0856311c83c240bc2ce9aaf804e3003eba09232c762f7be153efc525f1b2249980bf2cf8fe5ed9cf6a663c2d1e69b174ef6a2b45fae12c1c60f29e6761cb69fb306653da78e4d045ffe0b18555800000003f0ebf8fe2ecc2fa1d8144e0c348121a3a63d2e776df0af769751782b964b8018e28f6fdfa00000017a439a84e099126beefb4ba799d8c47499fe450c014673b000001b3000000c12fbc5b2eb2286a6b8506f90fce96fb3f7aeba3897af7139b8e84ff2b41aeb8c686cf0362000000996911ce698afeb9b3590b863ffdf823e811c2920ecd69a5245c004f205b709fe98f42a7405bd38df252e7fbcb49dfe2db0b9d834ae5bd9aa53fade1149befc0f3e5d7975c4d33a46792b9e374212e76483cf0bcc093261ea9b802f5c5e041bf3028092ae8840a358d294e4126394639e3606b281187cbb745076354f2e579e37d725ea689273a7aac9f4507a2d6efe0f153aee1a683056c9f68000000ea16257c20c169a88630029cdb5e28301882ff5528c248117f82a160b09ce5ff96e0190713000000c2098e8180df0485ba0fa98a37704c3b2171b3e5a2b496f48f6fe117139694c21efacaa11223e3377c6349071ac1aa58dd438bbbbf123b790155e75cb925350a27604d2f1a67c18d05c18e154ff9cb2b528ca86c6b04a0be51b02099fd0ac04beabcfbf6ffe2d59d85cb02dbf1ca57837eb3b508dc8e49766bd93996d6a2c72b167e8d70ed0830fb86a9d9e33a1ae9fc19b7ebb3a2f584ab46db37bf44e00c70ca03f09e8b72e88bf239d31272872e33526c766886343dd53d302fd68f86566d89b01b00000190000000840279d64a70b0e4dd91fd0b11528966d388e11cccedbb302183f84ced6f9d3ae2bd5789d00000005c47c5d899c395459973645e2a74c0c05877719d0c8eb2cce957e1fc9d4bed8ecc8b86c98940133054f12d4b2b9a0d0eda463a1348d41511d40154becf315a6c87f737be505706be1636b493248f497cf9e1bffa902d5543573a9b4a350000010405e5b6e78a325ab2f2ac6261fcafe4bc47a73657384a117f377874853bb17da369147909000000dc672b2dab1c90c55911d058c819d65782724688d66307e099939073b53035481c08923754dd708c58090a41ca4c8635184f42263514f2edc33514f6cf5aca8d867fda0527d4b04762f38439cd23d084526eea66de5bf211e1830516b0461ad5e13304e5a17f5d2ade69fe1cf0a8972580621116c45bb56b50ee08aab66f8c0dbd84972c5ab39eeb0bbe3a4f54570ceff80f6d408d9acc0309f9e72f1476a45fb037b9475028cd7d0ec0c4b175f7b98ec7d56b32da11659696cab790329456d8ab27b9aec5ae031ce55700b174e8ed8bb9825c6a258d3d5ad3dcc597340000016e0000008f2f9b5a95e4aa90dab337a7041e29315a20745401612a4951309d1c5b35b76d17663ffd680000006746fce5b0c7f25e5b2969e2f373a45213a78bd63faf3cfb2ca8e2ac5a8b2b08a1ce2405d55919064e3a461fcd56bc01397c48c2fb81569a5336937fefb86e6aa09bfac91cad125594c353451b0219636c01b537714e1b5063696140bffdf5ad6e9786571c1b528c000000d7297ca6a760ce883db88931cba904becc703df116609368fc108573b5c50e4084384ee123000000afed263a4ec6335c5e8b6485ae57618e596fb1e4ff8c7f7c0b81de68c38912aa977a28a8608f71ad9a295c988076b68a8b9fc4888776df2dc88f5798f6cb944a1d5a9221fecedd873dde22a8f23fefbc2b6dd506a973bb3dc55e606d0260ffe40af5a61ec35dd5a9ab6490bdcad5b7680d82cc17a72599ff8d125a507ffcf302d2f44cdb8050e101a45af025c9564c6d55ad11461325f988d7f83e79faf7ea7031d0252c7181ccd15f6ba1665c4034b20000013e000000c4233585eb29fc8ecc2bf2954e2df639c320dea2a3e8e4abe7fbdb5cc7690eb21bc645343d0000009c906f15e6688470cf500f310904cbc9e4448ac2a1ae3852120439b0c11644de7acb7298836971ce8a77a721a2dacfd7fec0baa687e41f5d801aa03f1f80d562307fb4558e7ff0b837d64a98f98ec2f1e9cf93e7f67cd7a1e7eab7f2be671753c8c875597d0bd3df3258e7d2a114e92f176434b347d1cfba2f0747d88dd1b5c6508d369be5a4ef8242b0c02acc8aea8d36b0596cfcb4940bb3c5d7d4bd00000072059027929fd19a74c76e8b764417a6eaf7eb5d9a31cf433312470f02f892fec7e9f60a850000004aa9465dcad8dc5c930f65b92d70b97d23ed2a1698d4a5a3678d7070309e7580b6ae3abc5012e30cb281cef6a7712447d76f033f275038622381162b57f7c74997535c58382e71fdaf42a400000160000000c407e91711eba9202a469d942d2f1a0f1da43bb24e84764653a86093e182ff9610262f6a680000009cbb8d8480309106c8036b7f9ce3f905c23abb27ebcd12d2bc385e88ed2d7cdf2743be27ccf704bd9117631495b1b5d3025e8ea5965ba7941ba7cf17f7c843c74a0d9bfb48ea24270b086d819b92892bc35f3d09b348d4f4c4a840cc28dc4754b77d0ac994dad08a1622933cff2ad1e284d3c1e772c4bd53d695d46a3452329ad5503caa0c49e5703d7fdf912662473bd68ad1200c6ac159146cd3a1ac000000940df47f949b62700daeb58ee3fbdcea64237f6f224ad3f7e83abc20c882a8e6a2b73657e20000006c6ac28d18e6a96965c0d40ffe144b26b8207ee6455dbd5cd6f407cf1aff93e81e2dcf48021d3d2fcab8352f2dbf1609ade831415799870f4b1015c50a58c2fbb4ee328075d4f910da1287e592f95108cd684803a10587b00081f8c97c539eb39c46b9e49b191c0e7102f48385000000b0000000591e2476533b145be9f400bd97c81531cfc263082216506c0e5d4c18bb8e35f4266d3fcb7800000031c44e13a8ed5922c5500fe47d2ad6720018730323452081549a1fb3ec2e45597b0d83a4d4f46f91a4ced9de978c3a2c29d20000004f26c9d0fd67af05560687f3113bbfafd67d4be53473d0b64831d2ce353fa6a2b00f2accd80000002758350e3adf1a0a15a6a1c7b62698eae6b636e02987acc08af467a9c891fa7bb99cff518e193c0e00000184000001162c86d74fb28c359e14f251f0bb40b7c54a9cdc91b5bb2b9008f51006db2dbc520f08a357000000ee5d79f027992874af26d77ea27ccfd07e57d5f3f2be2a5a854d46f8ca5df3e2c3946cf0a20be758291390f9e344b88f8a7b240e908ab8378a456cf88810842e8805e5f36ee3f3a4d2427441592087028df60e56622444b3647502aa2365f31799adc04fe4ac3fb8f43e9f1d19a11d48099bbbfec3182fe89003a77f5cbd0f81430e7a2391f15a7386165378276c0508871eb36ae1c7906294d768d2d219083a7754b834db15c94068f68306475eb4ee6496020b6fe9d4ce71b5eec9db79604c96715eec6c398916b24f838688c72d676c22e5e3780344a13ab3c16847ceaf2854839c68b3144aff1f2f091a1706af000000661534b88f40444980093558fc4cac4bed3d7fbc9598af09ba8255fee19dba106efb9f2cfa0000003eee6be4532e31efd0dd422c8cd93b560fee35377712c92866f775a0cb795daadb4180f661b1fdd0a81ad3798a62be6e1e65981e3ea84432aefc6e8d6a3cdd000001f7000001270b56989daf809628f3a34ec1f6fbcc5d1ea50c533b536362ce24795935b2f5ca4a1480c2000000ff4fc39dec48e20d765f642efa0c45bd86b11c66c352866203c489b235675039e9ad235c936bf860661ad47e39ab73c806720d061327da1a0e4564658941726a284455e1cab7306ededee24ccd1caf10883968ca27f6bdbc8a6412c0a3ffa243c11a33cdd06a41752077519ac59e1b96eabd4dfbabb0c45c0b42f185ba7e1fb7674c6a68f925beee8b1cc8839141b6fe7aad06683a2e2879951443d6b5c517762035126efecfd4a445d877a5c219e39be25c339f9638b554676b9ad197f358d0fbfec0f39b137419192341c7e16a4579275fa6a2edc88fc7c07b0d02cd84e071e3d9734644b6a20d30643fd290a22d9a5551beeb7a4efcf728ed57606778fbfe000000c82fbc94b0a1f0efe01cd79b786d663f0fc588c517134ce5cb3bec5be3a0142498bf48046a000000a0db6294ea95d4a33e2958d922e7efdea814abc45833a04f0363cc1ad72072ccd4aa350ae361fe592bccfff827cafd9045af0bdd3d5ddb06991292ba775523b1a084479621eb2cce66970d9fa6cf2646fa4ddfca9137275152389a0831e25ce117d1d1006628585fd344d6fa5204dbbd21563a41ca90a3fa6ab458fe6796f14f578d188f436decb6b4f0dfc23fe67c5baecf2385d98c1b94ffbacb341b4ec4561b00380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b02c78906d743f556b7e45e7c23b0c2b39a7d7e4c1bb3b56e04233dd271f280c019ada29b2a2db7f0568fe0484e122249b38b3c172aa515e0bdc2324927ccd7a2cb1a3f129239fb734a849a7a84cd5190661d036d0d6098190ba4a46cb799ce71850d1123486a8c6237217f2c8cbc6e9f327b417d4dbfcbec7300a96d3ced7313675f8c4d7638107daa550111f5418a9a51720b6a5646d3837d07debf410eac4250491850106ae8b3991e72c216bd200ee000000b027048ce49de31396e65972d4e30e18fdfe501266255a602e67f807bcaecb00c102322428b1d9d8de479a3fc974eda8df463bfde97f39ca6d2a02f165244b3490dc46d840f89f4bfd48c0f5b3b084a95410c36aa6f3dd5753bdaf0090783e8b55121df8d21ae74a9fe8d9909738bf2a5e16c828861ee3d230bc085c49fae496f46b31ea994701eb3c993701651a9299d01630050e38ab319307df9356c45a35676aea11b8c03038dc3f06e06ca0fa4d17000000b00d5414ca8f2b80fa841499ae221e241ef4becc804699753cd85af800fb11d55436431aefc747f26fabf3333b186c25cca88fdce59540d24766aab5e80871c940a5d63c72178ee2c4242b8e47d1728855a8159ba7206202ebaec7844f85fd85e91f2acb82ae5535116d6d654a0486e6472eb1a1e2566f58d470926ae16b69332146bf972e5629d7fd1bcdef2913f73a3c048691322688d956461946ab645a512cee5659c752930f768554b644458200f70000021c000000b00eeda7a6ee4b0d848b36e73d2b99c6192c3facf83aab22bcf84edfa1154572152d9c91c4a2e4ce9c76bdba7de8c1081f78937c11cd400b1d9da278b3c567f2ebf786f6735f6c220a90ea7cde5fb06fcdf8fdf0124f9612ae8ab946f87121bf5754da0f74e45c789354963d67facec0551b72a8c760e9cbbfd9cde49faef2c5faad421127a37369818fbc6f70c5fa279918c5ee5d574a750f0150003e2fd176a4c2abc7c9f39b7a43d3f009d71bdaf323000000b008197ff8a9ce32ddfd0d06add052c63b9a8ca637a4c33174a41c826743dbbb571735047bbc72faf946a536d091a5c632d97f64b2c40e8487739b9e627cd33c4a43a5ddf1e2d0097cf780cdcee9bbaaea0f2519d51bf40106f873e887a46c5948c298e2f447a3cc636edc28dc37a6612127086d392c7f5cdabf96d2593fc2113d07caff464f2cde326e749d62f09ff038270cdd44ecdef693518eedd07ea87374c1a53803ce0622f16a2975943e3f8ed6000000b0088e5cae30c252963d892ad1250035865c18df6ca8769e7b67337e4ba2551ebc02f27e355e81765139c6683d9a24cc41529ef0a037f155ea615fc1bc69c1df5ce661a92891383883f634114392aaf7487ef69c97e57787625101a7d08fc4910c979d74c3b1169ecb0ee2a13ba049ce6303f4e3fc2da8f998ad6261edde004a0d0ff7b8fba33e1826a10dfd156ee79ffd2fc5faefafe18c0cc10c520c2a91dbaee1bce8c9b706b3e75bb5c35589f6960e0000021c000000b02803c504e5d7451e4d96c3b15f15767e10c108245e334f399027529e9141a8d9a729aff994a08ed6a88153614f85fa8a41fe089ae6905f1eab63bb0cca23f5dae2417abe544fdeaad1ca79f6a4f7cde3ddbb2fdee5e64f7c5f56559746aca6e571aab7c9e1c0e70723f9aa048b59e5481a3bf758c0cfc10606c49984cd418fdcf7d09fc03c01b003bef5e3e6f784fae621558ddab0d0c6bc184495bb68f32bcf137a1a498bb6ab347a8d8602e1b82105000000b02ccb40188d67ca2892ce5f12104f0ee18da44e617d00a55b9b36d1ceefc8cfae2f20b422271f3765f8638a8876edce7f588eb782be883d470504c83c6b5632b3557f59288442d1c9d4c88055d72de6b39d9a5675f3e383f5a5eb0753a1129c3d5578656387e414ad38d28ae84ba6cc9119365424ad7db9965a3ca7219477e35a9b06cb117971a07f2220d6970f3d9a3f18989dcc8ec616dcc456f1b0a7ae59ddf9078479d826fecafd28cbd2746d0c25000000b024515b430d9794d13eae6e31042dd8becb04fbbe3f36888fc540c7691ab850c41bc6366fa99e9a910880cc3cd5f2d71976f9e07f9d905181118b64e6d59db9fd56d1d4a3d9c4d017c4113fe341c07d98fa3663310503b6d8c885ab5cb9d7367ccda43dac6337bc824e7dc3c4989ffafd057c8f475bedeb0e802333a20312c5ae669dfb456aef4a23ee7b5f16b892dcfc1437b75c28df5f373398bea591da351b0baf26905c1c563eba06bce1e68a3f2e0000021c000000b016a80a59dfe0f5f874fa4de74cb3fb08fa95ed70cad79d9b76ec570576b994ab97ee3ccf7864a03105e067906aec97464cba94a469c45831fef69f75fcde1de7d9db43dd483ed7249a9ca5ee56f4fbc125e19b81f3aa7bb123e3f5d16dca0a2bb5bcb8f4fb00874e66b4f094a8c1387d1d7824c0176969490d79bf21d6ab6fe18f67bef4a2a4d437a44a6d0e613f21761739b197ee17a3d47a6b9d050704cdb7c78c3bc7b57afd40c063c5f52bdd7e4e000000b0205208881afd9554d075cd599c9fe02c7104b6edcf9e18659ff3bb38c5eb18a8a18d1820d15f599b2c8499875fe301ee7fadaae8a8eb074f61e2d24f1d756d5b1ee7bda0b14b578c2478424edec5c5baf59b6a0017b5b17a885411ba6a85b80122e958aa78b408e389e881052cf3d100147683c69b11f46e61c66c471993e37275d4236b473d87094f1ac7124fd2fff603b2bffb142cc5f129e4724916424bf2b0227fb1f798c547db60ff6a33471f1a000000b0162ae1fb5940c4e9e090acbbaa16cb087222ff397276f1dd92ad00381d1587c82aff73a186234e27fe535e8729e9e9699361583668fae4681036b8bc5626c33e031649ccfbd993443de4e47da04c5be05bced4b15c4c8abfe32058a5f95eb75ef21740b8e9e12a11c32a4543928e71af29227b81dd71df2e67d616751e570d5e242a61286484a03355b965f16f30cb602e7b24d703be3ec37a1efb6cf4be8664747fa29e26ca6708f34d48ec6d278c640000021c000000b02ab17bdf50166990ed6c066e6d1410aaee45920b624716fc4660c91566eeec5a9fc4fb87c9d51bebf05d98151fcf753c026cd0172f90740d3bc3ea39c6436e2924807b346279685628885080fc64ff039e02ac0a2e52ef3e29c2743c4d6e4f348470b326c44b024bef95257e66b2b9f82414721e492b121e7c77aa9252e1d1b8c77d3383b6f59725a776d1bf7ee38e450834617ddf681b9f5dc492baf5827b8ca3ad37f95b9ba73eda63005a902ad614000000b000b851c055c5d0e6ae00eb9f8527818802b52773298191b88d0adc1766b7661c6eb019eeb2dcabe614adeb99137163e6b70b4d26cae56a05ec01d4f80801e6e04d61e534eaa2021916f3edd454fd6d03ebc2d31e7bfe4158b0e2ee3246132d2e2606cf9c5427dc7057b6cca98c346571058ad12371b36e1a7cd3647231deb6acaea80bb568d7a7750fbaa2e95f8aed5f2542ca421d0af798c7fe26cb86d3c41372ce593fa5cd6d34068983322304c16d000000b00b772d5e181cf177b5199f1b8087f3cd7169ff45b4c2e4462ef18db061dc2f257d5ce86c4f14f394c83091c4e6bc4c150f2479943339dbbc09f9e8091e6d53b4edb105dbc1632851b53dffe339248b0f357952bda4deaed6deb6443f2fe6e76b12cb5a0bf7f9396c950380e6d5af487e1ae7538622ecd299577e762f27035644e9d2d824c0e3f55c147e479702e2abdd28893d64a3d128fc329141cfa2521e381f3ca103bcad273f70b0c6a875885c420000021c000000b00a6cefc5c3092b87870a57fb4a54db2b01d416d0f3f54337a64168cf3773131f7412926e679d01a98366b7526df899e96cdaa86c0b7244a2fb1f32acd1d8f6bebe9d0ed1f8aaba4619cb6c06a2ac74ffee35e991826e5b6603b3d3f8ea29d4b151645cafefd94ccda42e72cf4c02dd9e2c0192d38ffb64b7a4d0770c586feb54ec529a680bb78072f5ac9800b976d16103b37253e43f28cb536db44cb290d21ccdfc273d87cf0583a53945dc89bf4d0a000000b01782298ca15548456387873c6d0e072fdea9a5f7bfb1edd5a3213bb8ad8e4b5c1430d6ed42201799fa0197f59e22b17d697552bcfcc4afa97e4385aa00bb338934f3707342767eec26ad51e4fc810d69171e765d5096460267d630b58e9cbe4eeb2f2b5e9f7cdebce3a9f6900175a40819158e4f668a229a477c8e7538ee3fff9f7158c0f167656a05862b2004c13bb9139c7250ffacfc453febf26465d24ec0750aece07242d6343b5e1787cd9fc4f5000000b00244a3ccd5f36751ee6efc7e9e3022c88e7a6930d24661487d327394f71509fa57154b06e05036292b4f27a31216a347018227282b92c282e241e668d0e8f043c842dcedc4cd427e4075530596eee08de8d96c1b2e713b2eb3abe48baeaee03a132ef34e7534c94b215210a11d82918623d22f58e9aed6408d32ef3ed995ab01a36a7d2153b033e742f5dc9099eda7222cac5609cc9bb89c1e3a824522e993f2a7977e116d036f29c8f47793c2e668d00000021c000000b019bde7c6d6b7ec83ab8a3d06bd28f045dc871c70029f037b116a826c8dd9f344d2b2e54e969cd66c0d0971b48673074f4788d5937e9cc6da321eae16c5896d106d60d188fa117b9f42fa8c38580d0771e78a5360bcda19867c1c56eb82089f1f870fc4c4fa1c5552ad30f9ec55cd1ad6106f9db289745b40323a0b42d722f54d0cac53d07516bb49777381e2c8c17d8c1c8e031bab93552655ab5a33ce6b943a923ea311b7fb680bea1539c92f278c56000000b00a1ebd30b7f2846a7957065219edc0399520ec46abb8a2eada35bbc212b9656e95262918257e34caa2666179cfdfa2c195d642a3ec556ec491cd28c22978b0db024175a2cda64ee54f07c88bf6d827ad02ce5cfc52098545a2c7aec3081c7d01a3f05c64459c0b2c559f8d29066dc9dd2eee63a51c9544dfbf3c1ebc81902dc3759e64878ad9492251dbce84a8b5b9e60dc4454a482467cbef1d072f56c0d47744d1a7d66cd842bb725eb2796eb9c2b5000000b00950cd0745ce61b9572001ef02b438a046b4da1774999db21771060be31f29a2f02b064c2946716773656bea88fe8b8ebc7c72b0ba415b8f9ac1509d9d52a62cafcbd4ac37ff30534b819aae04c3603bb669d6687663161a796b4c66deb693c5df82a43b51bfcd282e4ce391fedcaf4524708c60598abf00415c3cb73217b9552cb7b6c3b8b601d518113c9a0bd5f3470db4c2e2129ac80123c151bbc4de31a65012aa1d3f23081ab1e37ffec3c73f000000021c000000b00a7e8edc6f0c3d43f57dfa6880ab5e3e7e56200ba7a4d907711d10f1a28127f8b775092b56fcd173049e0233e5fcd23e7d73313baa578f8ea526d0876cfe1f826df5cf7c36cc4d6a23b8edcef75c11bd084bf647e858b32e0e4a395e6c131d3b26ee99f3bf3b9bc0952575ca6966604d1dd589d9e35063d2990357fa54d95845eddbc67b2d2d39d955833f577aa5c9f72b5fd4ff30b8590bff807e784569207215a13b15cfcf9fe60480bdc3eaa79e93000000b029dc8a0a9ebb5472860398281aa48a00ff20bc41a8b8dd023d3c2c6c0bf85da81102f5756f9fb8d26aea14603bc288e13155876b70ad4fc6841d8f67ee39f3d4a7f96c4cd4998bc031d5cabed8887bc1cff0d18fea2def9664e094043d0844fea792c100ea55e5a7bcb141a3a5ae4cca06f5d1d7a6fac71ae2ccf9e3205d972d90d90f6ded158fccedd68adc7ddcdfe022330a48f6d7303a45f3cb70e4beec873c2c39e922236e25bb3a0751bcfe4927000000b00a22d8825edd32ab623fd236f651b795452847b8861eaa77701c665bd9f7ac4d6b4a52f1f9b175ac0a1d995048867849ff2a47dec1e38b7f1ffc01f9f88377c634e0ad3f3d5cb162fb18281ed503244afaf790b87bdc62710a7190bf63175ce1f3670da4e88d7507e1a90d3767ffa021096edba0a781ab9f1d5464c2465b0389db0f461c5f91adf9d9342c1054996b1e0dce9b403c40a12a8f8923a900264540f9857ba72439e23693a6157f0a41235a00000cbd00000177000000ed2f5322d3cbd2d5931a584ded8fccde4c99175c3a8f2d619171564afbd60130b387f2d49d000000c54444b08d8f1e7a397303c0b2d937e1de7c424af3672d1c9a24f0d16e330ff8dcd5ecf6e7024cb20c8b056c0dfc41d218b39f735b347ede2a520bc09d514f3efa9c2546cb4c152ecd7456f9b51f2321095c56bb3ee6d0bdaf047abcf8a40629eff8bbd76504f59cd7b479f12b45b5d76dfd708b0533ec58dd80fbcebcc741ad326cc1f65666bff3801b51269faf5fdeeeb553674eb3c6359664634f0d6d965286b52df009abed4d9c1c1fec810f359c641faccd09ffe101e758724f5107628a3738ad07911800000082020ba8e8291c76b1bb5df2bc8ff3498308a42a707670c3a817a02495f91b40bdbdde152e0000005aa9b866a9687f33423810c1d11b08b53d2c77a0674a757714f087f89e03c295f5edc628b3934e32c3d858781d5b62d559d4c4149d1cd3b630ac2d4530b086d26f0ef6de92517ea15fb77fe7af57d87e3e55e5316d525943f20dd000000164000000fd26d5ad958c21b78842584f1097ea1a903d7bdfbfdbba1ab112e020a41387a0256b186444000000d5e97671f6d2766f296f47987aee693e0f98d226dbbd2ea01514c24211a1ae29660c7a2729b5e094f924dfaf97cf341db9586063f394fa374d1e12af7f50edc97613c6e29f75e1b7109dc3b2456cbfe1f0c226e0708c4f8e3ef9869c5f14e3accf5e17ae7217facda1e94b3dc5d5e06b67c10061b39426052029c0a14c13b52f9b14eef2a362afeac76eaa3a4110589591d88fc6ac96a643efa46fd8b34ce557136c8e96938fd7ebe3217b958762a73bb03ae71afbbb0c119a28e389f69666bb3f7775dd4ccc69c4309ad69a3751490075fbe0a212020000005f1113fca85a0b29077341e11d876332a1b87e2365d2e44d6aff0ec01aa3fcbf0cdb4d66d500000037df8ed7f75a947b506ddb3e45896c1a35d331f3a8b0f2c842734b6e31484604f258b7648743841c1f1a9efdfc2540836401251e6d0861800000009b00000037260b7b651356ef0cb4a8f727e7092bfaf55236319b94bc3d213ee2ad89e962bc66f34bbb0000000f95a66ad2f94be704ae0caf793ba0ea0000005c10dfd38fa707fbad7c9bc5ab0fdd156c541da800b1d1c763e2ce6077f9656741476e4bb60000003492ddcc1215c2522c5b38b8daf0a6d3682ad3a75717ec9f30762dc5327d2f41c2ea3d4c996d2917b5b013f2d438dfacbfd672f9f7000000d30000009817f2ec9bcc642e34f1e4c065ed45b55a0f91504295df40ac1a5cb7f121494df83b0551870000007017fd383b2d629063fc54e4d5677caef5a42385633a63a9dc2df4b37a5a61a21bdc6e81556d75080ad8eba3c8ff768fdb6ca1b52c6c40a51b97eb8b5fb7051bd3d428dd98ff7823881dc7134a3f75fb41c520bd82ab129c4ae158e314142409edbd83441b8142dd647768b9a9a6164b2b000000330a54c18405c9329fa25dfc6a293a5a0f030162aa4ac39975964af9ffab4c604d00b73df70000000bf88079fc99afd210cf24ed00000159000000c92b33b491a5e72d0d77be48b339678278f9fec7a983e0847719ca48322ab288a5983e3891000000a1c68b5ea4e1e8f6b95ee10b64237884d445ce7df3554dc2c3a51c9b1c16943d59ff7160bceb5433346e6ae8045bb58c66ed80ae208d01ee7bdcede3631206e79664301f9441cd4c9f268611ea9dc4fa996085a850740106a1f4a69cdf2ec6433f6368ef7deba718b8fbfb2c605424d8ca8b657ac5f2f72b479df02827e9df3a7911514b2de9c9c243dd7a995f2b05de69a18724a926db85f6d492a794a452ce30ff00000088043772c9ffb7336985f9216831cbfe8c1c46a3cecd801417087421dc829f906e5e0c66380000006026a68ec1c521b09c6b58215f7cf21417ae2a42efb276680dd649271ce69f30ea25cd61c6f2f138acd9debb80f83cb243723de7a464b353ab9699e205099d1573758efebd36c50d0610f4684445cc3b1a83b42921209ad2bd1b31cdf909c728bd00000136000000b324539ad433209063c818e3c6764c85e5e4f63d655cf83bdacb54bb70bd2bd168d57d10920000008b6b12842215905304a0de69079fa1b065f95a40e83d54e9ad213b094ba7cafede06e90c63012871620e3bd7ab5ed6c1ca532645152a0b9df73bb1c7410082bf9d70a3c7f36642d86048736602a9360a09f0a0164204478d768dda94e5551f7683e8576c53d0b7ca6e0a8e6a67d039ed32853efec4ef3b28463977a80639cd28aa2afd0f16a0cd71892ef4160000007b0c1d9e7095e08218d5d1da5ff57025a24188eff86451e4a55eb6cdfb4484cda6fe0352ad000000536024040f1db22da5e84d5c577d1db53083151ac88848736cd5dd011bfa53092454ad1781480670b650f991f37ebf28c3a4c689eadd31bbb0bfa56a621f09a6e89d803c226b31f1839331b91e6d88cb701f29ae000001c5000000e82c6044bc92eabacb8139f2654bee540f73e41eef5a4b35a5b58d88ae1821cd9fba988edc000000c0e851ae04d8646921e69b2b8098ff350a0b5efb70dd29fd1c768b5506445c8576b5c5b25ba7eefae68ddc6d8deaf3400ad0e5ce9c2547d9dbea51aaaed2b5ed2df9838a4864da4012c98a71f69fa0506f195900f2b477ad74b5eb89884120c28a0310eed3287b61d18ca8de39852e4c1f02c300f7bde079616934e0d1bd3d986d85f4797e841f41aeb2b587aac998fd87fb1db43a883b22481a9b8de4ffcfa6cedc8c41e24da004550746665d5af61782a422ced4f17c704565dc250edb711e88000000d50b045650ed047183d019bc76eaabc2208bd6e672ad7df3097c09ba03783eb95ec068294d000000ad800f55cf63b640705e1398f58f68f547502c0b67099c6132b69d343aeac92d9cc97ea92e8f075863da3d825ee5b92bbe73353d9b87dbcf8251a65b64792efef62c1cab49801bc660695af67c3da2c5357ce07fc4a97a2a81c04dd5ad1d9615883e456a07cd16759d21cd47cc36a27bc90cc931329fa73a3e38fb5884ea6bae988d9f5d9a3f7b9f112c4f91cf980a55012369f82e33ce109df79a0cb992c9c0b63df32bab308a8f265671c0b8ad0000010700000055227741e2c39eb8f434429d52e2055c0c18770b00931fcad22e344a60069140541ac6dcdb0000002d557f5b1bfd5ecd0e494deecfbb84bdee48985ca8d813894e157129db63c1d50fc6518aa7f6a92974bf4428140c000000aa0929d3aad52237aee9b0e38310904576afb3ce5cc792967222c6b8516ce10201ae2b1c0c000000823d64982611c6ba9162f6f5dfc726991d2e60a4366f1fb2d8e93bb390a3438ed624f602818e1da5847449f75461886e00d5503728997a478978317bf386424f446db4a205f852c05a78a72388bc50ef64da774fc028f21dc8e1becd78077cd9ebbcbd1cd7010539f6f62baaaa2f68882034bfae6fea70a63c88d75ed9458ba76fc9ee0000011c000000951a01c19559ef12f89e1855bad57e8c89f00fe5bc1ff6428903d89731b3a26892caf4689a0000006dc73f0091b978a46f94af4e99aac6d4b3da45b28c2245d653191210b51be933a3b6a75ae45ab2637b6b1b3c240622f531c1daf1c7f19e107eb2658fe7b530ad19531657b79068becbdeb13b26f460392fe9886d5a6a3c4af5522960b832ba8d5bde00782d3c46f7671f6b1a69ed0000007f07aaa09870dcb2f245fa3d22382d71fff5f5916e431f561287c6e9416c15a76c642657c400000057524f95e2c357d5433b9f3e8e17a040e128eefccc0608e67b1d4ea6fc446b05ddd588fdab9e75a685dce62f0371837187fb47437b96d067eaab2dfbded1e3103b48a79739757095b58227086c7ad0d541ffe00b52564f4e000001100000006f18b08552aa73404d6d51dc1203466547d09654ea1ffaa11fa07f61c59e2d995fcb44a3b3000000471d20e554434baf94a2b41cf6b32106415211bed84f6350559bebbe38d68e2adf6b4ef45859bdbd0d52e2966606fe0b40320272927d5794744e624e7fcf1a3aa19923c557c5061b000000992e5092c55038fe539347ca410d4f36404126dc8bf97a709232c3c56f6f9e4f971496263f0000007199cd566efa125b9a70de36d83aabb1d79f8a76f7e905fcf7e31086a6f03a7b79627ad2e8dbea975a9ae2324df48f6a5d3d8c24cdf9a3d871d0d108981a5c952191de97b1d732c3265ebfa0158ce183202b25b791d48bc8a359a68c9c58aaca283afbee6e4818eca06d4bc75cd5750bcc37000000c10000008115003ccff43d3d59e3f7dd8377c7c2de95ea51b676d2df4a93fcb5162b4404bd21da798a00000059166711105d9f493165ffb7e5d65b8b3bc2dda3f2d662c4efb0296a0dfb829aa8b014b16c6d2ae928385197e8e028eb80ac05c3e8c8614660bad2b650359aa5633da11fbcc9361a05ca7eb6f377266c9e9a7aab870e0389b5c9000000380ed54ae14d8049d832d491f8fc3d0863a74e931ffede2bcf0a6fa7c98c7f9be2803964b300000010b455aeb2504de3d5001b89d66b590890", - "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289", + "archive": "0x2af6332b735bdc93af32d170218f00e01d4e0b9ed8adf67f928b2fc0070a5ea6", + "body": "0x0000000400380000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f00000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000027200000000000000000000000000000000000000000000000000000000000002730000000000000000000000000000000000000000000000000000000000000274000000000000000000000000000000000000000000000000000000000000027500000000000000000000000000000000000000000000000000000000000002760000000000000000000000000000000000000000000000000000000000000277370000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f00000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000371000000000000000000000000000000000000000000000000000000000000037200000000000000000000000000000000000000000000000000000000000003730000000000000000000000000000000000000000000000000000000000000374000000000000000000000000000000000000000000000000000000000000037500000000000000000000000000000000000000000000000000000000000003760200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441100000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f0000000000000000000000000000000000000000000000000000000000000659000011000000021c000000b027ddb98520520224a2f43c7cf5a12786192d58767a493834614c6b184301e85383c6e908d109c0f4ce19efb76a1ffd2d34b24078bc9538cacf0665d36442dcb13030bff45e18da61e3162bee5d09d273fd16961e7e63eec4a6bcd1a494f202fc0c551419be8d5e7ce79e430954ba252104a5ef3e69b69ee6d9129cc32c0869a55448e1918093c7128735cd48cebae28b07f6a8136b43d9f4d2e8d4b8bce27c555bda053c240e206dfaa07e82e95951b2000000b004afbd68b040306659e3ca01127e46f2b3adb500262ae7b3ab91aba2d6bc566adaa64cd563b0ef1bb16a969979376d658b83d1d8191c6cd209e3267d75f145bfdfef9ad7f612f110bd0d241ba6ac10421a44351ec9c7130d202e38b07534023b56a85409b4b9009131ca42bfcc5320c3134631eee40a1b0c3bb32e48491bf382e8293f901e5e36dc426b7f33331e2712025f3fde378fb321329c9b6f0c7221f1e78f194cc804f287d864896a366d3d81000000b00b1ec7724d3056a309e65ba37c8b37d4933376751fdd17f8d9bc0f178df31cf00ec60ae7e7a07adefceb0523b1fc275a6abe6aed8ebf0ece51eba055299ac9c8a383d453837b4fb2ab62a97af2d5ac9e22ee7c57bc71be76c468bc84efeb6a7511b261587ef27b9a2d30c2caf78a2a271bcb52f7156a3bc0d2c7e5266e7b90746ffd71a5b5435d6b0b48c12ed0763c4c2365a61e9155b140140d6e8726c562e389eb934fd67f8488be6e9f403b74d8b80000021c000000b01b15d23868f7524ca177051ffa353a66bc32e50bf248b47601dcd219a06b91943edd3b2a5522860f6c24229290d6e14f2d48bfd8d9163027fa8f62e36fbf6ae1c605a62129b17586ed429c6bdeccdbe04a3da246e920306f7b84feab9045d08d4dfe783019a9bb3cce15c6aadb122484132e703d8c27df58f052b2987b469db1a77fbdd35e517f458741328923c8ef5d07f71cafcf9995460cf0307d5af15cb365b1a9b863663f522b0d6e0c926ae2f3000000b0156fe754e3ac3981b647b72efe70f6532d00e2bf2399255bb7d3df96a326a36ed1224fb4ad1c0aee7364934b930ae0c19f7ec5527f28c02e61b0c4fdc58e6e5f2c2cc131fe8e0fe4badcc3fd1b6ba07179adcaadd1fd0bf30c51184264d4a6b31029bfa3f52873e9b284e7ec7f0b0e2c1748ffa5d0189f5cea730b9b2c456c654959273f091bb98fc06a96ac1071a7e30820a3b52c383bd86453123cb1489e1ee62507028a044fcb436286fc8ee3b9f1000000b0056daee566c3d29e713a795bf5ed54cd683b1ca73d3588463df4e66055628177e1ae1dc23f8c5448c93cad13d82cf8ae9d4e1c438c2e43fa24e9506ede609fda65d64a1bb8ead1277757ce1a9ad5f2140b6ad0b7e308f5440439094188861831aee45b980b1cc8bead3b32103a0bff1c179acfd94b6f12ce81480c994fc03681ae661aa02045a8c4544ece88a212437b2651fb1ff11591a13bc3253bf4f3a114ddf484edaf53301ec8cf2308fb1c9e3b0000021c000000b0144dddcc0652dcd02f01c5441587c15b4f716d16278bbfb97741cde3b6a4f3e18178d91f67505d8e7e398a7038db3473f46604f66b94cf204b6ae5be438204f0575d6ec7a3d68a42f1c20e8c0a25875744660ce06d2d24646fdd96a090466693489d7cfbbda30a9af84fd401d417e6980bc2aac2d0bcd881d1524ad84aae2a61f19e528434160484dc1462c93c9f0b9f2bca96d873dd91b73eb2ba2fdbe609f9b069c62de21e98a2d3f2d96b45ba8f2c000000b011e2720e146a8d99876feb1fc10f104727263a16cc2afb998ae51f86969f07d13efaeecfa621ca66873bdc6092683a4a10e11599051b6c7dd0b4b8569f28170e067dbb24ca17ba833ab4cccb2223142da66584d71f1ded59baa6989b1ebe272d08e5f3bfc739b44c2b48e0354c8478c8070fc3ecc4fe49c2e52c3778d947b814e4b22597fde1a444e9ad5ead1abeb86a0b45f1caea077593e7c8b315a8781965a6345e5f8713ed9c6f43bdf207ea73da000000b01d15dd5b869c98400b47ea2ccb2cdcb96cee9df51da2046c550f60cb5b6383614a1dd137b63cc1b3efe0c879b5d3a90135e436f5910e3b94d63931c5e7a815a463eddec7b3b9c8bafcff6d79b23c05a848058e996e6c244e64edab62bf83b3e63e789d956510c9bbd313cf49f7946c3911a169bf232707bea75e329697341effa2e7358e18024ff36e8d10882a6944582626ba79fe76f03caf5099ecb4bb240d51cfbb1314ca6b002d352bae1651e2990000021c000000b02b3ce6877e0830886cc9e41665ac3daa89955fde8962101605eb29efca3f75c369adaedfe9cc21bd7a3040e81da61f2c9ff927519e90c4158c8a67214dead6462ab086f94e9d9af6e0a2fc6cc60e2ec7bd95a024bf1b83637fd5312c56f892c738bb75487567d98b4c6edca034437a4e0b5178498666cb114f03bb5504ae2f696601d503735be502c4b040a86adddc081e1f20ff221add34e5c65b6db73c3bf1a6279ef14b0a2d0f6cfcb2b2f3af32f1000000b01c33fd07ea18e5180a5f16af90c0cdc98fe32de0fff7361f801f738bc6fcf949b15ef797b6c5813406b0a8971b939a1e543a37fcbad7bc23eb5011d139a1e80459f8ba8aa0b2e5bf125a5e1d04b346d9567ef23a0713ef035cb007459269c776a0fa18dc5773a68c8c86485c57ca1e100112980bea959cf743a57f74a0073afedaa4532c4413342baccbe404c768132e05b637390b9e45aa0b5936d827bd00032036dad674452a855eb3e6149e90d2d7000000b0063b67654c8bfc4f574392d902a2b9c7935cff1e6c43fa64978b13abf3ae505877a4c177b8868fe83676a43113ee0689b86a9cbaa13e5201dd9842bd9694767119d7343d4b8e856cf6542663e6b15cd07dc600ce60dcc4e3a410d2ee117a8ec94a35a141c6a441fb98f854960120b86d20ac9f4041184e2fb7a1269af248491b4db6cca86314c5e9ed2321b6f71f79d3081f80b9684e06f4f0d4a37a614f9909decc543af699fc51d1382e090e46e8640000021c000000b0203d8c787ac00dcb7f22500dda3f0d27de002b505096b3d91a274c03f761762a41e8739393e50267bb45c6601aed3ba0ce9d0bcd26a18697815f979ebfdcb95efe57ed91f21965c996c85496dda9252483c5edf1c3ec6c3fd163dd4634e6f437977b23dfaaa5fd3d575d7b0f1e082e0d1918efcb2173a1dd24a5c13978542b57065d6ef1ee54f0db11d0b590be2691a00a0f8145ced3dceeb949cf38ada76ba1a74a541d57e9e1a56b06b8d2cf07dcd4000000b026bc486bc3d3d104e8381c957ba3e1d6976c2be1c1cbee05206ca686092db670364f47832289843d261690046df4309afb0d5c6711bdf25d9608a4d2a7aeaf7b18761c8bd72c84c859e94f47d96beb4d57fd2e1c75bc3aa2e3843b1b68d9bc32d5d7a2af6ea556fe14b19b424cf6e0be06cd04ab3f339fb76a2092dd191a5cc7164bc996e7cf6a7de4533085054eb1252f592501c0851d687371cae9757adc250c76ff2c53d33d6589ad36138dc25985000000b01fa49c12597a1f1a3d510e53f120139a53fa657b95a9ca725827b02c5df72e55844228498f313c0ca663dac67073afa14002e4d633d2aacfc8a6f29411be95a53d15ab376bd784bb3651308ec342623062ca2013f09cc2c9068315bd3f4f0457dd1e440bab80a1b1faaf468b42a54bd122d019eba5da8a06f75499ce4586fa86cd741aa2c9c9243c78586c4eba5e026202a484d0f851a1ba794f8202981d6b5d74db30e042fa5615f6bf71f4cef994720000021c000000b02e84bb7221eee729002472ed45862fa48e002a770f00d76a9803e4bb6635e2ffe752e4b6d98c6775fee067f3a4a7a35d17dc41389425290ea7f2b23971be5d172e44de87b548238bdd06e5f4b318ee261b9d9109c7ca85f5b63c9e6519f7a59bb3c0b23d07c6b860e29df886c893987f1cd557bce6a33db692a076fc59b7c4e3c6322f7914bbab285fe7ae21190df9ab07fe4a6c7b7802ecb81f2cc53cf1c070de4c8a04270774a988100822a1aeac8c000000b0231999f9066d9b040d92c7449b66dc02386576362ae0ebbebd144126a0cbf758f68aceb59009d6408671492f0a065071c8bbea2d7616cb6f1110113f0990a1a670f75dddc85a407a8c917d55740df6d7cb3867c38e9b6f3e651bcd6689026d2f383da31d24f83916372e1911ea9260cb097c76b78cc0fe9c9e34c5740333b00ace5d5096dfdec83a10333096b00b684402c0b5acd2345b3db08903e7dc9f172ca005ae35ef3291d6140b70b917a0749a000000b01d0b4936ecb6ef1fbd8d7a93fefa73f63e011d8ccc5e6dd4a7c5427d7ee2246ed6771fad8933625c4fe1566eb955cccdc935dd5020507bf5df69c2e55a5dce05e7182a3f4e430d8ab30861b0c5770d12ea9c1bc6e2c4d10a213a5a28af3d4117503e37031b6e07bab60c527403eabc811d5b95fa4d8d54f0bbc42a89621cab1de9fb391a08475a9930b38e986c4ba4111939a68135297ed60fef8e2ba7509d6bc6fc46f9e9ff71bd9161403d68d6f5990000021c000000b0179b5bc9075076be3050a5bfcdf741ac3aff85791162641372d1792398080b95895ccd3187f8e66465e26ade043fe1f9b82fe6a50f02b693a41d4950423186574a467920f7222f56d3982230673d4d209f4878bc67175e72cd10c3f2b018a087dfe2ba3ca4ba21aa0e137b17b5b568b5097878b664af25d809caa924edf3c49cfba9721a354c562385001776ff1e4757146321b82202bf897bf2f7a6234d6d66d1fed2ce10f5552e8c5f54452c50b692000000b0044995c9db77cb345b682cfb111178b01362e30ad17728a39ac92ec4f4b3adfe8ce5cc5e99589a13798a0b75e4b57a8739590cc711b2f59af3051e9941d108de2bed324f623190264eb968d94a45dbd242ec1b8ad37ff1d7a6740d360f25aa415d16e91e6a8b492a9296bce36cca5c56223611d993b6f4ee052e07e33f211b8b528e7ceefd25c5e86016e853e0078b3505bceaa12313a8868e6ef0e9d20b860a0d8eb6391bc4771d9de56f1954a63423000000b00ce5b2c650e37ad9f710d4681d3560858fed980643347c76daa22ed2d1725a92af7e1f5a2a288efdea03539460456051942fa0998f5323b764a82ce3e266b021900da7cc377d37bf7cf0ccd5c9686e0cea19a6d886be0e26ca55649c34af7f75cc40e86d3ea2095458b5a878d99b64d21d02d3d06f37b5ac6acdcaff7eb091d4ce85e463b10a6ba23966816d307f902a1e75fec9cd9da281e6755a2b5d9dfc65ecf11976680c8e2add2807fc14e2b79b0000021c000000b0270c97db5e0f30d0d0127592d2b457d794b8d1ed72dfb8fc895ddc31c5f316906e7ca3be63a13f25f51ef86b530fec912e8e3a9c3a7909c19f5d6a70690d917112f15724b3a8f485b5e3bad47b70a158e1615c350520bbe6c2f6f2652fc65e8419270b1b0b811acf84ec532773fd8669019963335a2a4a470dd9cb294aea7f0bd2cf2c5ccf614b6a8670177cd7df66a22cbf46afe4fb704f20f34ca764f0c16882305a209e1a2d4b5afcc248b8f19f02000000b01286199bf2769e9a78e48c62db9698a67cd82ddbc4f65b6fbfd5f0dd3c313d83b84d050680892263eb3330eeeb1100f0b1b650367dfb353592107d24b350f3b7581978591eb62a6b133e8f8d5e8dafdc825dc25cc8f5f169989692c815f04916a8dc6e2a9441b12d4b18d55b6b54e1a70e2abd144ec2759d9253fb07e17d7cf9a5d01f769dea2a645b618b0ef9369409166d3e0bbde97fab7c9b94c69bb1124153c9d74e73d4495d5b43d40ae2dac2ec000000b013dda4423dc5762fc81203af91ddf539cab3cec09d53140106684f59b342c9ce41d626ea2307ef80ae3f589bfaf1cd9ef99b0f0f017d12a6caabf1b8131d43dfbb560bdfe86e878ce940ec033b7b8033ab7ccf3f2152075ecc3319a6e572f44c098e6375cdacaf170d6f7ed0768bb6631889820bbf4179a5dc1af227c8bcfb7ed869f789b8a0df9a67e898eeddb957be1b8f1f2d9efec18d1c74edafe7da36e49a15217707e09b6e341e15ccf9dca8e900001165000001610000003f0bf85e916bcf6383e076d93bf98acc1798a2e6999d7dba8fd5de75520de6680f14f0a35500000017f88448a53aa0dc87ca500e08a027a87c101c4cd6f7a2890000011a20dfe04ba366d3691a9b229df5147c882d5ef3abd4c808bb1a3ded2267cc8d11845fb1df000000f2d78d3a6da38bc1f3d6d1fa2de9e17a6cfb2eb94dcedea3a3bcbcf3f4ad9cc6dce694992a67fbec5a4755a54de3a4b94239eb1113437855513de0191e253e1c072e44c9c82b636ec2768bdb08caf71c355e252ab388230740338e0dcd4cdbb3c18e8ec642457e7a727040dd42a5206c436027ad4e1bacf8aa473b95d356a3c5c2833b06ef53bd91149a15b6be9a360c4839cc8da35e472a3e27f178304885e87d6ad8ed950e861af496404ee6e316ad19c78aa72b84f8eed228bcb39d046ed8449dc1d885e0e2f8ee6493d6962e136aff1bfee38bba3ec0f4e0ef3c356d40e78b0cdaf79b7dda7809ba512932eab0166271fe000001b7000001252111dfc3a648034759bf0d2d2ae178bcae5e0586c73a4f56a42e62282063af62d3b0f19e000000fd8a35bfbdeb2eb6cb1beefcf4c6b50b68169cdf87d9e7fcc520105816c0b6f119403611aee530119a4034e7be10bd77607f17b5539ae60c2b98394658e4034b939ec6ee1e3080facbad93190f095ef711a3d0c018f259bb3352a4e853425e7c0e6981b82d0be0bdf0b516123025a8a039193c11474acf9cea879a6957854f329052dea40efe3e966f947807936c8147695294f8d2bb3fad1b61e83e0ecdca89a906f56ac64a2937c6c4493fa74da154297a78ed5cf05a6f0a0f8383f5676490461dbd3352fa73d5f9d644fada595825480d7f351448f14000765bc9a04aaf87aa61cd68ba00a2f827c178449f72001cdaca8bb5ef3d483466d5a61dce200000008a156535577b613662037cd8a3ca3d4bf6f776cad37c421f9538e1287ea6d4de5703058b1300000062253692eb545b068bd98f5a009788496decc61da53a3b1bd5816a784a4cf429ec10603b91f8f3a8b13a7b96434d0aaa5494161913cf15ecbe46c9e176c7c279d827d9373e9da3a50c961ee500f0ad3cc17f66427c5cf38a43061d5cb279b96c06fa170000015c00000121197aea9341ebf1269b28d979985235c2f0d60d8d6b8b528c20fc4f1da92846e228aa35c3000000f97cb289e6d2ca541bb8dd3a9ef4f85e8c29b11ee591d363cef7b844ce8624bacc0345609bc2ccbc09a14e7e94748d995ed91dd37f8b92f09c85a5f308edd8c47edaa4f920649b34c610598d091113c338a5460cf3ec9a09b05b97785f4e0be028943c26246f64a61b4f14c4153563f59cfef0da1a2dea4a478d2a8196577e2807ed1b0711bca8312be62d73527e96c8670c85fd14216cf6f6a7e7143ef8cc0e75c4be2048493966d20e69edae13fb4ee84601c535eee5ab973a61486b9048f7836b0769c104be91a4d72164e5d21fff35ec87791b9ff9d1d37abf4f4fc11cd8bfb7e8205a7ea2de99eb27955ecd4a8daaca0230286339db1936000000331e49a4146fb2c47cce63c609e4e8848399757f141f561be466ff526bfedfbc1252d6dff60000000b9bf2e085fcef1addd0cc010000020d000000eb0c62ee98a197b04162ee6bf166d6ead3c6da954266e5d9313b35586b49628933959b7f8c000000c3b78b464d9bbba724b9749217cfcde65370052c41995da3156c50bd3a4b79fff7f67ba3db0fc5ebbd164d5c21bd62b890f4c1ba632f8454c6231d0af90e39d9673b1aac5de1273fb6ec1ec260de1cb8aba812c9787f8f7435e5b9b884d2eb663365b7bb54bc85fb56fd6891c646433e81ab7cf874117a92dc35373cb25b4084e33f54d5b7408b2e8cb225c704b5afdadfe824df063d6cff534e498b2995ccf703a357213dac72a5b3528293795156bde1e631815d3c3331f0399e188a6d54d0467d8c620000011a18356aeb073660bcaa9d6734e3fe559beceabab1faea9a5aab775aef368db903a89e3729000000f26f59a52f51c92697f249826f4cf3f52a1d4d6fdedaf074454887af239757c810f1872d6f0a67e9ca4fd3bf1df14a79bf149784c2f75643462292a116da4bdb45c148bed0157345b3ec68ebfee71b358badb86d6bddd1182d49b454dbb1ac703c86eff58f1fb85afd61f48128bc2f6db89d35967957b5c0a91f4a4aa14415533f1081ae2453a8cd5795c89aaa6f9c8bd59b6c422ba0db5032149f9919f34124d68bce102e9e478b77db9b9cf000c0307a1800f9be0c05aa3203d19628dd0178230cf54090bb446371c02debda031b83de0df145eebe7857b14f41f29b7cbb8d7c1987a404f0c561f34377019902bef590bfc9000001af0000012b13269df6f5024ac0a89fe846fb504a3c3b33d9da00a341811c6e1d604c9438d2bfd3c54900000103187b54ee7911a4de877bcbbc50b95fcfd6cc25406faf949d6fbbaff87d3fdcacfa029ade22208c4aa1d2cb3ee9bed9885b69ab2938198c1d69f3cdd9515966b4b77d45c23387b7e5f4d55683964d4ad14b60e43d694952f795f766e5455242ac9053657f42c3d9a283b936def7835670fa41054f69beaebd787fcfc58858139c19745e2f8f5487bbdefec5273cb0ff3594d3f66567ff6068fcf4b21464e4effd34498bc48a2206ba754cb1ac187780b64629a685e61654e25f80c9ade8ad873c9251e99a11e5d581ec7f795248fc200319527da08812004331dde1cfacd20dbf713aa421a8e4ffb44f19359d2954980f27a1e3566627e1574c679e44d651c6668e22810000007c1a5f105a1a39a87cbead636c9a12db190e44f711780e6241b8c2b4f2b52c3b917d6c354b000000543045b018f7d40d51e92e2140f7349fff1657e9ba826df8f69faf2a6e6523c69f51774675a4dcddca1555c5b3bec747e7b65b71ac1c2be59d22ded2390e249245ff5f0355f8dd9d03513fbca9abd26b3b06dcbd6f000001ee000000c90edd4a77bf4aa6104126fdccd04c46af593cf7ca3fc82ec7ddcf95490cc5b98c0db283ea000000a1835cd335b98fceba591bdd2e1b2a97743678e2e600a47c6451dcb14337a89615c5c926b64e82bec3c89fca4f3f45bfba1d5e238bb39811f7b44c27ecabca2c597a7d5477f258ae730a1e5186203e6147d696932e0e5d139a1f828128e92d104682a71e7d119cbca0b06960ecfe342cfa132a75a8912681fbc9a1944a711e5996e60c8a3169269b7ee013b315308cdd57830632001520318ee8cc68623fda0162ab0000011d0c554a20b1de36415663d8a0d0ca49990dd99fb1586235b46c19711bbc41dd65beab8179000000f547f5ee42be62fb58fd042d8606435ac9df62d8c00df65eb4bc5240d5566de7126fb59b891bf077a587f17629ea3fcb3484d205ed32e1a97df77b50d244b7d4cad4ffacf3802923f827fb513c91b8f870a6b6d962eb6f7fc49fe5c68da41b0ed4a7cfeca6137345657b8da2201dad5bcd351ddbb9d55082c964d9eab74bbeb4a74aa205264d04930e463ad061756d8b27fbd6eeefe291c2b0f6b483f5f23c8365be8f1687e651e7ad4f2e9725784a95ee6dbf4c009cb39ea9f25d0d137f8c5e0e669e2417f1d76b8ba78ee9b9c1affc9d2c54647c87807f908220259c4908939d0de749e9b59ba40ebe5b9c3070c9d1ff7904763a0d00000186000000b12bfc139e664bcfd8127facafc10503a4e17b922bd4760ddd47f81960539f5e0e09c56ca700000089c0d2dc6aea07efa81b64f7329cbcc3bf1301ce227bb7300e8536d7bbbc3262bb331ded7d7c6a5a270cd0eb5115a43a1a761304ba98b34c6e9696079a96f02ca2079a4c11f9f08e3333c29f45e6ef7258a2821878898929e553d737829ae58a2e4b0fa6717f46684f1c37f700b713ef3556e3660ee1e72fc1cc5c8f8ded439b7db09b36bc20c2920286000000cd2c4492bac27a911014f18bb25e23c8007f3e42cf5d3f363d9f385ed461a06271c128e387000000a53b513a24aa4fbc7109a21f0002e6be19d94863aae21ae85e0b82b5b6243b312057f0f70835d2d7fb3133f21102c8a6ee86aef481fe3cf6ed217750ec5f4ad1222feea26ef49abb7aa960b5d345420befcb3eef81bfe67847834c48b34eb504a56bf380849d83decf75f59cd837f9ea2a109fff044036ad87f29785d0707e3ce773beaad212f9bfe73e50b342cc1a7907aac03ad39550a3950fd19288cfc12baa06d45b671b000001d4000000f91575a2a42e32c53a4c2ee0e008333b5e2f6066aa51d7168a69bbb697eb6be99ba0358f02000000d1153139906a9202a1006b20c28894442fe7b4ac9eea61399bf781440ee7db24e4c9c83eb38b877cfb8a48fdeec40f07b8f9de47cf79eedfc285ba63b46895c5dd7ead459f8a7750eb91ce1b0c0d4870f7ba4786690f1b3c41ab9707977da39e08477c98268d3049789dd0123636ac6b2b850494c5fa1f70439703dc83b3d17999ea575c3e731cd448b8465e8d66edd53f7423b219d3c86be2ed25d06343b3fcfd151f407e5ddc179ad3b5f67a8a289927a82e062e96be941b3f7aead5ee15d74c325063bf387e46e45835c7873d8f330910000000d3127adda545220ce7c5a6277e64bba19549a6ae4e64735e2c8df62d33d21870de16e2d682000000ab2048dd5a0a84b102fb9b093ae398b548518f0781508129cdf3cc7f2fe4ccda04b9ce4afce74b157f665abf26b2a51ec10ec238a0659e27c89fea1663ddd3a129cc87c6134dd4fd09dda29db78ca69380212ca979310eecd03f2275a989131b189320a55a2ab74900b0541ecfc67023fcd5cd1f5f5282d86c6ac09288098b9c91f418bb6bf12900007e6cc023ed479d22495d7af8c1a4088722cf5555db36c87ec8ee4fa0dbf71a6a08dd1200000134000000e521e3faae5bafbc19b2de1ace6ff675ba54afa8ae0a1f2c8937203639122510206d2683d1000000bdee5043fb8653afffb45491054d5cc279b540d023d91ef59c81fbcab5470a0ac6ccef7b7df6ad7b498f41e04f5a398cbcd6ee7c870989b1e7126750d6fd9e9dee953f9dd5ab8752a0339ae0a7adbe51cf0d1e1aa2e3cd8a16d7b79113879a3b301f16c774350f7c5974c5d47110619b3d7700110a5d748ab956c00137c405a5278b9a61faed2a50d98d81340ad59f3d9e1b5695374510c27284bdfb224399994bdae12e3e9a938f38e6868adcd4675ba5bb4ecb52cffc17e6aec9ca6fd7000000472770d7293e4a639188f01541a8c24c4ab367ce0f6ccfcfc0bd81d1b5581539795356cf6a0000001f487f29dbcc3776926713bc0d7675c73b985e3facaf6ac93bee0bbc96ec8922000001af000000d819ee6f64aac1d704c7e1cc8d50d07ada13a73ca9be49753c5aaae5fb0073ed4ebcd7fe10000000b016ba0bf175ec226901bf505fa2fa6041f1a3c4456b036a4e1576f98384bcb4b914aff0230dd28964d7453042656823ba5a164f4d9c535bdce610199f9696cee5b308c5cf91a6e9cabafdeb3130b0aff463751fe94b7b51f9f057337487b3b8c87dd0889d456bcfa855d22558a2c3177e1da5ff635dd97d715946bf5cd278fe295b7840fb602caa57fc26c0815259dc07e7d88c2c895ca48ffbfb89ec02d70f6a63d762978cd416fe5d2f9f1340ca6826000000cf0884950587c8960ae4ca4db0647ad1ea150aef9deb4ba4d79ef94476d34c2ea93401023c000000a7444c18adf8c49b667b5430a1ccf088182ff647bd75cca51c572e1c47d0569911a8ea52916fb44d69b98f3f7690bc8df344617f5a6e7c9ac653fde444d117e3e49b9f26742a7bd4f9f43811c547f6e464214bcea7045514b74fd37f6fed8760d61059433151d097131ce2c3327c3cd38389fe9fa021d8925a861286ac3b75463b29060091ada79c8c16ae4b360dcfff559c4c3d6046e2f546edf9d31d925799e147a546657543e8000000de000000661e00319b4eaa76a6e88b7ee01510f2b5132c35dd01e3e176200a706bb26fa006b20dd18f0000003e8a877fe3d5c16e624a481e051c921d527758c1fd653c58959b6755e5386194dcd0e4a3e3e0ad3d3865c27d6db4c39409cef77d0ea9a1f61d166a10d0e8b3000000701ea894abae3c0c60fe4cd425b94aa04c270890fbee1b4df027ae1f90f50f9060b40d80ef00000048d075ed0d3f549c0c88b9d8bd8dd50f858f9e78bba5316ae132653b6442e306690299fc3545d8547c98b4c9852a2900cd98ecedda52ff7f1a43e0af9601b0be3135cc7187a97e403d00380000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b7370000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b60200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481100000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f0000000000000000000000000000000000000000000000000000000000000699000011000000021c000000b02ec02ea42f51dad2f6052fa3b4e9330142baf4f2b82a4e71a276eb6a9cbedbec9cf84885f70165aad5f54b78a4ff2f382af4bfab3089d3c3c2bb8ce721547e16b45081d9746184ba14ddf39b236644c8004b6984470c68944ebace65589abce6f1e87f60c0c042099f172aaf970457da14daf4320de2b0ac0cf1f578cad7a98945c0692661cb40bfc20c4f283c6035222bcb16217e42a0d05326b87e51de0d7e53fb224855c0ad294ba7a4be5fb27be8000000b00ef6b6c34274e2f19ce899b8c964df63289c22637696ac7a8cc56a6b42ba3cbbf1c824dc0aa428f640b63272ac1736e29eb27ed21f15b2a984d97faf66339c1d3856586dd4abdabf5b4180ea97c6f4f17df01afc0a7d62a12a62938e967ae7ce6e8674b8b68eabd5c8f46ba7540481b608857aef4749a26264e0d638545fdd0af1771700b2345c89d043e9b6c5ad06da26619763a13c0584fb18fb996cbf6374fe6e26abcbb94d0ad3ae7991f9072231000000b00482b8de1e11a75b1055bbc1abcfb54455eea8b0de688e9728d2aa35124ffd15e4b8e994160cd92d5979d849eb4985f2bc80858a07629917dc7e51413294e294b0b910f458c3590c952984fa8d8441def9b3029a6d239a600945847430a3af0e4b864dbe88c3cf0aeb43cf030255aee71260394191d7cbcc623c316095779d2ebb4fd70ed3cf9359ed3f81aa3e42838a17278ac5864ed40cbea74aef2f8f5aff71c207fbe18c23e3b2b41a0e0f78665c0000021c000000b018c8e346b04e1becd686feb618d0a262501b76e7e43c203b54ed4c8bd3752ec2845d0b1c6dd7396059555e04706c9a9f8638c25c2710a458042418b9d0509349a1b87c142de6af99a9cd912dcb7d7b064245bb7099475f4d37296430ee77b2a6a13113c316d1f4472b1b15a0ea0e84cd0c3c7f146423774b6c081817bbf32232cf10f5c699202c781b405e6e9ad4abeb0d9173c90b06327be8287f92f685080b833a5427a030220cf81fe5dd7b764f9b000000b02b7f45342b6294920b24cd0baac622dc55268e9ee4cd83d764a5c80b0a67dbea7ea443108863ba48c2342f28d2cbee77d678e7918ca2988c9d75ab5ef7398a77055c4a84a6a8adfc74fc5606dc7336544416179f981556d14b37f3b790f9fb97fef1c03000ca72461b29ae9865e7475404f2ae0cffcfd231dc07d15faf92e5c2398b1b2392caadc406eae67428a0063f2f54f92245dcf0d0dc6cc41e8bf3ca26885061963d846666bf97e8e228268fe1000000b0042f425010425cf25874e962f86f2102368b4f068f78933c285700fad82829a52e6815ad2a32a1c6cda2afe0c29809b8521e8b4e556c425e3eaf2d90608438495fa051d7cfd823fa0e4bcb8546622c131f4819890eb895a5ff7f59d8446e8c1581d322c98642c52946f75bc76bd3c33b287385ceeea7beb28b30ffa22752ce55552a586fa6ba2dd32a5d01236f457fab1bb1dc8de281b725d0c3b763df1658d4d3a4d59f2458c3850fd08054e34abdd40000021c000000b029353cbfa916ff00593ce699fac6bd08f6047dcd344217913e65176ec61be173641a370798f5d87766216a159f6753726da6f3446ca9f01f59abf9c45137bd9e694066733df943f4a1782e4409988ccd747b98bba614d3afd50a0efe154d658380295d3dfb91b00a9daf405ced912fc903b736102c46592c6d65a4a21095cbd0bb9c80de5b538e0c283309d7b6fa70850a9fcbf4ae1e93781a9537349bf573dd30a75e34ca79af0bbd01f9119103eb1f000000b023e8e45aa2de0be0e3c8baeb1a0c9aae295c739ef27c160788905455a1ea2883130b036b74427a9a583f9fc5f37470b40e6b6e71aebc0effbbc5a1716071f5e04288a00e453a52785054bd61ecca54a3547f1dec1e9b9503e38572f933b210483148eb354cd93731476dae0ef38887e00ec5df0a63d3656ae2973dd23d2c6cb3bdb946f65503ae126c45c23dd3920eff04e6d3399c36e07c48165ff6111ef4300b40d5abebee5b7fe7aedc140f028cf6000000b00121c40926262cfebd878740d04f07adb0f52ac5b54c95355bd885e1b1c229ca1af32a39017fa7a12fda207970836a86f313199c4c77c4d807e014ba9f40fcf5069df2d29671bbb0ab72d1d3ab2cff7b59916ae44e35e392c3d501ad3fbe6f579fe686f8c83d191ee15d904c18073ef02f44aa01e34ae3bb23a7e2d6193969aca0591cd1e25db9f9ec41134258d7ea90034e7d7a9219a13a6a0b26ba2c61c6618e99381601bb18f712793a0d40d313070000021c000000b0025035417ddbe2434a6dde8dd8a6f49790641ebede128569bef04e7c19e94c4163d415191e01028a9e201f58399685d790c75005c0ae50ee4b438f0d426bf1fe8fb3d8abf49706511ae58c863bf27dd06935d18660cf089baab26d405ea56ea90a4768e5e70ecae2ace2bebff77601b726433aef336be68414207fe34eca4604a1367e77d884b73bd73abb5653b72cbb1b9876635bd2e3d191b860a2443ae2b07620ef52dcfae7ff974ff67d49405ebf000000b02d2a41e98e74aa120626eeb75641112ae0a9b97f750ce63e38e886ad17cd2c5ae0588d81ed03a4bb5c08efaf890f707f186c8abe26b9092883fb4f569da59b52e2742d044eac99e68e80e169a1884daf3be2df22dfb51bd2f8a4744b33494a2de5613217613474ce966c47dbdf12154517d18bfc28ca20e877a9d96ebf1cd49a7c991479c811d2efe30fb634183aeae920b403f984138c636e268612b770db21b139b44dbcd10bc904b88244b8233b7f000000b01cd715d0cada08faa1fd92530787f75f59edaf431cebebf4c9ac4dd1120fddb5fa3559c7853ff0fa5c5ee2fab34d87ee42ec93c63ff545df649d069085e38ba444a35f1b5b0d300104ba0945e9c5e9b2d5b7685cbb6afeee46bab01e55bd589758a34484b1ef428013b7380b1813040019b390ba48ea83f7d3039e228c28a3130b9d77ba72d41a70ec8a44b888ed745d1a595eccaa787307b6fb15dee85d7a6507ec6f5ef3032de5f4dd092698ee17200000021c000000b008657c1f30f4acb64d256b1a721fd3d2a05d83eb77e9a71f7bec381b0fdd5b737eac81903611e0e2992105b264207fe0db3e825961f08611e494d0657bcc87df8768d11b7941a2b2cdce650575b60cc96028ec0c2ae071208701e6010696d9be6cc7105a238b9a37a18b57ca1c4440d91550bbbda3a30070ae638a45678feb5c18f6f20fe0d05a6440c546194fa6ef3b205654a407f0b61649b6c643faf65a8876442b94f439bcb8789d6026ae1dfe2f000000b0192d38a8b6f9f20d140f5bbcd11125d2370c8c50644298d0a944a3f96c889b5c7fecc4b51ac84dabb91dd49ad2e27e830f601810ef1bc5b4e6b475ab79dd1b43e683cef297c11d8d5d23c47ea5cd02b4f4f3874fb29a8a9d06cb46ea24a3b99f996e6954fcbfee9cc5d6c5cd86cbf232052175cf43d33a59347eb6297a78ef1e3007e512bdf915ac9db35ed53d6bc41c0fc2f6a25699a6628c8d0d214a9ce9a00712a1bd487d5682a27afee7b5318ffb000000b0029d5bbd496c2c4bfcc1846f0a98de0d696ed9192c280663f090e416c3c84a8ddfc7b98f13e2801902ec1ab3f3ffd1362f016506a2c4cd403b21c9d458c20edc873cb6376546132c8632c66acb012e670c4d979db4a59de0b1989ac8279a78bb7536bb4d51745e2f7d8ca59c670bde291b91a0beef1440dd22446ea0c594a0a8eb26155cde99f6e3ffb6d015e0b9e8e60827ba7891f8e1982ed72ff261ee97a9d7a96fb47ccdf84ce7209a4895de65bb0000021c000000b00656666ed4869060e1f7413e8d696a6461cc60fa5335ae924aedcea3abb3fa1676da09bb754e076cc05be545fedca2052e96e36b927e9a9fbe2b662eab36a7f1d285b6db0addd6513a278f4615408fb087e68e60ae7b1a4b9d8ece77de4d13eae90662dc936ba46d42c92834c50a9f2402aa58aacbbcac999b674b0eefc9270a41c46f521dc69991e4c04665f6507e3227df9a23ee3d75f52645a0bcacea0ce70d473d5e6551deaf06a63e385d3f1891000000b002eddb3be28f1d1e0791ae2d4f9d5e85eedb7ef9d3a36ab54d6d83cdcd13d775851d67414d35e359de530d4bb7f021e3019d317f7e1237dd584299c31630a99652913b5916efc5b9d002fcf852441832e2c9f8fee528bf0d9df821858d65f0d63a5e91a140ba8df0421321efab5149ed1099c0f7bbd11de82872580d431bd9da7a1da64b2053794d3262d4aaa880142c23950a8cdb5eb478e76eed9e63e7635f0a1c73bad95bd5823651fbecbf80c57d000000b012880b9a805b4db923e8ae0272d72cb3a848ce1ca901cb7e2359ecee3befc6ff7aec8c7281753af736490a344b15c584b421f6e8dcdee392abc0b9f1884499df8d6a7ca5a49e5ace12923d41a84f13c29f2821ff657316a3391bc32c90f48c95ef60bb612e52e57fcea267ab0199f46e0fb37ef1120b214ad85c0cbb021fe80b708c8bface9543490a7ae95995afa82c26416399038e04ec3713a40f9dd6fe770894727911fd54816688af4f6f5960690000021c000000b01d13369ac3c2f2d2303e8dfd9a6c98b91306932bc36632516a9df29becd79a6849769e6ae2e39d514535d300565141f6e67516ec3ea1ef1de5d9b9c7c293d96e9bd8f1cef2c25cf470c89fb4fac473c92612ed330258e49809d04985c916d1cd9dbcc9f2677377e75c922179a946da650eccb45688777eb92ff1d875e7cf25ebbfd7596636ffba2ee6235df915d050b809dc2af0cc983b2ec907e82fa3203aba1665359bd4e87449530c82d8606e1777000000b00ea115bdeecd29c285f45e2952f7d74368f2afa9b081deed89079b54b59920defec0879b8d262e1cc58ec14b9f690921282210cac23841aa2907b47ee2784f61b4f1a60eb07a3f1abf40d003abb45593fd2ff1bfa73f2ed51af69e88f5aee168b234aa8daa98879d7b7ff8a8671fb694008fd1560a5551b934a9c7ba20cccc7a9c1224804972c0ece44696c03e10f8af1ac3cafb91adc41bc8d216beba5dff6a37e0432bdbf16bfa8b284b08e2a491c2000000b025c6fd6bfbfaf9d93161e56334c4e290ff385380a8762e5e118e6b8cab3154b0a82269517737242a3c59f9a67892bcf8ee93cc4700d927bd9fe33d4d7422cd22975e6434f40e782cc1d3b7fe11477f2ec86ce5ee1a6f5b63b0bad4a31d4f4623987c4583a1cc99d9631b5cbd9828423b28a4d7fbd985d7aa057c6efca42bcefe8668c9dd45d85b01ed95f5d6d87131e51f6d33a87607e33793df425d682cbacc38b0f4bfa931d37a13b0cb37d034f17c0000021c000000b015cd4e11907d16f2d518dcccdbdba386571af314243e8337fb69644220b3aaa819c4350fc66c4d5e4980bdfe85c95859d024e30a25ee51e8ad00cf6f88e749321b168bc6c9e6678e6ca9a89cc8510d23228d163daa93913cba2007b6a9b66dcc4afa04d44dba31017f522a0e8543824f03091f1b1d6d2ee7804a365d44b8d614429fab080fb22103c300ff1f4a233d7809ad2e5e4a2090bdbacd3ae642d8e799bf563e844d48ca63c1d134638867b591000000b01e7878a7390601a74a771759aa5d0e817b4a1d939461df7ebc8d9ccacf0981af7a53bdb1cb4547bdf3b3c81fecac54cf680a364f9b740c6cfd1751eb48bd8a79097c7a4bda02c8f1c6704b5fc307863734ef21af640a00bbd3f24b8b2b2524fd3a3364036f311aebf55d1f00c75de7f714b9746837548efa1a05e3822ab033dbf434ffc1c3c76a6dc323e4b5947f712625de5a095b10a9685967636208805bc2d6149226c6c027e59eead853ea6a7125000000b00d2e63c8756522a71d4cd86e234f23aa3434bc8b6175ce86978851da5f81cdbecc35e26ca7bcaddb40b61ab4fdd60ef10393088fef1aa03eedca5410ca3313cfd54d0b525dcda366aeca350754ac9a2a9ed6530a5f63198c9442429a967fa7e867776fa73029293ea999fa0e52f2496c0df599802c773eb68d8bb4ea435f09dc6ecd9a22a6e2cdc1d3d2c5e436325d651244745acc2d3b8e1fa9e0d06830da4d60573b59e143648f4328422971a78e9200000ec4000001cd000000f11f1e4cb44ce3c5a295aeb3bb81f2ecfcfe08e0434d3efe5d4ebc11eb8e0ec7cf3f6d8557000000c90fb9e569359665e4b5642e37d011ac3b0e57528cb118a488789468089943d1722e55bf3433e45a870f1e19003b2349a321101ffd3f79434f39a97dd63548e95a73c9335b634d72da38b8bf7297da57835bdc30dc5205f38d8d0cdd516041a901472348790f63632d44e195378fc4dc279bcd74cce55e54d6718837f1b4625c8bc2373023e2219a8417434607b85f1cc11435c4d16805a690c8233517add8663916f588aaa7c25310538ed8c3f8129b036464a2cbcd896521cfa57ad0baf7c5d9c40092539815595bff000000d42e54db811f97c47c9bfa8b851a92fb873d996a698147fc6fac3c8d903cca3428094d0202000000acd14868ed75057d1e18ed7707fa2d796e71d4af67cd649af82a5098a8a9ada57d13fb2d74b67ee3409b0ad6986e9e56d301463e5cc3827c2b1b5b4c55298a26a0ffc904072115649c1e417894884fa45af4d63935d1d7aa0044555d408f58b870274e245ac139fd89637f7870513d2bcf4bd17a254ad1ab49fed4764180f4080112274397e01ec6b99263ac14731a4968737f31ec04322ef61aeca29c50d7ec8487606fb7c6e5a62df99c99d80000016b000000492711a6350ffadff0f1ec271c5588c6b0e1d8f6a6a52b5c748af5d7c8e6c33607cb2650eb00000021fb9bf5a0c48f6856ad06a2eca1081b6cc0b6d830c4858030d1224db7da89214fed0000011a003eac2ac50ca3e6c21020b285db27dc68b7eeb224367abaa5f8994fc34c495211b973c2000000f259ffd80824b581e41c03c520ec52b4a6e71fbe33377e91177bb38e50c38d0edbdbe454cfa8efdd4b84cf52ffad54260385c8afcd043dad587b0a9c5bbd5e8a8a0c1ce52b813e2acb5474c3a359dd80980da10a24bad81c0664c4149e35f2519fd585c3e94bf09c5d5aaa3671a0483de5a533c2241370872f75a579a7cb98a497f0d2ad772286162c7932bea4bc96641c3b5c6ef7589dcb6769708bea6626fcf1a082dd0ff973abcbdf1a7de46833a4abf16121659454874231cd5922d235d1bdfccb782d0955f4eea241399e0acbca31c7c0ef22083cd7588c291f6c468ea0d9917f35a3063d90b82153a51f61814e96831e00000178000000cf2848231e219ef143830c656997a4b0f08027f93aa8bc6964e0ed9edde096a72298de13ac000000a7b9966bd978b01d457d12e18c65703b64ce56ee7e894f4c1aa477edb9942a99878426cbf0dc0f7f8437c79e8f11020ea8b797d949e11233a509114bbc02dadfc070b8741a82f2222fc77badaa34f59114f5da0f5d38f4e5aec86b5b4f504ec526eb78e15782e5fef90661d260ea3ebaf30f445cf78505d1cb4d01cef65a4c66379628cbfacc42dba329a7a24ba2d1f89dc074ec45f5b57cb328fd2847b06e4814454f4d3be95443000000a12cf355010bb3056a19f075bc14fcc2429bbb522e32e81b51ee3104890deb18d5bf08d31100000079d5683d9f124e6bbd1060092da07fc02d00598cb653c4a9dea17ce94cd8fa9b67b9021f09d099bc2659d1dcc84b985333a2a7e9b820f14dbac06ca7c64115b7431c018cb533a2f7f3d2df0c477d06a313b22a12a801b8ed0a9411ac7d3189fdd38a082cbb78750b6317d69a2deffaa03335aca7e0bcc27b1a550000011c000000350f4db79e79a89a35e31a77e9f11ac226bc969d5fbf519f46e3d108ae5fb394f05a7472160000000d6c326ab891c5245bc6d7a0a632000000df06195db4de57a0e6627f87aeb96e5444e933a5e0a9218b7447314f3f3e47886e4b457be1000000b7463704ec461e9cccea376a3b1f2876ad03a3db28af775f5c16981211dde39648fb77604ffb7be0e5c44c1a2422ccd171cfbdb0111192bdb0d0ecc6bbefe34fa4ee8da3606f4334a478b2cd46725417f8933ef64fe4e1b86797c7894be4d1fa728be5e4d2831bd256143d9c30871005427d3e049d39b3b05c0259165dfa139aa9642e41c19861781d604b9f8148d547c07456509957ce76ade8f65230d2769ec2c6fa4784f005fc590c7ca0166db036b3856620d4d7cc32000000aa0000004a0980b066e6bcc35da993cdf9783782bf82d316674ed454e93636f13a1ad573ec2bc13fe8000000223c8ef96b8fee580cfadf3ea294b49dadd0e059aeae36b2f9eec8503fec484caca88a00000058157e63ea4a6535905c9422f4a023eb8790bebd97022d8894e7e549a8d433c43c95af871c00000030d0d1ef5f54b60e87cbf9b2849507a1b488a8b5be72538f9f0ae1c46683dbbba78bdec178d4c2c971a487ac96d0addac3000000f20000005a0eacc0b9c5f5c6128e3c09eb777a9e10454ee147db3306aa52d96066869711479d7b9aba000000326987f90203bfc2459e988f78a848914adf021e8d0f447e82198420765bf9534adea73619c945d159f831f3ac3821e81d319d000000902359c4e67b002de211823e4762a3e3515afe4e321bd6ba84754b8582e7b0c2f69ea21da0000000687dd260b261d0ee256cb010df598a012b130da0ec5dbc29c162a4d06b1cdbda22ef31f54859ca3f601dd35b6aa848bc02aaea11dea4eb2adc7d40d2dfc354fe56bce3245db354c650f98615576ec706ea069056b43b0ef9966df03c534db0cc1b98d589b05ac9617e000001220000005010e3df4912ec9de327519575e5bcfda9c7096fff2d784887797a7995ec4e1cdd702e1e9d000000281ff56b2363c47883803c34201c9f8260c6ab7297865fa57b9eceef512fd1f492a5e83df31c369fd6000000ca18a803f5d144064a6562e429fa246a80a408d763f0796ec80be7938ceea26521bc2bfa27000000a2b5b2d2b85c421edca61038db11142e86d1e80881926ca7a288e98390512a52ee9306d840ce134d5bfd60f532d366410ba4b2c8469fc7831e0f4b2ae6606f7cdba3a58cd147c279040311dc5e4110943f732ae858103b4d6f375cae923bd9759a7b1c3a993ccd9c8d1672c75678082bec90642b8f7bfed87aa6c133967369217887c9007c59839264c5966acf31d22e5359368b35b5ae338c0ad0b117452411684f2e0000014000000061205bcbf0308ce826654aabee9f5e15d34e7bb4261379e5e4e0ad27422390f9c705cf6113000000396211bec995a1e071281d325624d617841709bb4040960d00dd93efbb645b922bcfb24c82174465d87cc08db1189ab5f976d6b2098e8d78061b000000d724665dc8b2e3cc75bfbd637754f16a14ebf1a3ee0dc9b1c583bd03a4daa6c3b7ed1bf9a7000000afc690e0a329a46768e4a5ecc76abfe831f078fde4b4e8245573e18362f5d935cc3f386c8a0c1b3e62115fc43743b1138d4e042765968f1ac566a87fc4690f1e6e70cff3ba37bb8a56e3510d49c47e4a021a204581be19f29e20da2d320343903eb5e871a9ab2342c582826b7f0dcd4f309d27f61fd6c54518f594ee16edd27f4212ccaeec07ac666fec95b53a9bd66f8744caeddfe6ef0a65f8fd853d1bef4b3f61c363159766527e997217dc8434b000000171000001261748d33fe7db320a94371d9160200ee8bd3939d0516dea6ce135e5ca5043a85a581296ec000000fe44d89abd8f5852944eb9ba3188f20ab23529eb2cee022dd4eec92f32097e6524b9b7b73ab4114df0cd906a1f3cd78cfbc90cd3075eda863b426977ddebf2fa1f1e307072b9ab33e16e9832db5d8b96f7d4a178b6f611228f5a844e8104510e00fb36a904f038fe38f22cf367ea33878628cce81805fab3b617c421e686115e689855b2d2504706ae550c98fdbb4ec6521c7b07aa1dc6adbfaa8ef4b27d30862efbfed882fa4c668fbc7fa28b104d5cebade4a431d54e4792cfa5443c968df9fa1f91ecd43a1668dd660891d6d4fd92864f46a7d3cc91584bb80981ecab2f681620259e0f6bdb587485ed643f8950a6b95558f0317957b45db27f5e3aa8e50000004326850d80ea2519f75c85b5f2df28d035fb3639d9dbe1229635d17ba189f351af429afc180000001b117c2b5f847dd7415e047f70640e45c428e5ddae39df26aa8d0c130000020d000001070d1fcd706bb59ae7f22ebcebadd6b978c39db053ad3857e67b122993e34ec92bb4e4ae6e000000dfe3055a4f40915267a520a04b9847d69b6b66db7b6aff17785f98acb74253c61a8c3b2398b056d21473e5dba72d3beb00efbbecc4f9a317d2b9e766d9e39d660f3e8408493127d42f4d8216927887162f339f8814165c99636bc0213e6dc7e201675848d1b80cd61b555563b8eb978e82c4fcea20f1dcc68f6442547eafa90861a52eaf7bc4f863cba3bdb1e53087ccfd5c5d907b4a62bd2773efe6400e2d333dd07e9885fc2b2da85274dab26444888d212ef5da75d02841d511eb6100e2415018fa8a957616e3c2b0a5bb81126d96a069e5279cbacb8eecd92de3f171bb65000000fe2281b559157b634f86a9370407fa0436b9327f8335fd45f77145cf4f293ccb6d7330636e000000d66e6f056ab0f4186488eb1e2d97ba6b6bf508cc804dc25d0df3b5b8f6f6a5e3301582762500898d03a0333dab7b1d435c1df223ca4c50fa826ac7b0729c02e2c69ffcd86b34f9c8b54f13fcf8d4998c6f361b2347a472c86799d714fbb5a667f68a57c605f9b818b55abcc1c5b1cc6f6a8f5079f4f04e684c9127799dbb28411aaa4d59a3e214f846a38c9535b84fefa09a469d15b8f75ec0d5e169a5a3a9a78349705344efb12e9bebc37c2e6ae62b341d287ec083cc7c68e17fa382eb28254fd0ee699906dca7c2af031cd2ec0510f9c795a261b58800000150000000362258be01cac4645a478876b803cfcd23adf1b313fec6419edfe928497a1a40c49fe6dc7c0000000edc8dcc7b2ab172d3c8deb831f921000001120d217d36fe82783177ef4216e9f3fe19328d5339e2b12a41978aadffc1da2c3edd212fe2000000ea0fceb108461ae36b0dca69adffea039677c9ced33b9a44245a35097749d41260039104769bffa426cba67ffd43ddc5e05bbc7469925aefaa882aa482521e69d2919a0e0d82f953ad4152499dd93dceaf3625c0002b00f0af4449e76d0a3296c106f25b9b407213776f4ff4d4e858f2149f3157b86707eb1e30a0e2d2fdaab161933b37fa4002e58cd2a0101efb921fe914414f43a7e4a1770857149ba74596e1ac4f35e4ce6597c8cedda497e69664426d2c11770ab6e964b63eeaed522c0432241b56a9b76ff28e296a9554788f7342476fb3035053191dcb667ca0d7b1258a9402a746b3f5282f22fd003800000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f73700000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f60200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c11000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d9000011000000021c000000b027063263cf2342601e82e724d96a1ad34d8d4d90fff0ecfd6468b613504a4c7b59627716fa2d2d353293be214740051acd51c5d453e948bf3014a3f6b651b222487f12d956f95e23effaac68984b3fc5e156948934b2af168ef38f1adf116d320346e7d9c425f265cd641d5409f93f141699e2846edc175d0981200f5feebc7dab0b9328eaa69e0861ff49c5433c978b1695404fbfcd5cc9183aaa7c5466e7d48419076c25b42bec8bcfbf30386e857e000000b0296493df503cb3ced00b857033ce2b6102403cda24675fb259884c28c20dd2d6a2e23cd8d574bd11d742a8d2e9b927c2442f84ce4d5ebf1a389f74ee7c7442a17383b6636625b96e3ec5b8824e74b1ae7a482ce1901b9ec73c98949a91c37c7f4ff66330817d5fc0ba223b000e8d3c952de01bac531627b31ec681eee0d24fa54cda7c175b21e0eeba6d9c162fa10c7c0eaca379f5ce7483b787f1cb04a840ac2640c2917fa09bd767059f43c425f114000000b0152ecfd161321b75acd63a9c97acca95f7ae46b2ffe3ca3d527687863262fa6f6ab2437f42d9ba0e3d18a6c2c7a2a4dcf9e01a37ed1ba515a3596646ca2bc1a5fc822c9813b8ff13fea41b2b85266dcaf80bbbedaf91b842f280604c595200b28881807b49145af89ce4f395088d8e6c258b62b1b30ea4f5d0c0b5245a3b2b089627b92c7ad37fe4a5a0abf085245f9e237d47b172d237abb4cbc4028e3883045f9201fe94f58d441dd971ccd86ea08d0000021c000000b011fe0fef685d5dd32102fad58a94bdadf92f4101a7a3d246833c2dfa698d7555cbe3c7ca919a681125077a33e3482a26ada4575fa12b1e0306e39a8ba675b3d1c91de3d116ffea0244ccd88ffcb4fa641dce912b15287924bab2c20e1702684f1aa2c8376339b3fe42519f0edd1daa0411374fe882cdc9c86243946865a30c90eac54782800d4fe8e6d6c15df4518004249a4a89d6e9374a4afef2c86fac960d2edba16acf6bd5f1c09f6198089d8f7c000000b0036bf95c32c03827b9bba421b4720a50943aa8f31257d6c85e843e5e1f3f1879f6a6298baaa4e659b4869f3116f75249bc5bf3309de40d6c7e34fd36896673d4082b9c1538e5d614ec250993f22e7f304b67d18a8504ec610ff319aa8c67992d495c53f92e8b58bab578301f43c5742913faf63ff523a6f6ce2b75e7f43b5d5eab2c227c7599b337bba717397676ea470b8407fcab65f00bdf54ee7a7f9a3fe8829413ea4b7990f8c2bca6e4336a2435000000b00484154f0c9c3d072687f7539fb2146c9f1b8eee47ca911fa4c19baa19dd3531511151c706eeb1a5bc1cfe4b6420ea424177d38203e3257666f51be17127537a9211d9edcb5df67745e6a09d1fc94967c4c2d763d9dc43c1d7471cef9cb70e746337dc126d37118b819347daa900a1910afd86b3e32e8f0d73a08ecb973f392895f0bae26352692971e04c966214f49802444514f4c6ab2da371dca960810a812f6d2de9ed9133cb62cf3718e505e40e0000021c000000b02b7bc88ae6c6e843e432a076bc4687811081e9ec48d125541f94e807c125dc0546a1d2c6c6cc040cc1453fb86181bc454ded8f4596fdd06c6d24fa6027354dfe782607eff9f4d52e7598690cd649a7a1dc701772d6d017a2769e10907a48ed749d74877649db8c02df0df26baf44ed470998d963c32ced8b03a32d5bae9120541040eb2dcfce370ab1141f8fa020789a1b6779d06424ecc5f3d731201b0f124de974c9984a3a42dab7297aa89900bf8e000000b014d4428f26f0ba74d35c35429bf55a3013e88a209e512a665725c7722f1a8f65716d13123e1afaaf98167457726650028c2688bb5706cd2ad5d792b4bc1a305d691548e29beb6b1194e4699dfdc9eee298a3c9d8a358fe42d4c55762ba17b126580c5d3e02eef91715e0e0b03649e4180cb48fdaf1a1de3b4d294d4b3ef56d5783d9f6bfe9cb760ae65c4e2e8af1701013071af8b6a02eb948df3beb3d4cfcab29b1684e34ff7ea90a8c216ad6feaa7f000000b01442cbd0f96445f7f4dc4bb59481d602ec4e25f87965c9cd283480e414b888115f09f2111192c8e5202247f5ba573b105c565b3b9fbf4657c728d152c42826c085236321a9e0d7385abc275fc205cc507e702f215c0af7642a80016377c4f177cb403bae0fcb984df0eacc3225c81c9f2b136ff95c6a442999518a7d440bdd4edb9f47fc9b21a96ccac102a35eb6382617d4e56247b3e2294f65e7b3dc4d0dc848ebe8e1a7156f18ebe4d7932ef7858d0000021c000000b00223b3973fbffbf32674048927abdb5e13e6928a823dd80964ead46fd48ab38e1d29feb4d0e03f1263a081dfe2305e2e49b2ae5cc89fb801d1ae5013768078b426955b41b8aa4af97f9b60c2352ed1af6d7123f346cd4c11f20ec482ad766328c67f3eaffa68cda42dc33e70f5d098e6088b59ee1ed1c5c9cca1d76c24cb9e4cc84f8e177d6edd097e7c1c935fbcaa1b0018cc0c71ec7021111b3d8d2155a875441bd4b146ffcaf044a497938507e0d5000000b01fc5a0a647d1919df0e237ba028c3cd53b00c3c2d6245745fffc2b8afaf9f3c8da9592ae5a28da350211550f7fdc2845778e21e7139c68e498e82baaa632fed0a215b4e5c56f1ea649fb5a4ab6dbe99503b3ed8ccf4a839af76e4b339984f409884f94be7dd7943046479c6151e74c2e0a362ca8b9e9919946b1c5b6ab413b1b67db1cdc35f03f66af5a50196f2bfbf523903e2b6e729e1176f011c3869cd03df36685662905b63c9248bc75a270406d000000b00b20f2ab1053903ced35a10ed546262b7630b5dbe72a7bb415d765bbdf0b9378ba75d9933d940f0b72369668e4b4820a1d14ae9637d8be9eb21c770ed4c133e06ae2494c67d772b8b93c30e9f10167df65cb5a895523df3ac28070ec307bac750aeb42cc9500a7312800eb42e7c5b42f27dc9af1e0ee1544c11025735dd481da06c8161afc6da358dfd106a4f900ede31f45fe1e727cd96997540e7fdc70ec7a7cb9380cb114f0e95cade63fee5900630000021c000000b00e7d7df02fab704c08bf7729d7ede63bba210ed974b3b6d97d5612f1d6e73c6a81e1d1f96f047440e5c0a96d3ffcd1ad5a012561a2d63a4021b5b1cd6b4b849258a7a2f5afd87172ba3c1da46f922df9df0646c9f5e3413ce6330544d8a2cf189223cf8f965b4edfec38e66c8c053045078cf1d901069806d3dcc47094f0b0170e33ff31f65e3a0fc3fa3cf10ce72ec726e53e99101d8380d4a9f74f0b733ffec7dda5c4bb89c0f94388d9c9b6b70c60000000b02fdd80a86bfd417f1436eec4518d13c4daabb82b08375ff7ada9e563ecb9cad757a8e24e4c60d9a874fdd214323549460490941906cb5468e818ee877ba41f1cfe417def026ae3ccc843ca9364f6be03e74b0e401106248117cec9f3e66fc6e8f33dfc8898d246d56b2451d4795b380e0a6fe28452de9df1d608823d2881d3a671fbe404d8e0b506239731456c4253670a03a47cc11c4b93d1c75cb3b7df8dcb6f124e34ffcb6627656a37b293339c0a000000b0291b6932905ecaca2b63166d661f2301ece68349882ea259e753d40f86613f9a4db0c9736daeec4aa6a6c956c2107f192ef3bdc395593bc706dcb5ea203ad1165660bfac68e2d940cca9cb05e376d1ad0683428b51e239729feaf37b388876d88d72e32f5c70a784b1ab06edbb148da101b4cd2e2c6d8321a42c93b507b349d4aeea4548df23c64468dee6c8d3d27c831b895b072e5569b17a076e4393facc80ba0dc7e93fa9e132fff27fb8703055bc0000021c000000b00d2b301db63ab2d8c79e9dea0e09ca07ed5b4f5adbfda96cf0acf46acec0d0223259af3a893589128bb467bccac6f8e127d2169321d63428b6b1e669bbb8248777bf851acfd500b0db7cddd6280ecab29c97174d40fb8af451a42ed9e32342e5912e544f5a5cfd53c5ef1e9ae3a79f44117a2967fadab4ed3b2fa2e52b7bb8a1c0d804660574358842cf6acf5ad312800cad97ede480773240aade96a268227ada54e8ca67eae6f17a16b0eddc5c5e7b000000b02ff6941cc45526d1a9fd363320186cafe84dbfd078668288f7a842273b2ef7c5e7b0e5ad08d77bec78c738f6360ba239e0658103832e599fa4b5db9160f3e01e76cbcc1a962969cb5201b000289794d95b6ef8d81cc9d9a7a622bda5106079a7e29a280183e2d5b942ede405f0bfcfe61ef23a9437b721f30a113f2560554a05e71171e393dfe1a0c45a43bb4bdb3101115fc94a6bea74a2b73760a433698a388c7570d45f6e4b7d655663ba17bd234c000000b01e7527d7aae1c70025034851f8f3017491ced353f41e46d4b7f7e8fb5ec2005854bdf5801a1a9de8f5e930d0e6ad5a6de1d43837c5ca0a5acd6196db378ec0f5b15c78bf9f0a8200cd1c0dcc9404f8b010ee148c742cf60548cf9e6a61510a44252fa1bf9cf4a4324ce47b5034c55b1a0566087be581c880b4e72901869e8281a71c74e631edc20e6b2c8524eefa9a1023bf8abfdba671b8014193efc0673666e56773e90fd73701e046d2e91ccc01290000021c000000b001ba173001d3217cc3a701c60360e49522da7e78b3f0d801fa44330d509d10af3ad3f6e80005af9986a129957e54a4f9cfbd39624315a06077f16ef1814e77d7b02f1abf080313bbdfcf50eb848b6cd5ad70414c64d70e3096199e64b6b8196245bdf3e71fe170c6e4e77a822e1fc7911b6ea7c08394373c8579e4a258fc93e9744bb1805884f7fad2b8560035e189121b68c1f1d1eaf40aa0786f6d6d256342c8ae4c1c22805d564045fc730d41f57d000000b0185176c301afb9a30854cfb26a82f3023c90fa37f8fdf752ae846da9884967d87f8f6de26c94270afc37ffe3bcd71d91c2b1702a83c094781d19233386db1068f742136fc75bc5e1b90b8422bb61e2137f20e83fd13de26460c5a6a7cdb9506f38518191afa30ffa56a8321e3ffdba072440f57ebd4d21714716039eee15666c2a911e28c6f47d7d76d34e72042d1dec0710dabef44e4ccc1feddce59b78ae28df0321a8aefdbadcc53c64b96d327fc9000000b0283df222c46fedb2bbd7d6cb19e16c280bb1fdcb7d44fd2d144e8d9a6c766797f601384e6ea44d5e1493744dd4733a25eec7ab5cfe0ea704a39e6cfb8a1b60ca470964c2f11132f0dc3096e39bc7f761d0ebe8b655cd05fc4f66b2d239c5346d6c9692be352bd7660c1f762d7825eec7273e8c08b69ca42ef5d9cfb4956bdc713a62e7b43d35640d7eb148dd7a8d4fb7247a83ac2ab60c3c5cf585869d3953191bd651a08ba1a164f692cce60fed34e80000021c000000b0185ee2a5bb950d25f2f62767f117abcc75026fdb401e813e05cef821f1689e896ec97decf3cf3b712a9e07f0e4032415ebec404b9139c1562581c4399bca227e1ce42d9a0070c24db22abe2a8f4203a1ee7a5da9a27324b3f8276b77fed55cf6b93cebca207bc0ca1c6b3a66107fa25609507ef0083374361eb4d4e193c1f9bdf1a5438e3eca43b3e73f81d78060231b27c826f2ee5cf5bfe347d8fb1515248d0df10423eb087c6d5f214425893e72eb000000b0292a046c365359d3c8ed553915f2e5afa2f18f498db97fcb58e48d1c74e040958806648918df6ce2edef3f387ebc16a95e944e7606001a0ddb6783f5a46f4dcbcaabb1713d5d5ad8f4c43072094dda6eac51a1fbdb39c76819b8f04058d08529f14c85c860ab3d16d2e854c1a30bcbb91a9bc44a657686dcb79711fb87e58c3b7f14243379688212e94d30ac474dfe8a10b0d9ab1b6589894777aa0952981f119367dbcc4b33063f154f426f51b244c9000000b0163b3c854fbad40af1f898c2017151442214f04f4a312ef6f934b944de9a13ed72a6d1df49e33a693eff7da002382a3381d48222989115c20b455218fbe3bbbe1fd0c263a5b1dbfbf4f76c5a39af6185d9390bf441b4babca1b60775187006f34146dacebe194e62403bd86089f186232d9744909acd3122f7b802e21c18923932524a25131708928063310d6c950bac09dbcd15e1498ae6868d35e1749b5becce085d4492dc7e171c9eaeb49124f37b00000cfe00000135000000fe261626c40da0fcc7de0a556333d7e421af1cf660d2bb9961ba3d87d89d1922bce9fce0f8000000d651dcd802e9cf1abc72f72d9e717bfe76bebd4b4b182c01c87281981a9557d1cd0bb6669c4135b70972bcb280edb30b19c980b99640c3e6539a30ce8cc864bc1e0aed2021f0c6fcc70c94d78e1f0579ef40039e4320b32c1bd6cf9902a7b6e38fb489900c3c63710558b49c2aaa614dc447bbeab1131628e63fab0311580baaeb744edac855882ad531ede7e6763128b24dc22bfe499ae093a86b76fc184056fd7ddd5b4457136b0771a1b75b0948f02d523d7e4c36aeff7b0122c06ec5255d5126ac65918c2c6add04cb54f7e28ed9a92da9f853f6fc0000002f1ff3ce2f40ab0cb555bcd2a9810554d7f63f0439f64332e6ed676d3fc67326bc38bab17500000007d098fa2c413033000001c3000000f3298b85f3e40f82288d8048121beeeb24cd3149f173159148b72aca14f9fdc733bbebd580000000cb283c2a7ccd484aefda8be7c74684c65e279b821757a55adf5730643fc46e8f3d5c9d95fbac22754b9a267e928ae92ce8214603cbcd772784fd8fcc8c3bb15b6bfd2eeaf6d891f39d75783b8d86dd1173df99ebdf3bebe21f6f6c58267bff3288f6469134047eeb176e7de404dacbe12710d86e4079cc838d449366abd828f12b568cc2a36449e300311acff8a24a6ff3c091b4713843adbae14aa3db0ea54c810295d73176c5c513ba2176cd2468973effd15b8fe267d582ebb67ea509fdc595849cf452c27dd481471ed2000000c817d7efb680aa9fe37e02e6cce2bbd6c959744e730510c37d741d1b444ddcc7fcee536814000000a013db7407962f577502353e11a4356168181687a52b5060e6b413c5d3ec0287ca55994696c944bb0cadfe78ff3dd3e7966114259297db801514f558a486d219aad1bceb87302918ed54cb3d0ec006b1de16b36f5441b69f37443f6804e531aead7c7c45dfbab7f6753bb31258cdd51e41c8eb506301733cd670b87249d77b4d1d12f9212186485935ba59d9fbedb7aa9d81111e5635964c949b765ae8cff86622000000ab0000006f1abe1c01d58eeff7e1dad330d1705fa7f6f94a22f4401dd3d421dd755544265321753b9200000047c02354b42fefe435530148d5f2f46ba89597d9edfd56c02588dc1a9c963279d8d28d3159eb3ade5ea6534345bc62b751e28090918df8e9d79a188290ceef7c6c4b4e41f53d399a000000340db348b28002c1ee79b6213c9562637328dbbb78b12b406cc59fc108e42adf1b2d0c79ae0000000cbcf7e2968865f6abb97ce3e6000000d1000000341941f94fd2ede5155deac2ab9e59d7dfb32c08216c8f5c1b3b13dc4e125f3a051c1361af0000000c84f2c41f371250f0b85e643700000095019d7c72bd24da15dda7604dc5fa4fbf4bcf5e355040401f527055a8e0496a2bd4a951890000006de2b8fd8b66de4a79f672ee2c1953df5831e4de25436ece9e170f97de5b60db4b5b027e2cd4afba418ba3b3beb322f4838ff00f6a1234229b3afa3bd7edbb33996d1d8f0775ae033a734a17826692e208d94474e9c1ce5eaa2a172eb579d8f2495c4e2b1bea0f867d301ae77e9a00000181000000d12f1606fb5c3022c7271007eae646aec104997831d345f363bb6dc5fb9bd27b712c6f4282000000a950205cbc4ec0f6f1efc3c1b0616e19e221dc6829e626df311147862767ce4699ddc742a2913744c612df1d7944333ecfa6bbd4a923b0a990bb1540c25b78ee623070279faefcd561675eff2d959eb7c4933c7366c4c8664825db3b3234ae38ebb77235f73a499e74f121c3a889eeed0a8cc2f8f9c40384d3510eef5ca49dd772241e2462983b79c387efdce5215e10d77b3442b3060c7652fbbdbef6d332afc675920cf7546e67571d000000a804daa19ba89138f22f681b3764e966d9ad7e8c8afee0c96537573db2c897e37c0485ec0800000080626194e242fd6180868ba081f309fa660663428df53b7e5aa9a86769e7d4988d417fa1d8cee33c3a14a27102eb4f6be1a02c781ca8b07a15add53f579f2a131b47bd0a13d480ae839d358ed8824c8200c94355d62a45dee1a4ea80414ed2e7b0dceb9de7c9cda45c347b35f07a59eec7879bcae5dcb30e91f46a7f6d65d8d5b20000012b000000d112a814c40df89bc192a7ca19b96cec89efecebc8568a316a976c0e468ff2161bf38f6d69000000a96f1f1ca8363da1c79392f6cf1543729e46aad1378399f49902086a7b3a05c8ac93cc202220c1ec48470d0a93099d9565aa665a034d992f1996ca8ea944d5c75fdc48c6267a5efd55fa6b71219281f0a86de4a048a264ed5d9f874778b4094250fffb868d1574db8a88fc57e58844d081a645946c693413cd991cbff82da18533991a6128237ed8f65d98d58a5892a32341baf5fe53a7b0fbace4ff4e6c39679803a3a6afb141207468000000521ea8de86b4752a173d18a6232cf3fb88a26f204022a7fbd2e284257b0a1f8dfb645d3ce20000002aec20e273b6524b3e80f8cd691c9c6b87c00544c67e5b26d49d3ffb6ce623b5c2505aad01daabe4959d370000011a000000d70f71f1e61d353eaa1ef28be70c8c7b722343a475b0d411e4b9a3eb2060fae31b2c2aaec6000000afff28bc19e20f4456a44c15b9d5a445accd11a90985f68a76303a48c3b067a13869d63eb8888b1f2b5b361c8d7a808f44fecc4f9103f7765f52ce8d612a581295f6d616ddca59833b9cdda6e4a98ebfc2caf4e016bb1588619b9a46f71e0b47a23c2b933d0c4cd5dee199a820d89dedca987ef0170dc342609fe107806d13b9886723223454c7028b4c101764197868fe6961b1d982c95471881cca085a815b77c9750382d4d4fbdc02dc0ae9c1f21f0000003b00ad39421892d8e759cfba4ba94b09b2df6e0dfeeccd192aab87e8f71d2c3f034ed1c5d4000000136614e47d5c150e84e6ec7cac3d58b4cb75191a000000f20000003000c3f6e4dc23dece4ce60e7d0baa7d0a0693ba7aefeb5b91538e981ae63d747bb2882b6200000008b3c704935df5e9bf000000ba2e7b38a2c2e629f1abe2cb6c68d951af8a2e21d02128e547f763f8f45e5572916457f86e00000092d03aa77f826c06fa980ca377fc660602785c12eaaf7b0b142c02de4920561b3f52d5234a8a4d2caa0bb1111f828cdccffdfd37e2cb246465715ac02fe9ad74ec5e19210434b555ce3416853e9895bee733ea50de22e561704a94122ee3d791166c2616e35840e63411e033d979f63b183721f33a313c11b4b2da251cd8f1835bb3e492259301c31e3dd32451cf067b177c3600000159000000df15d284e237d5962f4275d18275d1ac2b722c5f0895e8225799e885cb1cba58c34316390b000000b7841f8ffb6d34fa8598462caebe047661863bdff91199010ca962c63bf84c9b5eff179f09c7745ac2c488b6b787190eef308a9d74964a77a41fa72237de2595c36c3c15ccbdc48748a166366a905686a7559d92eb6745d0a839a0a1f6372c95d51c149a5cd8d7f224e46b3731c9ec7ab1b908d2a56bb0bcda2a890ea4b660e883835d1bad093c41caaa0181bc44ae969ed7e68cc9ce2e7b9938bdd88d7e51ddfbbabb91e3946ca2599b61ee5fba7341a1fb3e7d0ec91896000000721f81ed0c2fa98cd771b767cc5f0a0a8e9019f3a5f585e9e7e3d61fa88a11c2d947c4270b0000004a573c26bf1b399240280e19bebbdf9bc51511e996436251042a86366625b3f778182d51418e7d65d54929ded9b3b888d844122d8bfe56cfd46db1e0814204fd566e4e39f7f2873836b058000000b30000007f049b2c693b85ddec31c76f8441e4793235253051bbbbc09d3fda60aa25371276b999b01d00000057c2327cf395d57cf57da9b6ccb4c909536107d76f334d63f664d4d74983d04e67cf9456622b7c9791d40112cd729c0f1351b5d7ab5025f751f3d126f311c65be4bef2ff881d04e7c5ba1dc95068661bcb2f1b0c20ee0f5e0000002c1b161ac1fe0385b6afa0bc4d32de75320de2dfcf8ccdaad394666547b6239e570223297700000004aeb1284d0000019a000000a3085507b45a95781b13c26e3ac09d76a101a0fc540ecedf465ca33be144aec70e2ec273ca0000007b676e66141cfd9761e185761e0d88963d34e5468283f2ea081fdaa56d74acd004bd917b3f303c24cf931c1a6cb1708058ec9843801505b17bf78ccbd867e584c02c747d43479527e8c2f478342dae8a6887ec6987b0f84ee072652b2f1cb8eb935ffaa27281bd85535ea294c8e713982537215bb12cc9dd34928887000000ef2a5ebe4fdf907a34ac05103e6e3f7211c52e8eb1c0e53af612ccf81d447def0c11c45606000000c7406afd2f01da472b703d467f875f1c156ef22c34e987dbaa9ba901ff9a394f46a4756644a44df030d274c44f0c210b887c329dfc14a566cd3af70bb62c72386272cf1421e7241f4ba49fdd6b7175727aa7b131d3709c4613fbf3242934ed93ffb7b9276ad60cbbe39006e2256288bb9b4dfbe0c9acfef14d45fd0b1d1508b6e2468bb4fd09152fac0212662575fd509e931a93c0d8ddcc56947ce0c49f2872124615b44c8788e26e4551fc38e272b3af15fb445e5f4ee9ce1dd33f61eb87207e5652be035eb1d600380000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f00000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000331000000000000000000000000000000000000000000000000000000000000033200000000000000000000000000000000000000000000000000000000000003330000000000000000000000000000000000000000000000000000000000000334000000000000000000000000000000000000000000000000000000000000033500000000000000000000000000000000000000000000000000000000000003360000000000000000000000000000000000000000000000000000000000000337370000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f00000000000000000000000000000000000000000000000000000000000004300000000000000000000000000000000000000000000000000000000000000431000000000000000000000000000000000000000000000000000000000000043200000000000000000000000000000000000000000000000000000000000004330000000000000000000000000000000000000000000000000000000000000434000000000000000000000000000000000000000000000000000000000000043500000000000000000000000000000000000000000000000000000000000004360200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501100000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f0000000000000000000000000000000000000000000000000000000000000719000011000000021c000000b005dfff83b0d37b0f21779a64897d459188d7a6de34c30fd10dff20db3a984ca4444ee5413ebeb16df268bfe2798ff912a8bb53b8d16849c7f15199fcd3df1ec686e732f0a2a0dd3135e4d4ae310a0e06b599b5cc7df1e6c3eac177141e078e7693b36138719630f4fbf73ddbd382a7352bb2a45599a7a8934e42d7efea1b0e988e7d08cea98bf7f4856164086091391024d06210f1f473f0483c7f15afae6642547fe40b685766b10e5bfc4156cd3b8b000000b001c579ed0ec1841e759bc35e9b83658370856bb81192c5de898772e9bc014363b066ec821d67d07849774cfc3d6d133a1a07460488ad4d3830bd2d0d407603c44d3988cacf889ab2494b6111f457d028d8d20ae6f04f1793d5611cfdb47e824a82b8c266c84b698eec35fac85a850711189d07c0ad5effe03ee71232998d9dd06527e5206a1d50b1b3d6831f48fd59dd24d0bb9317877ef6da726b2823e8958744d137a9db32fd00db529fecde2fc0bb000000b01065c234854de667a458029914e7c5503e04bf5f9d99a0c61e1bd12d69c3b52325e05b002fc5243cc46b8eb20ac756bd452a87e30e0877c56f8b6e9742d58f94dc44bb78712ebdc45fff84f5be7c9cd09637bc841676a877d51809f47c1bf90eac662499be5f14c4058aedfce565f4961d0f62ec5a7f51557e06a046010ef45fb8168abc3ca652cd8879587fb0efdb0912297ab11e538c4e319e0f9774bfaed2a6c936a8dacc7f612f5ddef5cb5d10810000021c000000b027bfe497a3684bf524a84df96a8f13536108cdc5bbcab78eefe8f2a39e022ddb768f6a8d472153804ae221f4e5896608e49576de43c5317af8e6d28860fbf6be20096434bc7fdec366495f1d7755f642a58652df33da6c374a9235fdf29c75d6d41673e509910ecdc4105251e1564ded116cce8f4ea176d9ed6a89efb16ea7847f6e5a5b92ed60c35ee6c6a05e08746f187535f59c20ef5235b4b40ea990bb3799f3bd0ea7d3fa5fb56dbc1f7c12e9a7000000b0265e84d65f52aa4fe40ea1d6c495792fa44a840277b6aca15022d826cce1089dd64926b044b8c5db5ce24055598ecbbf892a691a2470575a5c4f69000f449a1cff261d63f59d86e4c119e86cbd7afc86b2c0355f377b41ec70a7064481fe8a2dfdc4eea07eb41bccb31cd834e0c1f38526647cbc23eba454d5190775c787d5e00a8fa22620222a592e6f08f5f2a78a9f0a21915a86e20c34117bfa900f511d13589b3e6aa767c6db0f28f6be8b927ec5000000b00c64c2917e7f2c137e04d5cf6619a6f164959431afc6cad0012b5e925d2b355eb4442512f103cba451efb09c4fc7ce44bfcc1e597fcfd4b9e7570244f7bd87926da4bc16a85012894d87a1cd1c3b9132c02516ab170e82849c014abf6ed86d2b0cb53402997db7eeea4acfbba782a19022c3712cdf592053139d8465bb998414ee7b2beb3bd0bd02b0c5a90f1fd3c36d0bd69dce8698dc76dd533c839c8ffafe1bac270d5a5d9a7319af62d827985dd40000021c000000b020837724a811db8be3f69df5c023ce38eabedc78155b9050c82cb60a86bed9a3a27d5871881d5277997e08232901a4219083db43c10ac7516e56c60ef7fb87163cc03764a87b4df40ec5ef307f39d7e5fdc84a6bb074b82a7d53b0afafcbe18a53a7578af6c403056f2b2d0e0d8d4a490ad2cec24666c38b7709903a2aa61a3bfa67dc512bc121502502931e2be6990e0753ca3add3e5238f77919491001750f381e7a783b9b81b1e79b75b4e545f4fc000000b0006c940ffa468e07bec34a5e9d02b4929e762d20620c71c2368e0ab89f514712753084682378e4dba8b04de3174fd923fb5d68fde8dcf9a15d74d0e8fbde149452d752f34065b26c2c86f0c2515926a0740ba0c25f6afb7a45772f38e635d89d6d617c9bdc3f2ac33912857e6104a88c28ccb2e12ecc0490f9812b20de3c2ee95a8ee75e27dfa7720cb6d421df4d9b5c0cf68563845a25ddac15d2909659539c1981fd9bbd33b68df2f0833734d6f363000000b00869fd42e91943fc9ef6bee0d63a200b91e9328754d6c8200dadd92e76f3f60c7387e8ada417bdf5273516af6e2b8d53eaa1d47160b4d43c6f808acfac3dde309fdff69bf2587f3add3e70afb23110726589f095146c220853490bd1e27b4694273562ac9802f064032b7bda01be942825754616c7654b61c5f785d1449fbbcbc1a7781b16e09765b35bc2b83dcfb4b21af06c53de71dab1b9c5f0c432c24100c9524d20087a8976937ee5bd69ffe3730000021c000000b00d8d59719e4a68e7f589d9d55ab5fb826af4630aaca5e12d850b52e209fd36e66c1ce241054400fc12eb3754aed2d08d5bcd17dc801cfe9d8eb3e20466d68e9da822983b3a88ca0edd4598fe985b50cc24d4497bc4d1e1a763ecaae8130f2026681b5debebd2f90c5a1737e5f9befc0c024155477b56e99439fdc2ad4a7f128e2401e9af3662f30cd9e42e529a6b9b1c2a7af04feb8940ab2d9d7393b191fa209d4bf39bdd172156ab988c2561ec9a5c000000b00d46abce55eac38a69355ac63edcc22904e256fafe33e8900b6e9880773487bbbe1905089e22f65dd024e1db828d7b9866335f5c6ee1b47295e4a5486e0fe5a9bdaf0640f66b75a48bb84eb590b56b6917e597347b36fb3ac331889ee19b4f230ccb5d3a793acb0e2c350801df18bfbf291cf82cd855977a7c3f46e5312196762135ee305aea984f4889c0afa3c5f3df2aabf6bcf53da549ed3825e4549a564dde30943056a55e27d03733d9c38ed12a000000b0080b1d4df9b86dce83831a036afb49c525ff1dc235f2b26392b84aca7791d839cb6c12331fc33069c02214f53fc4d7b5688246f58d5ebdf3ccb1e5485a267e452595bebd2c81aafa8bcc890cf1c218b7707404e19074913b02fe365894541643a1f64c243c1d3f3d82f86ab0a1ca2d250d78a6f64bb4dbb6ea9844f832c439ae5aca15bccd51ea4e2fc7c91548731bfa06f28c6f5d8f14eead0c94b80fa40159d8ced7ad67b5935dbba0721650465c810000021c000000b005ba33274e7f132b49afa5cfb0cfb90db55d15366417c5102cd61bc57ebc2de56ed4ac1fc80fb96358341f81be03ec318a0b2f65d2d8740eecb855b4320f2f98ca27af8577b814421e4b9396fdc19959de89ba3167b004318d45434d58e2baba67e2e342491cba32c3830e8e58c230b22102b189419d7f4d8b84850398f3027e81a6a56713fdb586b13802e80f6c39b7227cada92e28791b5ef23975085e1369b9b89c23fa0938e086bdb7372e14732e000000b004799b4db8032f11c0601264c49421dea11bda861884f4656c749e1123488152e245513507a119d81220c829cc3848503b0625efef944332dd34dee8c48bbe76cf4460f1c28f562bbc17b0b05b91d0e6f659e9bff1bcdd1fcc844a27f3e200bbdb485efc33a85deaee3519f2e704005b102bfa0b6ad8d0171e4cddb60a291b3d1838d4bf000661ea2fb74060426702bb260de6568a7bfac5c7a5f2bc967d69c6afff0f937082b8631690b6e10b25fdc9000000b0240d79423f7e49f65ad1c2c0c5952f7521b9151b366bcde99159f1840facecd425e8a176a9a81a87bf14e2d270608a02f32cc4c3f37bdf2bbc0ab0e1d6b895be80dee69b171bd6bda65d7fcd073d7fe0d3233bba76d16c550cfbc7ce13ef6d2ccedb65b5b5ffe8859e626222c89b2fed0189f2c08e73c562f30752c640683ae7c6f6f77620c0ef5b3bede7464449b313236e9790ae2f12a1ba0b806b75732634676e1ec4d85f10fff003ba75dede3f160000021c000000b011dab5fd5cdf7ec4fead48be1957842094246488b86c78e8a5b94452cd6c1d69d74dc1867d89c0ab7f3230d4dbff15e881a32ba690f697e2f045da5f6b50852e18f23d5bf13ebdf64aea8578add66ccfa2702aded682ca6211149db201ea3af0985b8b2afc02f558f19d6a753b59f81b1581ede8cb1a12bb5376f12d285bade63c4a041e7987d95029b3268bb98c04ce22579f70de6408fb624dc2c3980e15a9143959924c715d2d5775dbd7f1c9a1bf000000b0108c25781b77fd1da1e7e0295a44d1da0584942dde0038778c652c64f750b08f139b1f1baabc3729f436b6be3ce5948a99db07eecd1bc71e6ea34fcc82b12b6aec336c0cd13b7fb210bcff686404b4a6ebe1b557a9aca92b5e9bd68c6266084be5e78bf97a2d9e5391defb6e04ca3930081afa1bb2564faf6a7157f636edc5fc550fe5879ef1b4a42e57f2819671b55e19128cf2fcedad5b5cf26c58a503a210ef1f23dd26c8efcbe8312a7495ce6647000000b029ba25a5184d22b8cc609016c8aeb58ea1dd66355c2dbfa7ed9914e712fa4b122a7faf9dd6681d6ad2a457c49abc91b5ec48dc80c1dad95f23f7af6dc542e5fe573a90a47a3cf3f46df08a7dfec8e62693a80d50cc35f87f105a13245588d2eca50c557f8e1c2a49eadbd515f1a12ce50d60c28140779917dfc9df78f6abd7878dc959f29b738926dfefe48050ce84102785bb44a8362b20ff86fce7e0728eb86d3aaf6831b65c61b48762d13ad2b8cf0000021c000000b00e78348fd6fe7ab86d86df4aa1ddaa523103079b64437ca459eb97d17c02684c19170e43b26575b31b4b3b0fbf05693fd288a071d6d0686adf5336c8ece6f04a50accb5feeea5e0d4f84695e958ab8ecaf959ad5074a1553198e5a0c3a11bb704243b2498b1deafde6dd0935e0b300881f6489bec67988a26d2b2566ab245589691a3e4c32da58f4a381d64d0187121227d0dd1f500b26f526c9a283261c5a6196d451938b01f9079ec315c979a52a3e000000b016fd5a98a7bce9b693fd4bbbd51ddbc4d309fcb10f918f5e1b20142a6126b6fb7bb0887401fa9f89ebb97a85cabe0adb401e74e3c4f161ce2989ee14f6bf44c6bcfbf11ccf90066c40840460eb5b1f1639593787aa072b7a6f3fe401aa0ce1a9c64d7d047d54ca8fc075a4687038c6f62155170e15b5a2f54304d61c12e1e825c33073d7684200255fe65109934b9c8c296ce8c97c28e217220fbc90c03742ab2e2845db1b1e2b7483e11429fa295a3c000000b010234195d5569210f9ecbea1fc71216d7dbe2bc5f21478c31efe1b226504ca018500feca12dd965a1741e1c69eb06af60fed748ad8f853b87c7c89b23209d9f433daaf1786a2e79f1ab5a192c3b82359aa5e3fba636d1204ba649c781ba1a15bb768d006f2759d0e375c23ed4705099006844f5e3ea4099809aa39ca2db2dda733a04d3d7b20e73d398d779950fc21d20586a4d85de35f6f171ef91bcea26e83ae478c0bf08852975dd9ffafd25beff10000021c000000b02544b19d6dd62274d69f705c0122f3c10f27162773e394cd648071ebf1f06acf8cc9ef58127dfe79c2fa17f88d1a7a430d60ccf775b8e081ab90b092969648ec2d7d2fa772f14a0479d1dfba2171531c774b6bdb7d86361a44c56593108554ea8fa05903795c718e9f9bcc6660809a6526334680dbaf8c5e6ea4b08a86ac59db69f1503a2b83ee4f2ba3e67f4756b6e1163868d1700faa79a7780fade703b15f0e1e423b6eaf1504ad88be84f0d9a96c000000b0261f852126ee0943ede468b331c2b0d8e6ecc236fb24b8c0c4b309fed5cc8a2c5f19221d5c34e511082f5ed14e67babcb16502b117f74a2892254e77bf5992a7a5ddd11bcdf731ed8b71e0b15723c92acb3928f8ab34c03d1f9b18e988b5bcf62e6dad37eb9e3588dd8d60c6fa18a3e02c59a4f4943141c46bbfe4d4573db76f59b50d61ec2bcf3ed6b605ef94f2252f0d1862efc0be050529d8f275b1876a6380fcef9c763c591f036068b19638301c000000b011335bf9f2b0121051d154a362962261198ea846668419dc980d0486045a2e51d93b2204d921ce5f1d8ae4e7a25ec320ed0249a69db3c7801cd39657683e2fa6c534aba9d198620046517dc45e35c94e68f9786c7e050bea633df0e0de6821873641d2370a37d5c25ed319c8eea5056223409d54f97e87d4e69957959d311cb91b0a17e1d5935d94f984e900691bf0ac253f1b14b817106d0cdca5689b2604e74eceac747898d236f344c1928d798ffa00000ed000000146000001012e4677e98f307215836509d45cc3a17ef50e00d46c5cd5f0ba4dd9909b27bb50e523df73000000d9763ae517aa662660ef2598f076fc751779c7fb0da2fdf28029468d13cb3cafbbd1076f961b2e7c41b5a41977827cd965ba6bd2afc4722d50d106e183d44eaf624a987bc2439996896dc24fd8ca48a678e5636aaed74da46c2ffc02b6034a2544d1500bb5f1c46e7585ac7148d9fc9cfe00d606a9b0ff9e99e5ffea2b40f3a4ba724db3a910b6852e0342ad1f35007cf2e07210861bf80e60aeab4f6e7d43d0dcd702442a99e49927e40c24b6215d3a6f1d0ddf6ef8ec69851ddd496414b4974b4e69f8b747b4f6a3ce428d18c8a6883429e19d027513ace8560000003d1db0c26a6cd66287c7a5c60ba29fdc9419ac0547e2e6a46d95d9cadf61a277b60b7e1458000000151b4cf602c99d8bf872e39311a78c35da4094080e64000001b10000010919806d965606225d12616eab63f499c81a31f782ce5b1b9998e7055549b208e1bb3ec694000000e13df8d2e39edb5b58bd1ec44e8c74bea7ed8752617b319616a4f8836bcd985ec1ebe093b9f97a13deac3fb339ea459682c3db77bd965d5e552b8ce32cfcd4ce88eabc9ca09f1a8260d5bed727feb5fcd06a7ca18d9ee2c52780480538a6e6a9d1f84c6e053fa42aad388b137ad1da047d861e6c85260662e5c1d1190831eb3385f2e0cc2bb2cc8a1ad6c46778ce59cff7b585c98320ad07c51adc4faa2826f937cfe84a02efdd4f6bfabd15f9d18fd7cf2902db9e8ff9087970e493404bab2bcdf376840fa5e0fa821e071a40e13aea956f6b561a4ee4e5eb19793a5b8da76b3eb8000000a02a9a5a16b4586ebee61ae250ac0c9c6a2c661a3944f09f077e4784a05c6452961823be9b0000007836becf2724f7c3c084fce24d9de209c840942d2ba9bf2f120ed90874cee3a10fa382aef9a8ff6da22ffd35a49a1fa2cb7507a6fb64b6331fc049c3f7a1e4e78332cec798f40ead306ebce1de7aad2aa39030ebbfca5471f67e3863f3dc2bf0a95ee0d31529e739adbed5fe5b832f4469e9bbda6d66a5f29900000165000000f805d3b407d56138be021f1b0211837a089b51f2288d571b2681e1d7a13720d11aba322f9e000000d0a0c92e6da2f11f84d46e66cbb383352adfbc0046d3cba9bb1400222abf7bdd0b608b7f065e49f9d6ade1c81fc2c6e1350c0ae42193d6d1f0e4f45e214faf45fb7162e4b5d8236c836f1e158900c5b476efae400f1e820c53d7c695ac81472a51c2069d6d7aff91dbb6ded899323f44cad920a65b2d345bf7e0d8effc1d7020346ce2615fe777dfe43eaa46e34e8d26a301fb158fa584fe4fef3be77f622f7b2590aac755febacbf2a879ffbc29498e85c090149facd9595d057473b1f3211a4096eea03081acba9daa43a33d39b435b0000000651d1c0f4ff95627c3ea6497131ce6f65291068c53507b18643613a6631b83908f6f7714070000003df319f0bfca5842e7aa5f72bc9405109f0a045d0c952402464164935c68ae6d8aed2ad170573fd78d2df3a0bd27c9330a8ae8cf3f07fb1e0f80e7b911ae000000d8000000740e1c57fd963173d4700725978d290d7622994a61bcb12fa2d71065234ce98b95b5fda52d0000004ca723034bae0e03a2329f75c8cec58012774b3b3d4b19df0a409803e3f23459f17163503aa0ebac1938b0c48ac3e2921d6020c0d9e8e697685319a5914ef83ffa319bcf3f626e8dee6c5979bf0000005c03b0772fbd59c6d07c24a89edff102d1178d59952037c9a1a3193041b3e2878de92e649800000034022e481eb3b5d1297e9791294264cf23403f7617bcd3c5b3b58063ba5ead32a8d24c31e398ec104b8b9a48a3f2fe43351fba228400000127000000cf29d7afc0e786a5e31b82ea2ec4e231893568733f14f07042bf8a846aefe024df0bb94522000000a7945b1ce401ef28de1bd359e4a8c197eeeda01a847f826c2c7da54118b6854f8220e5ecbb71c72dbf9694cb3ffc89e17ef2405d8ebcd7aca5efdbbc06485ceafdeeb7a0bf1d5973914429b1213e9c571ed18967b4b93e414f40e8bc097535e268c547c4475407f81a1576fbf742de62b57d338dd82b599098f67d51b07ac01bbe1fc0fc1c03155a5cbe53fc34f4fb368d84cd0c489ad85e96854b2fa0664a90bd5f68a31d81a41a0000005000015ba73702491851ca1b24573aa75fc2b61f442b57977b16d2485972f9048873a8f5600000002857b0541a7f358af9605e71a668c745ad7525df9d732e2efaaeb77d1f302bd77c2079af24fc2d533d00000188000000b307d7f7b3479c7bc29926cea7508d9548fa029b763c5546c70177bf53a8c233d45589b1280000008b0fc8f264233f76bd533214932175cd7a96450d060f31916db72d131dd5fc9b071733bf6d12d6912138a28144e195f033494c20e61e9d02649aea8c1026fc8f668362a1d68e322c85cfe6ac49ffacc3154adba003cb203b2407675427c409d77f9f7928b4bf8a105b7537e8fe2f816f3d4a7f7418eebf1bafddc899816847696f9a560f5a20c3a16fac6e3d000000cd1ce316a2d2bb16abb60989c6a439a239296182c24d00bed80202c0e5b9937d6c83e9cb10000000a50e6f8b3d0930f448476e7688278427d9f4a3e6147a3dbb650bfc11909b4ad6ce1d1824ebd2c4f39f29581600330f6c64632b02ae79afecad34171ba93420bf8648b18c268c3fcbcee0e08346be30e8600336a4f0222e74a354ff42c78b20b39952b3cfab46968d8d3f9f716ae5ad827976d687101ecb5326c95f1ce1f03ee5efabdec8315956409b31d53181225af657204290360f359953dac8fc4b16cb080900b9665649000001450000010d230ba3c807e0c74f88199b4954549b9c7c88a20366747a44ba81bfd6cf82056163f6b3b4000000e51c04f4a699198a146f6b885121c68155d7dd290d180bb4c8e53d0320b69ec09043e66ca7b178026f3edfd0f9b01dabc89c78040c3bc8ea74249b5e771d0af07bc518016e5c300042aa7e8702aef621dba4db45369f9e178e445c93c221a75f75dfbd4d55b11152cbc8da9e46a2b622f9ce4404e6b083d19751522dba6c355957273b3c3069681ab7d33df8a4193fe6bc16ece16ec65a9d82282d95dd04ae1fc6141a363a4ba983675d129d787b946f2ad7939d7d7eab76c276a562540bab0232357afb1f89c12ed148159b9107509bbf7a7a8b32ca32e770334279ab64ea459e2f0d3fce8a0000003000a8a595fe51c4169efd278a9857a95a0188eaf17601c6463ab86f42ad066b4f64a4cd8400000008732421587b0228c9000002120000010d0ab8111c8f4016dfadd4368eca2044e3584613a01960746f344cabbe383969fc6e97c8ad000000e5a199c77819c3e6eea0d1dc808736815987def137913fc09bb1c2377fe486d4cb1cdf49b1a86f738dfd035c098bdbd3a110201224cf9d3e780e792a34ae120c9ded7b67c87a7506819549bb50b2222a2efff7a6d5a9dde9b87f9bb36797b0a24de24cb7f3322b520d22c73725a385238087634ddd1989666076c6533396acb40fa6d18eb8044b9196e977d6c77876b7cd3c7d42cde31b435223f3471455fdc0d1ba20277909bb7276fa6e0d5ad74a0c044443ae8a067b9d6812bcf752598b902012aae8cd6c82684d93b73034b46b5e9751eb76f3e117cf1c0d334e612e7d515093699d0024000000fd2106034d2bea3e3692bacb81a145356adcf46d9b399610f0803a7db66e8c5488f9f4f9ae000000d557183fc0dbaa376d5b6035a92bdf8bdd2da9e54c66b508b8e7d00c31c83dde902749befaa4aa94fd438c6d206cc1d09214d471314b56ae95b4b2a6bd025635984815307731f16b32ade9ce885ae61616e8775f77acb2ab5e514d1ebaed4e087989fdee8ef735d8f9ecda030636c606889169272c30810523dedae6344a080692da1e62d2d59f42893f24d0fb0caa55ec88e6729fe080a1f862b13cc95d62327aeabefcd21a351b360a7bb8073739a16d4a07c0dc8380625abfee094b97f4eb278b30f377c3bc40c7dd234d454b41acdc777800b6d50000010d000000511e4e6436ffeb6ab5cf8fb1b661d7297511f2a2288ad11c075d0cc7797d8bf4ec3f3059ee00000029c02e6c2844a544af829df5cc4a651c58891323dc747333f8c2024d28045531cc61a749f6766ff99af3000000b415a7f7a6c8c52ab06bf547c852f5cb2139106a1b54e8d177f2c1ce3d45598350c359d4a30000008c4990257f9822ef299b3f91e0f84e86b508893213f952ee607fb6a4c0f3788c9a66ad9b58839f438735629b5d1fa542ec6cf92101eaf9a61b85296a527d423ee339ce66a14061a87207ba586c728b23021b8ff13b3f547bdd1535ced6a6d807b4421bee73716ae3155d60d18ad7c3d6f7161fda6b327bd20a99b165d1235e52efad65e5f7ddb0c620934102d10000012b0000002e1126c6c48562807043080d88217a9833fc1a2c3acd4e54707a112f94da56963762294bc6000000065819b7e8436a000000f5274a5df6b42ec6d931b08d7a18c1d322e30f2e191eaac58becb901cf531f7205d2bc99ce000000cde66aecf895c0b38e4db43a4815be65a85e407659e1fb53b94e5ed04d9ac0519d79a30c07f7e92db4b55cbdf644009137d7e5e83a872edde1e0c7251f199fb2d33e2eb43aee97b9b488675b085ca45cd9730e2d6f07f9384dec18896c4be9159289b40acdfc51c61671e567a6d4eb90d93eb509ae8f140c7f9d2bb1abe6cb2cedb98e22c7cffe59a6cfb11368c7a82cf47b4f007111be7e09113f6ecda2615b97b09b15d3e17d36454454d1aba31e2d2d7c3e692f8742a8e0d7db937919285c2d70ccb62890fdcde03ebf568ade00000132000000c90e9601c54feba5e7caed78cda2fe7d663e778287e3c2013a40d940515a9c583b7ac4f853000000a114a69294e2159266ddfffbccceb8a9aee0d355fd6b8744c6c63089b6bc95b08fcf73864192d34239ee5c464d4600199c831a5ac5fc58640db7fad79ec1b20d8b33ba985dc51c5265ab84494ad93133287e40bc05e82744d1b2921fea7765eef975a14977ec4baf64cffc070829a2a288f02c3dcafff833174165797e2c0245d8a78ee59b9e86ce08dbe24c1103a61272e89c40c2e20e3c0ba59a26de25cd03ba940000006108d59bc0390e3a0dcf0d7e42da5dacac7e03e0f73c52c9b020fc00148bc84d350fba5bf200000039c9ca588f6e132d30e2defcfa87ab66d5443b941d6fde0bd390d850f74cdcbfa993dce1c63028ac35a0cc5ea8fa0331e4b5715f60fa9144793f", + "txsEffectsHash": "0x00f201d77a36a5700f7b942461b6cc3b82adec7514fa30d2151acbbf63e98792", "decodedHeader": { "contentCommitment": { "inHash": "0x00212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb891937", "outHash": "0x00a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd", "txTreeHeight": 2, - "txsEffectsHash": "0x005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e8289" + "txsEffectsHash": "0x00f201d77a36a5700f7b942461b6cc3b82adec7514fa30d2151acbbf63e98792" }, "globalVariables": { "blockNumber": 2, "chainId": 31337, - "timestamp": 1711947319, + "timestamp": 1712150214, "version": 1, - "coinbase": "0xd545025bfedcce10c8e1d7e51a346157cae113c2", - "feeRecipient": "0x1d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c" + "coinbase": "0x8bf5576ce39fd6eaaccfff10c788ea2169aa1af6", + "feeRecipient": "0x00294e7886a600098135632a1504b7370dfadf7506422af0eeae04625aee3f02" }, "lastArchive": { "nextAvailableLeafIndex": 2, - "root": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac" + "root": "0x14a11d8443512abab4219f8a7b56272938335a5a3062d3a480461a499741360e" }, "stateReference": { "l1ToL2MessageTree": { @@ -77,7 +77,7 @@ } } }, - "header": "0x299990718e2dc666430a73ea0bf1ec8fc8dd08f5c353db8ab55a56cd5bdce2ac000000020000000000000000000000000000000000000000000000000000000000000002005c3bf06f0ec967f794b9e472b58bcbdba8d7c4aaa0c5bc015d15e1219e828900212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660a3e37d545025bfedcce10c8e1d7e51a346157cae113c21d6b3c43f7099eb271345371dc9f77cbd0f0e6274fab7ed248e3a7439ebfb97c", - "publicInputsHash": "0x006fa981e1daa5d49ddb2d414800a9ab0be0999b2e5497f21715e7060bd6b535" + "header": "0x14a11d8443512abab4219f8a7b56272938335a5a3062d3a480461a499741360e00000002000000000000000000000000000000000000000000000000000000000000000200f201d77a36a5700f7b942461b6cc3b82adec7514fa30d2151acbbf63e9879200212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d00000020023ef973dbaa366409f7a01a4ced696227685ce75e57b510d0e7015ebfa72c5000000200231b77b7e0311a71fae5cec0f0281816950f94a24bfc2e67c5ae8619c6ed4c88000002802ae3a1bf2752c8c8bd6741bb3fd0d9e3811dbf7681454436125ccb7afeca31c9000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d56c68bf5576ce39fd6eaaccfff10c788ea2169aa1af600294e7886a600098135632a1504b7370dfadf7506422af0eeae04625aee3f02", + "publicInputsHash": "0x00e0c4f0d721a463223e629db668f34d95d3481fbe7eb05b82387dbcac472db7" } } \ No newline at end of file diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 7ba7f3dda18..1aafda1d093 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -5,7 +5,7 @@ use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, events::{generate_selector_impl, transform_events}, functions::{transform_function, transform_unconstrained}, - note_interface::generate_note_interface_impl, + note_interface::{generate_note_interface_impl, inject_note_exports}, storage::{ assign_storage_slots, check_for_storage_definition, check_for_storage_implementation, generate_storage_implementation, generate_storage_layout, @@ -187,7 +187,8 @@ fn transform_hir( if has_aztec_dependency(crate_id, context) { transform_events(crate_id, context)?; inject_compute_note_hash_and_nullifier(crate_id, context)?; - assign_storage_slots(crate_id, context) + assign_storage_slots(crate_id, context)?; + inject_note_exports(crate_id, context) } else { Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index 134342b07d7..7622edf1a53 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -58,10 +58,11 @@ pub fn inject_compute_note_hash_and_nullifier( } // In order to implement compute_note_hash_and_nullifier, we need to know all of the different note types the - // contract might use. These are the types that implement the NoteInterface trait, which provides the - // get_note_type_id function. - let note_types = - fetch_notes(context).iter().map(|note| note.borrow().name.0.contents.clone()).collect(); + // contract might use. These are the types that are marked as #[aztec(note)]. + let note_types = fetch_notes(context) + .iter() + .map(|(_, note)| note.borrow().name.0.contents.clone()) + .collect(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. let func = generate_compute_note_hash_and_nullifier(¬e_types); @@ -72,9 +73,6 @@ pub fn inject_compute_note_hash_and_nullifier( // pass an empty span. This function should not produce errors anyway so this should not matter. let location = Location::new(Span::empty(0), file_id); - // These are the same things the ModCollector does when collecting functions: we push the function to the - // NodeInterner, declare it in the module (which checks for duplicate definitions), and finally add it to the list - // on collected but unresolved functions. inject_fn(crate_id, context, func, location, module_id, file_id); } Ok(()) diff --git a/noir/noir-repo/aztec_macros/src/transforms/events.rs b/noir/noir-repo/aztec_macros/src/transforms/events.rs index b77a5821b81..4f2b70453df 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/events.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/events.rs @@ -174,7 +174,7 @@ pub fn transform_events( crate_id: &CrateId, context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { - for struct_id in collect_crate_structs(crate_id, context) { + for (_, struct_id) in collect_crate_structs(crate_id, context) { let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { transform_event(struct_id, &mut context.def_interner)?; diff --git a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs index de94e5eed2d..0514155824e 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs @@ -1,7 +1,11 @@ use noirc_errors::Span; use noirc_frontend::{ - parse_program, parser::SortedModule, ItemVisibility, LetStatement, NoirFunction, NoirStruct, - PathKind, TraitImplItem, TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, + graph::CrateId, + macros_api::{FileId, HirContext, HirExpression, HirLiteral, HirStatement}, + parse_program, + parser::SortedModule, + ItemVisibility, LetStatement, NoirFunction, NoirStruct, PathKind, TraitImplItem, Type, + TypeImpl, UnresolvedTypeData, UnresolvedTypeExpression, }; use regex::Regex; @@ -12,6 +16,7 @@ use crate::{ check_trait_method_implemented, ident, ident_path, is_custom_attribute, make_type, }, errors::AztecMacroError, + hir_utils::{fetch_notes, get_contract_module_data, inject_global}, }, }; @@ -82,12 +87,6 @@ pub fn generate_note_interface_impl(module: &mut SortedModule) -> Result<(), Azt }?; let note_type_id = note_type_id(¬e_type); - let (note_exports_struct, note_exports_global) = - generate_note_exports_struct_and_global(¬e_type, ¬e_type_id)?; - - structs_to_inject.push(note_exports_struct); - module.globals.push(note_exports_global); - // Automatically inject the header field if it's not present let (header_field_name, _) = if let Some(existing_header) = note_struct.fields.iter().find(|(_, field_type)| match &field_type.typ { @@ -447,28 +446,22 @@ fn generate_compute_note_content_hash( Ok(noir_fn) } -fn generate_note_exports_struct_and_global( +fn generate_note_exports_global( note_type: &str, note_type_id: &str, -) -> Result<(NoirStruct, LetStatement), AztecMacroError> { +) -> Result { let struct_source = format!( " - struct {}Exports {{ - id: Field, - typ: str - }} - #[abi(notes)] - global {}_EXPORTS = {}Exports {{ - id: {}, - typ: \"{}\", - }}; + global {0}_EXPORTS: (Field, str<{1}>) = ({2},\"{0}\"); ", - note_type, note_type, note_type, note_type_id, note_type + note_type, + note_type_id.len(), + note_type_id ) .to_string(); - let (struct_ast, errors) = parse_program(&struct_source); + let (global_ast, errors) = parse_program(&struct_source); if !errors.is_empty() { dbg!(errors); return Err(AztecMacroError::CouldNotImplementNoteInterface { @@ -477,8 +470,8 @@ fn generate_note_exports_struct_and_global( }); } - let mut struct_ast = struct_ast.into_sorted(); - Ok((struct_ast.types.pop().unwrap(), struct_ast.globals.pop().unwrap())) + let mut global_ast = global_ast.into_sorted(); + Ok(global_ast.globals.pop().unwrap()) } // Source code generator functions. These utility methods produce Noir code as strings, that are then parsed and added to the AST. @@ -625,3 +618,79 @@ fn note_type_id(note_type: &str) -> String { // TODO(#4519) Improve automatic note id generation and assignment note_type.chars().map(|c| (c as u32).to_string()).collect::>().join("") } + +pub fn inject_note_exports( + crate_id: &CrateId, + context: &mut HirContext, +) -> Result<(), (AztecMacroError, FileId)> { + if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { + let notes = fetch_notes(context); + + for (_, note) in notes { + let func_id = context + .def_interner + .lookup_method( + &Type::Struct(context.def_interner.get_struct(note.borrow().id), vec![]), + note.borrow().id, + "get_note_type_id", + false, + ) + .ok_or(( + AztecMacroError::CouldNotExportStorageLayout { + span: None, + secondary_message: Some(format!( + "Could not retrieve get_note_type_id function for note {}", + note.borrow().name.0.contents + )), + }, + file_id, + ))?; + let init_function = + context.def_interner.function(&func_id).block(&context.def_interner); + let init_function_statement_id = init_function.statements().first().ok_or(( + AztecMacroError::CouldNotExportStorageLayout { + span: None, + secondary_message: Some(format!( + "Could not retrieve note id statement from function for note {}", + note.borrow().name.0.contents + )), + }, + file_id, + ))?; + let note_id_statement = context.def_interner.statement(init_function_statement_id); + + let note_id_value = match note_id_statement { + HirStatement::Expression(expression_id) => { + match context.def_interner.expression(&expression_id) { + HirExpression::Literal(HirLiteral::Integer(value, _)) => Ok(value), + _ => Err(( + AztecMacroError::CouldNotExportStorageLayout { + span: None, + secondary_message: Some( + "note_id statement must be a literal expression".to_string(), + ), + }, + file_id, + )), + } + } + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "note_id statement must be an expression".to_string(), + ), + }, + file_id, + )), + }?; + let global = generate_note_exports_global( + ¬e.borrow().name.0.contents, + ¬e_id_value.to_string(), + ) + .map_err(|err| (err, file_id))?; + + inject_global(crate_id, context, global, module_id, file_id); + } + } + Ok(()) +} diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index e3ba9b9b170..0bfb39cbc71 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -267,7 +267,7 @@ pub fn assign_storage_slots( let traits: Vec<_> = collect_traits(context); if let Some((_, file_id)) = get_contract_module_data(context, crate_id) { let maybe_storage_struct = - collect_crate_structs(crate_id, context).iter().find_map(|&struct_id| { + collect_crate_structs(crate_id, context).iter().find_map(|&(_, struct_id)| { let r#struct = context.def_interner.get_struct(struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 0535643186a..9dab776ee96 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -9,21 +9,35 @@ use noirc_frontend::{ }, macros_api::{FileId, HirContext, ModuleDefId, StructId}, node_interner::{FuncId, TraitId}, - ItemVisibility, NoirFunction, Shared, Signedness, StructType, Type, + ItemVisibility, LetStatement, NoirFunction, Shared, Signedness, StructType, Type, }; use super::ast_utils::is_custom_attribute; -pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { +pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec<(String, StructId)> { context .def_map(crate_id) .expect("ICE: Missing crate in def_map") .modules() .iter() .flat_map(|(_, module)| { - module.type_definitions().filter_map(|typ| { + module.type_definitions().filter_map(move |typ| { if let ModuleDefId::TypeId(struct_id) = typ { - Some(struct_id) + let module_id = struct_id.module_id(); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), struct_id); + let path = if path.contains("::") { + let prefix = if &module_id.krate == context.root_crate_id() { + "crate" + } else { + "dep" + }; + format!("{}::{}", prefix, path) + } else { + path + }; + + Some((path, struct_id)) } else { None } @@ -49,8 +63,8 @@ pub fn collect_traits(context: &HirContext) -> Vec { .flatten() .flat_map(|module| { module.type_definitions().filter_map(|typ| { - if let ModuleDefId::TraitId(struct_id) = typ { - Some(struct_id) + if let ModuleDefId::TraitId(trait_id) = typ { + Some(trait_id) } else { None } @@ -87,14 +101,17 @@ pub fn signature_of_type(typ: &Type) -> String { } // Fetches the name of all structs tagged as #[aztec(note)] in a given crate -pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec> { +pub fn fetch_crate_notes( + context: &HirContext, + crate_id: &CrateId, +) -> Vec<(String, Shared)> { collect_crate_structs(crate_id, context) .iter() - .filter_map(|&struct_id| { - let r#struct = context.def_interner.get_struct(struct_id); + .filter_map(|(path, struct_id)| { + let r#struct = context.def_interner.get_struct(*struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { - Some(r#struct) + Some((path.clone(), r#struct)) } else { None } @@ -103,7 +120,7 @@ pub fn fetch_crate_notes(context: &HirContext, crate_id: &CrateId) -> Vec Vec> { +pub fn fetch_notes(context: &HirContext) -> Vec<(String, Shared)> { context.crates().flat_map(|crate_id| fetch_crate_notes(context, &crate_id)).collect() } @@ -168,3 +185,42 @@ pub fn inject_fn( type_check_func(&mut context.def_interner, func_id); } + +pub fn inject_global( + crate_id: &CrateId, + context: &mut HirContext, + global: LetStatement, + module_id: LocalModuleId, + file_id: FileId, +) { + let name = global.pattern.name_ident().clone(); + + let global_id = context.def_interner.push_empty_global( + name.clone(), + module_id, + file_id, + global.attributes.clone(), + ); + + // Add the statement to the scope so its path can be looked up later + context.def_map_mut(crate_id).unwrap().modules_mut()[module_id.0] + .declare_global(name, global_id) + .unwrap_or_else(|(name, _)| { + panic!( + "Failed to declare autogenerated {} global, likely due to a duplicate definition", + name + ) + }); + + let def_maps = &mut context.def_maps; + + let path_resolver = + StandardPathResolver::new(ModuleId { local_id: module_id, krate: *crate_id }); + + let mut resolver = Resolver::new(&mut context.def_interner, &path_resolver, def_maps, file_id); + + let hir_stmt = resolver.resolve_global_let(global, global_id); + + let statement_id = context.def_interner.get_global(global_id).let_statement; + context.def_interner.replace_statement(statement_id, hir_stmt); +} diff --git a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs index 516c8a53cb6..86f10818dbc 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/abi_gen.rs @@ -112,6 +112,15 @@ fn collapse_ranges(witnesses: &[Witness]) -> Vec> { pub(super) fn value_from_hir_expression(context: &Context, expression: HirExpression) -> AbiValue { match expression { + HirExpression::Tuple(expr_ids) => { + let fields = expr_ids + .iter() + .map(|expr_id| { + value_from_hir_expression(context, context.def_interner.expression(expr_id)) + }) + .collect(); + AbiValue::Tuple { fields } + } HirExpression::Constructor(constructor) => { let fields = constructor .fields @@ -151,7 +160,7 @@ pub(super) fn value_from_hir_expression(context: &Context, expression: HirExpres } _ => unreachable!("Literal cannot be used in the abi"), }, - _ => unreachable!("Type cannot be used in the abi"), + _ => unreachable!("Type cannot be used in the abi {:?}", expression), } } diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 877f603668f..c28e99ce60e 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x2f281ca9a1c4739ed0da8d0d01a91ba443eb35007e266b3f23956b9bec5968b8"`, + `"0x001544b091ce13bd967234b51fb8ddad21b93b86b336ccc665f4f43013433530"`, ); }); }); diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index c8d238d4322..da5e9cd6e8f 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -5,6 +5,7 @@ import { type FunctionArtifact, type IntegerValue, type StructValue, + type TupleValue, type TypedStructFieldValue, getDefaultInitializer, isAztecAddressStruct, @@ -223,14 +224,14 @@ function generateStorageLayoutGetter(input: ContractArtifact) { * @param input - The contract artifact. */ function generateNotesGetter(input: ContractArtifact) { - const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as StructValue[]) : []; - const notesUnionType = notes.map(n => `'${(n.fields[1].value as BasicValue<'string', string>).value}'`).join(' | '); + const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as TupleValue[]) : []; + const notesUnionType = notes.map(n => `'${(n.fields[1] as BasicValue<'string', string>).value}'`).join(' | '); const noteMetadata = notes .map( ({ fields: [id, typ] }) => - `${(typ.value as BasicValue<'string', string>).value}: { - id: new Fr(${(id.value as IntegerValue).value}n), + `${(typ as BasicValue<'string', string>).value}: { + id: new Fr(${(id as IntegerValue).value}n), } `, ) diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index e819c7b325a..ecf9240a49e 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,19 +38,19 @@ PrivateKernelInnerCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, - "txsEffectsHash": Buffer<0x001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f>, + "txsEffectsHash": Buffer<0x004e1417aea61b0c45bdce1d1eaaa7a57c2164c351c32bb982820c553b228fd0>, }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp": "0x00000000000000000000000000000000000000000000000000000000660a3e6d", + "timestamp": "0x00000000000000000000000000000000000000000000000000000000660d56fe", "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, - "root": Fr<0x104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd>, + "root": Fr<0x2595aae01dcd157d738d57fd8fcb07879481bf5ae1ea60840e04e3fc0f2ed793>, }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -60,11 +60,11 @@ PrivateKernelInnerCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, - "root": Fr<0x13b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c3>, + "root": Fr<0x0f45374d984cbcfa5fe9e3d399bce285c8ad71ea59c83c68ac3e3f5c25af06d9>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, - "root": Fr<0x04694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330>, + "root": Fr<0x2daadb9be97f83342499872258b965f27f9374dc647d4359fb57896734c2c5ea>, }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -349,7 +349,7 @@ PrivateKernelInnerCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae>, + "value": Fr<0x253a0dce55a5037811281dafb183cb23c0774292031de9cadd10b95655b6067a>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1892,7 +1892,7 @@ PrivateKernelTailCircuitPublicInputs { }, "end": PrivateAccumulatedRevertibleData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, - "encryptedLogsHash": Fr<0x00c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3>, + "encryptedLogsHash": Fr<0x002d055a439d1ae185649359d70b116c0e3998f9d5ca2a2b2a215d0c0373587b>, "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1900,7 +1900,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, - "value": Fr<0x28d23cd3f4c08daeaa0eea08676686f6a3b0c266aac8925de6d6cd2213c17ee3>, + "value": Fr<0x2c28f42f69babb0ee655e38977b57200d5d2cf160c43767adec9c7a4397f87b9>, }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2127,12 +2127,12 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x1b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd>, + "value": Fr<0x0c8a3f19011af9d72071ceaf1e25a3f2b491775379765b455ccda67e215b6a46>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x14486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05>, + "value": Fr<0x0a94dccae8bf6c079360a0c449ebca3e4ed6b281119e3601ec03bcb6c47171cd>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2581,7 +2581,7 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, - "value": Fr<0x07de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640>, + "value": Fr<0x220b9f0f9cfddeca0ea05e854c3131e49369df89e00a1871209626c19a0bce9c>, }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 134fb159e34..8a5d4f67c80 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c4401002588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1af9f8c44010000000000000000000000000000000000000000000000000000000000000000001be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed10000000000000000000000000000000000000000af9f8c440000000000012588f756e2294742f2e0b8bdeef919248a8dc09354d23b21eefc860b1941bd4e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d38f6fde0427101df4e778ed294bf222b735c885172067d2b4d6967b6a7c8c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011be08a01075ab21ae6346820aa7e839c1bd7f3ad20e41d5512ca70f8e678bed1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400fe53a6ceaf194ae7c61b757a173982685276f1dade7402c02e78198779ae0400e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f08292bdecc7ec53f359ff38f06a8528e13f1790afb2287a45b4222db8ac33ff222664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921b17810bc097a2bca3247690619cb3215d116f832eea2ec8d844460fde2fcfc1bd86d85941600496c74f2da2ccfea9fed69dbe88d8a73033097f0c4f7a44e8400000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +26762152cec44d5484654f56d74da2db747712d564c44089d6f7a2e5804f7eaaaf9f8c4401000aaf7f20d6c8cbbe7952a84698eb44bc5611098028a784472a244b228cb5c29e00000000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000126762152cec44d5484654f56d74da2db747712d564c44089d6f7a2e5804f7eaaaf9f8c440100000000000000000000000000000000000000000000000000000000000000000026762152cec44d5484654f56d74da2db747712d564c44089d6f7a2e5804f7eaa0000000000000000000000000000000000000000af9f8c440000000000010aaf7f20d6c8cbbe7952a84698eb44bc5611098028a784472a244b228cb5c29e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002dedf119b6d45ec601bd9cd939fad93707cf549e24b61f10f764fd99fa1a6c4f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000126762152cec44d5484654f56d74da2db747712d564c44089d6f7a2e5804f7eaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004002b8bb0c92fb1699b507d00470f955603f0370c3c318d1027bcaa1980aa374e00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2a566a456d4cb42000a05d713f7f82fc669999561862b8f28247455a0595a9f922664a87df907f732f4fa814018bb43063a411a6b4fa0072e5f5f443c9c9f08921d2458dcfaa87477300786d9008489fe1a8b233e7375bbe0ed37d933fe443ea0cb828102678d696229c4080c1cc88a10aff1062e0b5641b1e2686c72783a83600000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 8f8f768805e..7410b0c56fc 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a186acfce6610096c463e7843d5e5bf69b0ac1f086994344de2d18ae1e50fae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063e957fb833022fdbc841e0192be07c55b1f2d3ec3d9d5933c566e7eca418a2b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001d33cb2a28886e7dffe6e29908fa4287f9a770bd5591eb4e0b05af7a0410b21c03d486d8df44f793ec2c180cdbb3835e185e43a7c9991695e6bacae04d0b548c0217c6fc6e5bf85420ed3b84254a5ff189eb6d11dc0d4ce911a3b03be3c6b76014213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e70906bca101002b4dfa98ee7ff2bd78ece3acaff9c3961243f2ec9307024a71fd0b46a0da1fce14213a070b8e4ade4aed7a7ec0b3aaaee87b4f1c13981476e1cdd3c0aaa010e700000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004104a6f775616ff8bc00d6d58ec2c6546b2350dc4c4b7aa8581451a82b04489dd000000030000000000000000000000000000000000000000000000000000000000000001001339bf9815be1e3e96eb38606437691da48cd96d212384013a2864a211997f00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003013b22ab0f862a52bbdf6fa6236860c7bb1b54c16848de1d09f1246b4368b21c30000018004694d8c853e46047e6ddc41ceca99a948a3866e2f3aca4ae9e0d626becab330000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660a3e6d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f1b312d79c2f2b38b11da7a65c57ee25cdefc03e154410dbc0d1208de3c7d984d268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed025eb824626710dc3ec6f2f31a2006710f207dc284da5f52f0e5051871a092b300000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000253a0dce55a5037811281dafb183cb23c0774292031de9cadd10b95655b6067a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109458d9ffb0b5ded1e3b19f7db5f6ff2ef527cd69cbaa4024d0bea6b84c2010bd0c8781e3f28f5969485f6cc696c2a1861fe173e0b22d28dfd88febe022ccb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002595aae01dcd157d738d57fd8fcb07879481bf5ae1ea60840e04e3fc0f2ed793000000030000000000000000000000000000000000000000000000000000000000000001004e1417aea61b0c45bdce1d1eaaa7a57c2164c351c32bb982820c553b228fd000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000300f45374d984cbcfa5fe9e3d399bce285c8ad71ea59c83c68ac3e3f5c25af06d9000001802daadb9be97f83342499872258b965f27f9374dc647d4359fb57896734c2c5ea000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d56fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000108459c196e394f2e27753d059e327f1d5c014a6bde8e16ca4f711181b3cd8bb0f7a3c5ef786a25c74a17ba807d973ab49c1e061249929c7a40f057c51ee5713280cf9830a85f3348ef4ec0f7761c65f3e6933b5901ed07238c0843297ab48c400c1ef173a84b495419ef90e8d90c94628f9311570afe36278a371fe6893dc330906bca101000bd0c8781e3f28f5969485f6cc696c2a1861fe173e0b22d28dfd88febe022ccb00c1ef173a84b495419ef90e8d90c94628f9311570afe36278a371fe6893dc3300000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000042595aae01dcd157d738d57fd8fcb07879481bf5ae1ea60840e04e3fc0f2ed793000000030000000000000000000000000000000000000000000000000000000000000001004e1417aea61b0c45bdce1d1eaaa7a57c2164c351c32bb982820c553b228fd000089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000300f45374d984cbcfa5fe9e3d399bce285c8ad71ea59c83c68ac3e3f5c25af06d9000001802daadb9be97f83342499872258b965f27f9374dc647d4359fb57896734c2c5ea000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d56fe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f07580f850f51dcfe23d402adad80c06ea583a6181718a391d4b6b65f52e2f027268220209c5229055952db6d99f7aca3997322c471c4d451f74f849ec2aef9da27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed1828c155617cde5dd8e98d80ebf5a12915c7f4846c3bf6be46a3b39dd187d5ab00000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 38c3f17a77a..dd773d47583 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3c8ebdfbeec9f7396fcc09c6f5e74acf6c861c5c552f39ed71d0d285440f3006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002447f72d2f5d3ae9d3fe1e17ca75242eb186337ef31fcb56cde96ab973f4cf092fbb460516c785a1f63de48c5f9e685761c45d63441f9318b29aca93af532d240d438e2fe6192c58edd342c34980ed4c6ada2ac6ee418572be0f58050f2b21b619babf882a6846aa2af472d18fe0ef024706c6c64f0b82e131eaec63207daaab0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007de15c05ffa7c46940ce0926bcdda3e831ea20a2d3d4ec5fb1e406dcafbf640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b5bb0d2d86fd54f93dbac726c4e9adc87c1a89fd82fb00fff0f74fdd1c46edd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114486dada110ccff78d071d2c81bc470974cd0cf4f5748a75717b215eba53f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029dac223c9f8c4c76319dfa11997675a34de4d106bad990c89407e6e84b7d900000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220b9f0f9cfddeca0ea05e854c3131e49369df89e00a1871209626c19a0bce9c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8a3f19011af9d72071ceaf1e25a3f2b491775379765b455ccda67e215b6a46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a94dccae8bf6c079360a0c449ebca3e4ed6b281119e3601ec03bcb6c47171cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d055a439d1ae185649359d70b116c0e3998f9d5ca2a2b2a215d0c0373587b006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b3900000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000000028edbb3a3c33c0495e3ac682afb451cb9c29b4ea2b3ee4745411c3f3eb8eddcc2176df7e0f0c459c078191a654b62fc319925a17472d1b8a079d99d519ace4911ac4d9649c51d175882722c6f526dfa56cd8b791353ef88cf75e0fd74a2853e6029dac223c9f8c4c76319dfa11997675a34de4d106bad990c89407e6e84b7d900000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220b9f0f9cfddeca0ea05e854c3131e49369df89e00a1871209626c19a0bce9c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8a3f19011af9d72071ceaf1e25a3f2b491775379765b455ccda67e215b6a46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a94dccae8bf6c079360a0c449ebca3e4ed6b281119e3601ec03bcb6c47171cd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file From a586479be18e08177d280726fe9e212f28523dd5 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 3 Apr 2024 14:06:42 +0000 Subject: [PATCH 053/123] restrict abi tag again --- .../src/hir/resolution/errors.rs | 9 ++++++++ .../src/hir/resolution/resolver.rs | 21 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs index 3c6c0582292..59e1ef15937 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/errors.rs @@ -80,6 +80,8 @@ pub enum ResolverError { NestedSlices { span: Span }, #[error("#[recursive] attribute is only allowed on entry points to a program")] MisplacedRecursiveAttribute { ident: Ident }, + #[error("#[abi(tag)] attribute is only allowed in contracts")] + AbiAttributeOusideContract { span: Span }, #[error("Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library")] LowLevelFunctionOutsideOfStdlib { ident: Ident }, #[error("Dependency cycle found, '{item}' recursively depends on itself: {cycle} ")] @@ -314,6 +316,13 @@ impl From for Diagnostic { diag.add_note("The `#[recursive]` attribute specifies to the backend whether it should use a prover which generates proofs that are friendly for recursive verification in another circuit".to_owned()); diag } + ResolverError::AbiAttributeOusideContract { span } => { + Diagnostic::simple_error( + "#[abi(tag)] attributes can only be used in contracts".to_string(), + "misplaced #[ab(tag)] attribute".to_string(), + span, + ) + }, ResolverError::LowLevelFunctionOutsideOfStdlib { ident } => Diagnostic::simple_error( "Definition of low-level function outside of standard library".into(), "Usage of the `#[foreign]` or `#[builtin]` function attributes are not allowed outside of the Noir standard library".into(), diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 390bc31d6ba..2e1b4b56da3 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -19,6 +19,7 @@ use crate::hir_def::expr::{ }; use crate::hir_def::traits::{Trait, TraitConstraint}; +use crate::macros_api::SecondaryAttribute; use crate::token::{Attributes, FunctionAttribute}; use regex::Regex; use std::collections::{BTreeMap, HashSet}; @@ -616,7 +617,17 @@ impl<'a> Resolver<'a> { match self.lookup_struct_or_error(path) { Some(struct_type) => { let expected_generic_count = struct_type.borrow().generics.len(); - + if !self.in_contract + && self + .interner + .struct_attributes(&struct_type.borrow().id) + .iter() + .any(|attr| matches!(attr, SecondaryAttribute::Abi(_))) + { + self.push_err(ResolverError::AbiAttributeOusideContract { + span: struct_type.borrow().name.span(), + }); + } self.verify_generics_count(expected_generic_count, &mut args, span, || { struct_type.borrow().to_string() }); @@ -1162,6 +1173,14 @@ impl<'a> Resolver<'a> { let global_id = self.interner.next_global_id(); let definition = DefinitionKind::Global(global_id); + if !self.in_contract + && let_stmt.attributes.iter().any(|attr| matches!(attr, SecondaryAttribute::Abi(_))) + { + self.push_err(ResolverError::AbiAttributeOusideContract { + span: let_stmt.pattern.span(), + }); + } + HirStatement::Let(HirLetStatement { pattern: self.resolve_pattern(let_stmt.pattern, definition), r#type: self.resolve_type(let_stmt.r#type), From 64557971c2276cf14966e79019448617f15ff11b Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 3 Apr 2024 14:56:16 +0000 Subject: [PATCH 054/123] clippy pass --- noir/noir-repo/aztec_macros/src/utils/hir_utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 9dab776ee96..c4414e6419b 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -109,7 +109,7 @@ pub fn fetch_crate_notes( .iter() .filter_map(|(path, struct_id)| { let r#struct = context.def_interner.get_struct(*struct_id); - let attributes = context.def_interner.struct_attributes(&struct_id); + let attributes = context.def_interner.struct_attributes(struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { Some((path.clone(), r#struct)) } else { From defffbb29c84a1a8cdd5a9f6694bb41832dc6af5 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 3 Apr 2024 15:39:55 +0000 Subject: [PATCH 055/123] updated snapshot --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index c28e99ce60e..07797e892c5 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x001544b091ce13bd967234b51fb8ddad21b93b86b336ccc665f4f43013433530"`, + `"0x255f1f3fe15bca5603b4b5681cf22e6115f75bcc76e0322e8f41a9d3dd68a5b5"`, ); }); }); From 95be1cd38b32a9c3e415931670e345968e59200f Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 05:32:31 +0000 Subject: [PATCH 056/123] fixed merge conflicts --- .../src/__snapshots__/index.test.ts.snap | 44 ------------------- .../nested-call-private-kernel-init.hex | 4 -- .../nested-call-private-kernel-inner.hex | 4 -- .../nested-call-private-kernel-ordering.hex | 4 -- 4 files changed, 56 deletions(-) diff --git a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap index d77a8fe6e75..4490cf8b836 100644 --- a/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-protocol-circuits-types/src/__snapshots__/index.test.ts.snap @@ -38,31 +38,19 @@ PrivateKernelCircuitPublicInputs { "inHash": Buffer<0x00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c>, "outHash": Buffer<0x0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c3>, "txTreeHeight": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, -<<<<<<< HEAD - "txsEffectsHash": Buffer<0x00a385a89dbd061850ec61a0113d127084f573d6dc0973fab420ba5c8f5034c9>, -======= "txsEffectsHash": Buffer<0x00a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, "globalVariables": { "blockNumber": "0x0000000000000000000000000000000000000000000000000000000000000003", "chainId": "0x0000000000000000000000000000000000000000000000000000000000007a69", "coinbase": "0x0000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000000000000000000000000000", -<<<<<<< HEAD - "timestamp": "0x00000000000000000000000000000000000000000000000000000000660d6da4", -======= "timestamp": "0x00000000000000000000000000000000000000000000000000000000660d8e1d", ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c "version": "0x0000000000000000000000000000000000000000000000000000000000000001", }, "lastArchive": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 3, -<<<<<<< HEAD - "root": Fr<0x0b7f26a489136e23a3276999b6e699f8649b69698429b04b0b09a84c57410b40>, -======= "root": Fr<0x21f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff4>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, "state": StateReference { "l1ToL2MessageTree": AppendOnlyTreeSnapshot { @@ -72,19 +60,11 @@ PrivateKernelCircuitPublicInputs { "partial": PartialStateReference { "noteHashTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 384, -<<<<<<< HEAD - "root": Fr<0x05d24ad091e5b30bf36f78b90878458bf71069b70b7a0b542a211ee322ee1bef>, - }, - "nullifierTree": AppendOnlyTreeSnapshot { - "nextAvailableLeafIndex": 512, - "root": Fr<0x04f0cf65ec3c76fa472f5f116c58948e4653c7b48108a9d2a4f37e7afb6216b4>, -======= "root": Fr<0x260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c>, }, "nullifierTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 512, "root": Fr<0x0c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, "publicDataTree": AppendOnlyTreeSnapshot { "nextAvailableLeafIndex": 256, @@ -369,11 +349,7 @@ PrivateKernelCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x27134b26cfbbb3192b79ba660d8ca2c826e0f9a4eb4626a47608948a24147da6>, -======= "value": Fr<0x0302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1752,11 +1728,7 @@ PrivateKernelTailCircuitPublicInputs { "forRollup": PartialPrivateTailPublicInputsForRollup { "end": CombinedAccumulatedData { "encryptedLogPreimagesLength": Fr<0x0000000000000000000000000000000000000000000000000000000000000138>, -<<<<<<< HEAD - "encryptedLogsHash": Fr<0x00d3d260fdb0e9bd725f24907a56f84fa43bc93dd7313d92d123830f378d64b1>, -======= "encryptedLogsHash": Fr<0x009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c "newL2ToL1Msgs": [ Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -1764,11 +1736,7 @@ PrivateKernelTailCircuitPublicInputs { "newNoteHashes": [ SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000002>, -<<<<<<< HEAD - "value": Fr<0x2d11638d34fba49882fb367e9572cfa80a865586a2ff4398406a37bff4c8d9ad>, -======= "value": Fr<0x0dcb66fbb43a6913e88885837284a9be49d752af2d04d80b9d256d355ce997c2>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, SideEffect { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, @@ -2027,29 +1995,17 @@ PrivateKernelTailCircuitPublicInputs { SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x244c5fc57722fba1893662bc8212c9d4895ab1031e57fdd696dbaad75d5efc6e>, -======= "value": Fr<0x234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000001>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x0d323be5e3a7f21be3531315951dc359d2fbee2fdcaf35a125bc7e3bf661c863>, -======= "value": Fr<0x0f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000003>, "noteHash": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, -<<<<<<< HEAD - "value": Fr<0x189578e0506ae62aa0fbe2914f64d6a0c0792a8a2bfc05a77e22487cf922ddb1>, -======= "value": Fr<0x1b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a7>, ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c }, SideEffectLinkedToNoteHash { "counter": Fr<0x0000000000000000000000000000000000000000000000000000000000000000>, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 37e9792ea2c..65b8a78378c 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -0c25ef0874d7a02878613819704c1a229e515d39a19953a3fb72e36de717d8cbaf9f8c440100124f2089f082cd3046b236bbdef5efe8d344c43e425661da7e8ee3a851531b3600000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010c25ef0874d7a02878613819704c1a229e515d39a19953a3fb72e36de717d8cbaf9f8c44010000000000000000000000000000000000000000000000000000000000000000000c25ef0874d7a02878613819704c1a229e515d39a19953a3fb72e36de717d8cb0000000000000000000000000000000000000000af9f8c44000000000001124f2089f082cd3046b236bbdef5efe8d344c43e425661da7e8ee3a851531b360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ce6f8edb75e108e71e8f877e7c4119adb6c7f07645691c26e911231d6d9f313000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c25ef0874d7a02878613819704c1a229e515d39a19953a3fb72e36de717d8cb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040004ef1165f6ef4bb052d4e6430a877dad78930f8a4b98cb2302663f560436cd00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2395500ac0beb3c1051f9fed5443476089dd83a60aae049a7d4eefbb34ae8a4a2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fda198a7554f05235a1c4c76d06d3d75656767ad652115ea07cac12eb22c63523622a9d4ca437acdc63603dc14268832c1f703d502eb7ff40a3680b1bd3c0d600000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 1b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440100000000000000000000000000000000000000000000000000000000000000001b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe0000000000000000000000000000000000000000af9f8c4400000000000129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006405a2f172d23668f5d0e473fc6e20a7bc413ff8e25bf2f37a93c52944a9ca000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400cf1745125bf6bc7dfd0952044d8ec041a34c30484c7ae54b62190ba401ed4f00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2aea4cf50b44bff835585c789cc9a3da218ab694bbfac045c7d98903fa07f17e2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fa250c191116c5c384b5e1b0a5e9595e1a587a6a2eb0070e025d990c6140c650f588c65eb313ea390c4218be4f0b16f55fd4c0b698f155ff9e926b6ec31987f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index c9362460c05..36a4e460001 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be200000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027134b26cfbbb3192b79ba660d8ca2c826e0f9a4eb4626a47608948a24147da60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000812e067416bc333987b838c48d457d046f10a76fc01dc8dd4d66f5af6100d308e005e24c75ec5b0cd9512da99eef37682d34d2c5b23ae90b3fa17d2bf1b5570d300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7f26a489136e23a3276999b6e699f8649b69698429b04b0b09a84c57410b4000000003000000000000000000000000000000000000000000000000000000000000000100a385a89dbd061850ec61a0113d127084f573d6dc0973fab420ba5c8f5034c900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003005d24ad091e5b30bf36f78b90878458bf71069b70b7a0b542a211ee322ee1bef0000018004f0cf65ec3c76fa472f5f116c58948e4653c7b48108a9d2a4f37e7afb6216b4000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d6da40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000001f17223dfb8b8f996924bc22b06bb4fd121c071ce6859ccccc0989eb4ed56ba401e80768c898ab36a9ce33eeecba01dd5afaac01824bd58d0e6ba39f5f91380d2391c46bf3d7bf1a6985c2643c5be0462ec51d5604a2c2420707169fd6c02f392cc0a11f2461c0ef6a56c28180be5a05928f53b8f4c3a89ebdad1516e7d5c54f0906bca10100005e24c75ec5b0cd9512da99eef37682d34d2c5b23ae90b3fa17d2bf1b5570d32cc0a11f2461c0ef6a56c28180be5a05928f53b8f4c3a89ebdad1516e7d5c54f00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040b7f26a489136e23a3276999b6e699f8649b69698429b04b0b09a84c57410b4000000003000000000000000000000000000000000000000000000000000000000000000100a385a89dbd061850ec61a0113d127084f573d6dc0973fab420ba5c8f5034c900089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000003005d24ad091e5b30bf36f78b90878458bf71069b70b7a0b542a211ee322ee1bef0000018004f0cf65ec3c76fa472f5f116c58948e4653c7b48108a9d2a4f37e7afb6216b4000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d6da4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f20a7b52faa9428010d233950bcc156129bf221fa6ca469c9c7d1b3f28c08bac216f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2a9940ee3b8fef4e8d76310d737749dacceecbd98eb4afb9947f1b1bb1a7446200000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080d109eb0144373702b0884ca6fd311f532ec3069ceda18ce4ea6943ac9f44ea219729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002ce761f492d4cd1e04716beb3ec03610fc127e5e941abc34f6f81cfb4361bba71fe37d55e04c02ab4c4bd77a9f0d353537c0783895a08e32e4a923a49fa26932148ae7ed365399e8541720c7297453e6721ef288850730cecad40b08eb71f1e7097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd0906bca10119729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000421f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2ade7319c2af1088ff40b65dcbd2c33a9ec6b2ec9714702671d027225acde4c916f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2b0a05c5d781d619d9f365dd3d1ad613833d45fd61b7c1b7ff19c0eb1de71a4700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 1276ae9b214..a472db0a21f 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1,5 +1 @@ -<<<<<<< HEAD -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be2000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f3a96a6724ad082a3728a3a37e978e14965b336225d5df9ba3cafba39f9fe60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244c5fc57722fba1893662bc8212c9d4895ab1031e57fdd696dbaad75d5efc6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d323be5e3a7f21be3531315951dc359d2fbee2fdcaf35a125bc7e3bf661c86300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001189578e0506ae62aa0fbe2914f64d6a0c0792a8a2bfc05a77e22487cf922ddb1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3d260fdb0e9bd725f24907a56f84fa43bc93dd7313d92d123830f378d64b1006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000e601294ee4d62d02fd98d51d26ee16def3d901acff5c739f3b821f241aac800262704cba81657fb96a603081f89044e83845bbabf1f8faa16cda34b84c30aa4022277aa4b160a11373992d72465406fa68e1ad4deecfb194e6286b439014c7302f3a96a6724ad082a3728a3a37e978e14965b336225d5df9ba3cafba39f9fe60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000244c5fc57722fba1893662bc8212c9d4895ab1031e57fdd696dbaad75d5efc6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d323be5e3a7f21be3531315951dc359d2fbee2fdcaf35a125bc7e3bf661c86300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001189578e0506ae62aa0fbe2914f64d6a0c0792a8a2bfc05a77e22487cf922ddb100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -======= 0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000abd4337bcdcbdf216eba2e0b858216d72437971ae2354052c10987ef1833f8b0d00b20e11d8f1af2c9fa2a6bc4a700213b85237423eee25c3231329e1a0c9282c14960355c61973b2491a51302b95207d8ef78ee00fb192158bbe6c7f8e1202063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ->>>>>>> 2e5d302feaba1e83ec76e722f96eafb1feafb06c From db2a41170e60e6ca4ad253551fab6a85742b7d76 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 06:10:37 +0000 Subject: [PATCH 057/123] hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index cea7664b4ce..d24a449c845 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x2f13ba1f63ab3f36fede3db7beb1eef6941606b30a881753a631dc8c32f05dcb"`, + `"0x1bf24d2106579f84afb2c55647aa66d0c37401e82952577ada09044c02220f81"`, ); }); }); From 6b556f31c0292263bfa066320bc42441a74c7674 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:08:52 +0000 Subject: [PATCH 058/123] reverted extraneous changes --- barretenberg/cpp/Earthfile | 251 +++++++++--------- .../ultra_bench/ultra_honk_rounds.bench.cpp | 18 +- .../client_ivc/mock_kernel_pinning.test.cpp | 4 +- .../src/barretenberg/eccvm/eccvm_prover.cpp | 3 + .../execution_trace/execution_trace.cpp | 55 ++-- .../execution_trace/execution_trace.hpp | 9 +- .../cpp/src/barretenberg/flavor/flavor.hpp | 13 - .../goblin/mock_circuits_pinning.test.cpp | 8 +- .../plonk/composer/standard_composer.cpp | 2 +- .../plonk/composer/ultra_composer.cpp | 2 +- .../plonk_honk_shared/instance_inspector.hpp | 2 +- .../protogalaxy/combiner.test.cpp | 12 +- .../protogalaxy/decider_prover.cpp | 4 +- .../protogalaxy/protogalaxy.test.cpp | 12 +- .../protogalaxy/protogalaxy_prover.cpp | 57 ++-- .../protogalaxy/protogalaxy_prover.hpp | 4 +- .../goblin_ultra_flavor.hpp | 33 ++- .../stdlib_circuit_builders/ultra_flavor.hpp | 33 ++- .../sumcheck/instance/prover_instance.cpp | 8 +- .../sumcheck/instance/prover_instance.hpp | 18 +- .../instance/prover_instance.test.cpp | 8 +- .../goblin_translator_flavor.hpp | 20 +- .../goblin_ultra_transcript.test.cpp | 2 +- .../barretenberg/ultra_honk/oink_prover.cpp | 39 +-- .../barretenberg/ultra_honk/oink_prover.hpp | 10 +- .../ultra_honk/relation_correctness.test.cpp | 52 ++-- .../barretenberg/ultra_honk/sumcheck.test.cpp | 10 +- .../ultra_honk/ultra_composer.test.cpp | 8 +- .../barretenberg/ultra_honk/ultra_prover.cpp | 13 +- .../barretenberg/ultra_honk/ultra_prover.hpp | 3 - .../ultra_honk/ultra_transcript.test.cpp | 2 +- barretenberg/cpp/srs_db/Earthfile | 2 +- barretenberg/ts/Earthfile | 16 +- 33 files changed, 372 insertions(+), 361 deletions(-) diff --git a/barretenberg/cpp/Earthfile b/barretenberg/cpp/Earthfile index 6b2cba59e9e..de96f18f227 100644 --- a/barretenberg/cpp/Earthfile +++ b/barretenberg/cpp/Earthfile @@ -1,28 +1,34 @@ VERSION 0.8 -FROM ubuntu:lunar -RUN apt-get update && apt-get install -y \ - build-essential \ - curl \ - git \ - cmake \ - lsb-release \ - wget \ - software-properties-common \ - gnupg \ - ninja-build \ - npm \ - libssl-dev \ - jq \ - bash \ - libstdc++6 \ - clang-format \ - clang-16 - -WORKDIR /build - -SAVE IMAGE --push aztecprotocol/cache:bb-ubuntu-lunar -SAVE IMAGE --cache-hint +build-base: + ARG TARGETARCH + FROM --platform=linux/$TARGETARCH ubuntu:lunar + RUN apt-get update && apt-get install -y \ + build-essential \ + curl \ + git \ + cmake \ + lsb-release \ + wget \ + software-properties-common \ + gnupg \ + ninja-build \ + npm \ + libssl-dev \ + jq \ + bash \ + libstdc++6 \ + clang-format \ + clang-16 + + IF [ $TARGETARCH = arm64 ] + # publish arm after, assumes x86 already exists, becomes multiplatform image + SAVE IMAGE --push aztecprotocol/bb-ubuntu-lunar + FROM --platform=linux/amd64 aztecprotocol/bb-ubuntu-lunar:x86-latest + SAVE IMAGE --push aztecprotocol/bb-ubuntu-lunar + ELSE + SAVE IMAGE --push aztecprotocol/bb-ubuntu-lunar:x86-latest + END build-wasi-sdk-image: WORKDIR / @@ -42,7 +48,7 @@ build-wasi-sdk: ARG TARGETARCH # Wrapper just exists share files. FROM scratch - WORKDIR /build + WORKDIR /usr/src COPY +get-wasi-sdk-image/wasi-sdk wasi-sdk SAVE ARTIFACT wasi-sdk SAVE IMAGE --push aztecprotocol/cache:wasi-sdk-threads-v21.0-$TARGETARCH @@ -63,31 +69,34 @@ get-wasi-sdk: SAVE ARTIFACT src/wasi-sdk-20.0 wasi-sdk wasmtime: + FROM aztecprotocol/bb-ubuntu-lunar RUN curl https://wasmtime.dev/install.sh -sSf | bash SAVE ARTIFACT /root/.wasmtime/bin/wasmtime source: + FROM aztecprotocol/bb-ubuntu-lunar + WORKDIR /usr/src/barretenberg # cpp source - COPY --keep-ts --dir src/barretenberg src/CMakeLists.txt src + COPY --dir src/barretenberg src/CMakeLists.txt src # cmake source - COPY --keep-ts --dir cmake CMakeLists.txt CMakePresets.json . + COPY --dir cmake CMakeLists.txt CMakePresets.json . # for debugging rebuilds RUN echo CONTENT HASH $(find . -type f -exec sha256sum {} ';' | sort | sha256sum | awk '{print $1}') | tee .content-hash -preset-release-assert-all: +preset-release: FROM +source - DO +RUN_CMAKE --configure="--preset clang16-assert" --build="" - SAVE ARTIFACT bin + RUN cmake --preset clang16 -Bbuild && cmake --build build --target bb + SAVE ARTIFACT build/bin -preset-release: +preset-release-assert: FROM +source - DO +RUN_CMAKE --configure="--preset clang16" --build="--target bb" - SAVE ARTIFACT bin + RUN cmake --preset clang16 -Bbuild && cmake --build build --target bb + SAVE ARTIFACT build/bin preset-debug: FROM +source - DO +RUN_CMAKE --configure="--preset clang16-dbg" --build="--target bb" - SAVE ARTIFACT bin + RUN cmake --preset clang16-dbg -Bbuild && cmake --build build --target bb + SAVE ARTIFACT build/bin preset-wasm: ARG TARGETARCH @@ -95,126 +104,114 @@ preset-wasm: IF [ $TARGETARCH = arm64 ] # Just use threads for now FROM +preset-wasm-threads - SAVE ARTIFACT bin + SAVE ARTIFACT build/bin ELSE COPY +get-wasi-sdk/wasi-sdk src/wasi-sdk - DO +RUN_CMAKE --configure="--preset wasm" --build="--target barretenberg.wasm" - RUN ../src/wasi-sdk/bin/llvm-strip ./bin/barretenberg.wasm - SAVE ARTIFACT bin + RUN cmake --preset wasm -Bbuild && cmake --build build --target barretenberg.wasm + RUN src/wasi-sdk/bin/llvm-strip ./build/bin/barretenberg.wasm + SAVE ARTIFACT build/bin SAVE IMAGE --cache-hint END preset-wasm-threads: FROM +source COPY +get-wasi-sdk-threads/wasi-sdk src/wasi-sdk - DO +RUN_CMAKE --configure="--preset wasm-threads" --build="--target barretenberg.wasm" - RUN ../src/wasi-sdk/bin/llvm-strip ./bin/barretenberg.wasm - SAVE ARTIFACT bin - SAVE IMAGE --cache-hint + RUN cmake --preset wasm-threads -Bbuild && cmake --build build --target barretenberg.wasm + RUN src/wasi-sdk/bin/llvm-strip ./build/bin/barretenberg.wasm + SAVE ARTIFACT build/bin preset-gcc: FROM +source - DO +RUN_CMAKE --configure="--preset gcc" --build="" - SAVE ARTIFACT bin + RUN cmake --preset gcc -Bbuild && cmake --build build + SAVE ARTIFACT build/bin preset-fuzzing: FROM +source - DO +RUN_CMAKE --configure="--preset fuzzing" --build="" - SAVE ARTIFACT bin + RUN cmake --preset fuzzing -Bbuild && cmake --build build + SAVE ARTIFACT build/bin preset-clang-assert: FROM +source - DO +RUN_CMAKE --configure="--preset clang16 -DCMAKE_BUILD_TYPE=RelWithAssert" --build="--target bb" - SAVE ARTIFACT bin + RUN cmake --preset clang16-assert -Bbuild && cmake --build build --target bb + SAVE ARTIFACT build/bin -preset-op-count: +# benchmarking images +# these are either fresh builds just for benching (op-count and op-count-time) +# or build the binaries we need for benchmarking +preset-op-count-bench: FROM +source - DO +RUN_CMAKE --configure="--preset op-count -DCMAKE_BUILD_TYPE=RelWithAssert" --build="--target bb" - SAVE ARTIFACT bin + RUN cmake --preset op-count -DCMAKE_BUILD_TYPE=RelWithAssert -Bbuild && cmake --build build --target ultra_honk_bench --target client_ivc_bench + SAVE ARTIFACT build/bin -preset-op-count-time: +preset-op-count-time-bench: FROM +source - DO +RUN_CMAKE --configure="--preset op-count-time -DCMAKE_BUILD_TYPE=RelWithAssert" --build="--target bb" - SAVE ARTIFACT bin + RUN cmake --preset op-count-time -Bbuild && cmake --build build --target ultra_honk_bench --target client_ivc_bench + SAVE ARTIFACT build/bin -test-clang-format: - FROM +source - COPY .clang-format . - COPY format.sh . - RUN ./format.sh check +preset-release-bench: + FROM +preset-release + RUN cmake --build build --target ultra_honk_bench --target client_ivc_bench + SAVE ARTIFACT build/bin + +preset-wasm-bench: + FROM +preset-wasm-threads + RUN cmake --build build --target ultra_honk_bench --target client_ivc_bench + SAVE ARTIFACT build/bin + +# test images +preset-release-assert-test: + FROM +preset-release-assert + # build all targets for tests + RUN cmake --build build + SAVE ARTIFACT build/bin + +# Sent to the bench runner using a earthly-cloud build x86 --push +bench-base --bench_mode=true +# then we can run earthly-cloud bench x86 +bench-ultra-honk etc +bench-base: + ARG EARTHLY_GIT_HASH + ARG TARGETARCH + ARG bench_mode=build + LOCALLY + IF [ $bench_mode = cache ] + FROM aztecprotocol/bb-bench-base:$TARGETARCH-$EARTHLY_GIT_HASH + ELSE + FROM +source + COPY +preset-op-count-time-bench/bin/*_bench op-count-time/bin/ + COPY +preset-op-count-bench/bin/*_bench op-count/bin/ + COPY +preset-release-bench/bin/*_bench release/bin/ + COPY +preset-wasm-bench/bin/*_bench wasm/bin/ + SAVE IMAGE --push aztecprotocol/bb-bench-base:$TARGETARCH-$EARTHLY_GIT_HASH + END +# Runs on the bench image, sent from the builder runner bench-ultra-honk: - DO +BENCH_RELEASE --target=ultra_honk_bench --args="--benchmark_filter=construct_proof_ultrahonk_power_of_2/20$" - DO +BENCH_WASM --target=ultra_honk_bench --args="--benchmark_filter=construct_proof_ultrahonk_power_of_2/20$" + FROM +bench-base + # install SRS needed for proving + COPY --dir ./srs_db/+build/. srs_db + RUN cd release && ./bin/ultra_honk_bench --benchmark_filter="construct_proof_ultrahonk_power_of_2/20$" + RUN cd op-count && ./bin/ultra_honk_bench --benchmark_filter="construct_proof_ultrahonk_power_of_2/20$" + RUN cd op-count-time && ./bin/ultra_honk_bench --benchmark_filter="construct_proof_ultrahonk_power_of_2/20$" + COPY +wasmtime/wasmtime /usr/bin/wasmtime + RUN cd wasm && wasmtime run --env HARDWARE_CONCURRENCY=16 -Wthreads=y -Sthreads=y --dir=".." ./bin/ultra_honk_bench --benchmark_filter="construct_proof_ultrahonk_power_of_2/20$" bench-client-ivc: - DO +BENCH_RELEASE --target=client_ivc_bench --args="--benchmark_filter=ClientIVCBench/Full/6$" - DO +BENCH_RELEASE --target=client_ivc_bench --args="--benchmark_filter=ClientIVCBench/Full/6$" - DO +BENCH_WASM --target=client_ivc_bench --args="--benchmark_filter=ClientIVCBench/Full/6$" + FROM +bench-base + # install SRS needed for proving + COPY --dir ./srs_db/+build/. srs_db + RUN cd release && ./bin/client_ivc_bench --benchmark_filter="ClientIVCBench/Full/6$" + RUN cd op-count && ./bin/client_ivc_bench --benchmark_filter="ClientIVCBench/Full/6$" + RUN cd op-count-time && ./bin/client_ivc_bench --benchmark_filter="ClientIVCBench/Full/6$" + COPY +wasmtime/wasmtime /usr/bin/wasmtime + RUN cd wasm && wasmtime run --env HARDWARE_CONCURRENCY=16 -Wthreads=y -Sthreads=y --dir=".." ./bin/client_ivc_bench --benchmark_filter="ClientIVCBench/Full/6$" -build: # default target - BUILD +preset-release - BUILD +preset-wasm-threads +test-clang-format: + FROM +source + COPY .clang-format . + COPY format.sh . + RUN ./format.sh check test: BUILD +test-clang-format - FROM +preset-release-assert-all - COPY --dir ./srs_db/+build/. ../srs_db - RUN GTEST_COLOR=1 ctest -j$(nproc) --output-on-failure - -# Functions -RUN_CMAKE: - FUNCTION - # Runs cmake build and leaves binary artifacts at 'bin'. Uses a mounted cache - # for incremental rebuilds. - ARG configure # cmake configure flags - ARG build # cmake build flags - WORKDIR /build - # Use a mount for incremental builds locally. - # TODO(AD): To be determined: does this get us in trouble in CI? - RUN --mount type=cache,id="$configure-build",target=/build/build \ - (cmake $configure -Bbuild || (rm -f build/CMakeCache.txt && cmake $configure -Bbuild)) && \ - cmake --build build $build && \ - cp -r build build-tmp - # move the temporary build folder back - # this is because the cached build goes away - RUN rm -rf build && mv build-tmp build - WORKDIR /build/build - -BENCH_RELEASE: - FUNCTION - ARG target - ARG args - FROM +preset-release - DO +RUN_CMAKE --configure="--preset clang16" --build="--target $target" - COPY --dir ./srs_db/+build/. ../srs_db - RUN ./bin/$target $args - -BENCH_OP_COUNT_TIME: - FUNCTION - ARG target - ARG args - FROM +preset-op-count-time - DO +RUN_CMAKE --configure="--preset op-count-time" --build="--target $target" - COPY --dir ./srs_db:+build/. ../srs_db - RUN ./bin/$target $args - -BENCH_OP_COUNT: - FUNCTION - ARG target - ARG args - FROM +preset-op-count - DO +RUN_CMAKE --configure="--preset op-count" --build="--target $target" - COPY --dir ./srs_db/+build/. ../srs_db - RUN ./bin/$target $args - -BENCH_WASM: - FUNCTION - ARG target - ARG args - FROM +preset-wasm-threads - DO +RUN_CMAKE --configure="--preset wasm-threads" --build="--target $target" - COPY --dir ./srs_db/+build/. ../srs_db - # install - COPY +wasmtime/wasmtime /usr/bin/wasmtime - RUN wasmtime run --env HARDWARE_CONCURRENCY=8 -Wthreads=y -Sthreads=y --dir=.. ./bin/$target $args + FROM +preset-release-assert-test + COPY --dir ./srs_db/+build/. srs_db + RUN cd build && GTEST_COLOR=1 ctest -j$(nproc) --output-on-failure diff --git a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp index 701c8e5b67d..7c35497b1f5 100644 --- a/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp +++ b/barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/ultra_honk_rounds.bench.cpp @@ -3,6 +3,7 @@ #include "barretenberg/benchmark/ultra_bench/mock_circuits.hpp" #include "barretenberg/common/op_count_google_bench.hpp" #include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp" +#include "barretenberg/ultra_honk/oink_prover.hpp" #include "barretenberg/ultra_honk/ultra_prover.hpp" using namespace benchmark; @@ -44,15 +45,16 @@ BB_PROFILE static void test_round_inner(State& state, GoblinUltraProver& prover, BB_REPORT_OP_COUNT_BENCH_CANCEL(); } }; - - time_if_index(PREAMBLE, [&] { prover.oink_prover.execute_preamble_round(); }); - time_if_index(WIRE_COMMITMENTS, [&] { prover.oink_prover.execute_wire_commitments_round(); }); - time_if_index(SORTED_LIST_ACCUMULATOR, [&] { prover.oink_prover.execute_sorted_list_accumulator_round(); }); - time_if_index(LOG_DERIVATIVE_INVERSE, [&] { prover.oink_prover.execute_log_derivative_inverse_round(); }); - time_if_index(GRAND_PRODUCT_COMPUTATION, [&] { prover.oink_prover.execute_grand_product_computation_round(); }); - time_if_index(GENERATE_ALPHAS, [&] { prover.instance->alphas = prover.oink_prover.generate_alphas_round(); }); + OinkProver oink_prover(prover.instance->proving_key, prover.transcript); + time_if_index(PREAMBLE, [&] { oink_prover.execute_preamble_round(); }); + time_if_index(WIRE_COMMITMENTS, [&] { oink_prover.execute_wire_commitments_round(); }); + time_if_index(SORTED_LIST_ACCUMULATOR, [&] { oink_prover.execute_sorted_list_accumulator_round(); }); + time_if_index(LOG_DERIVATIVE_INVERSE, [&] { oink_prover.execute_log_derivative_inverse_round(); }); + time_if_index(GRAND_PRODUCT_COMPUTATION, [&] { oink_prover.execute_grand_product_computation_round(); }); + time_if_index(GENERATE_ALPHAS, [&] { prover.instance->alphas = oink_prover.generate_alphas_round(); }); // we need to get the relation_parameters and prover_polynomials from the oink_prover - prover.instance->relation_parameters = prover.oink_prover.relation_parameters; + prover.instance->proving_key = std::move(oink_prover.proving_key); + prover.instance->relation_parameters = oink_prover.relation_parameters; prover.instance->prover_polynomials = GoblinUltraFlavor::ProverPolynomials(prover.instance->proving_key); time_if_index(RELATION_CHECK, [&] { prover.execute_relation_check_rounds(); }); time_if_index(ZEROMORPH, [&] { prover.execute_zeromorph_rounds(); }); diff --git a/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp b/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp index ef232fcbf3f..fb10a67f9eb 100644 --- a/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp +++ b/barretenberg/cpp/src/barretenberg/client_ivc/mock_kernel_pinning.test.cpp @@ -37,7 +37,7 @@ TEST_F(MockKernelTest, PinFoldingKernelSizes) kernel_circuit, { func_fold_proof, ivc.vks.func_vk }, {}, kernel_acc); auto kernel_fold_proof = ivc.accumulate(kernel_circuit); - EXPECT_EQ(ivc.prover_instance->proving_key->log_circuit_size, 17); + EXPECT_EQ(ivc.prover_instance->proving_key.log_circuit_size, 17); GoblinUltraCircuitBuilder circuit_3{ ivc.goblin.op_queue }; GoblinMockCircuits::construct_mock_function_circuit(circuit_3); @@ -49,5 +49,5 @@ TEST_F(MockKernelTest, PinFoldingKernelSizes) { func_fold_proof, ivc.vks.func_vk }, kernel_acc); auto instance = std::make_shared(kernel_circuit); - EXPECT_EQ(instance->proving_key->log_circuit_size, 17); + EXPECT_EQ(instance->proving_key.log_circuit_size, 17); } \ No newline at end of file diff --git a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp index 5710d5c5b67..6399bbff954 100644 --- a/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/eccvm/eccvm_prover.cpp @@ -174,6 +174,9 @@ template void ECCVMProver_::execute_transcript_co RefArray univariate_polynomials{ key->transcript_op, key->transcript_Px, key->transcript_Py, key->transcript_z1, key->transcript_z2, hack }; std::array univariate_evaluations; + for (auto [eval, polynomial] : zip_view(univariate_evaluations, univariate_polynomials)) { + eval = polynomial.evaluate(evaluation_challenge_x); + } // Construct the batched polynomial and batched evaluation Polynomial batched_univariate{ key->circuit_size }; diff --git a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp index 005b7d523c6..b232fa00799 100644 --- a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp +++ b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.cpp @@ -6,11 +6,10 @@ namespace bb { template -void ExecutionTrace_::populate(Builder& builder, - const std::shared_ptr& proving_key) +void ExecutionTrace_::populate(Builder& builder, typename Flavor::ProvingKey& proving_key) { // Construct wire polynomials, selector polynomials, and copy cycles from raw circuit data - auto trace_data = construct_trace_data(builder, proving_key->circuit_size); + auto trace_data = construct_trace_data(builder, proving_key.circuit_size); add_wires_and_selectors_to_proving_key(trace_data, builder, proving_key); @@ -23,46 +22,48 @@ void ExecutionTrace_::populate(Builder& builder, } // Compute the permutation argument polynomials (sigma/id) and add them to proving key - compute_permutation_argument_polynomials(builder, proving_key.get(), trace_data.copy_cycles); + compute_permutation_argument_polynomials(builder, &proving_key, trace_data.copy_cycles); } template -void ExecutionTrace_::add_wires_and_selectors_to_proving_key( - TraceData& trace_data, Builder& builder, const std::shared_ptr& proving_key) +void ExecutionTrace_::add_wires_and_selectors_to_proving_key(TraceData& trace_data, + Builder& builder, + typename Flavor::ProvingKey& proving_key) { if constexpr (IsHonkFlavor) { - for (auto [pkey_wire, trace_wire] : zip_view(proving_key->get_wires(), trace_data.wires)) { + for (auto [pkey_wire, trace_wire] : zip_view(proving_key.get_wires(), trace_data.wires)) { pkey_wire = trace_wire.share(); } - for (auto [pkey_selector, trace_selector] : zip_view(proving_key->get_selectors(), trace_data.selectors)) { + for (auto [pkey_selector, trace_selector] : zip_view(proving_key.get_selectors(), trace_data.selectors)) { pkey_selector = trace_selector.share(); } - proving_key->pub_inputs_offset = trace_data.pub_inputs_offset; + proving_key.pub_inputs_offset = trace_data.pub_inputs_offset; } else if constexpr (IsPlonkFlavor) { for (size_t idx = 0; idx < trace_data.wires.size(); ++idx) { std::string wire_tag = "w_" + std::to_string(idx + 1) + "_lagrange"; - proving_key->polynomial_store.put(wire_tag, std::move(trace_data.wires[idx])); + proving_key.polynomial_store.put(wire_tag, std::move(trace_data.wires[idx])); } for (size_t idx = 0; idx < trace_data.selectors.size(); ++idx) { - proving_key->polynomial_store.put(builder.selector_names[idx] + "_lagrange", - std::move(trace_data.selectors[idx])); + proving_key.polynomial_store.put(builder.selector_names[idx] + "_lagrange", + std::move(trace_data.selectors[idx])); } } } template -void ExecutionTrace_::add_memory_records_to_proving_key( - TraceData& trace_data, Builder& builder, const std::shared_ptr& proving_key) +void ExecutionTrace_::add_memory_records_to_proving_key(TraceData& trace_data, + Builder& builder, + typename Flavor::ProvingKey& proving_key) requires IsUltraPlonkOrHonk { - ASSERT(proving_key->memory_read_records.empty() && proving_key->memory_write_records.empty()); + ASSERT(proving_key.memory_read_records.empty() && proving_key.memory_write_records.empty()); // Update indices of RAM/ROM reads/writes based on where block containing these gates sits in the trace for (auto& index : builder.memory_read_records) { - proving_key->memory_read_records.emplace_back(index + trace_data.ram_rom_offset); + proving_key.memory_read_records.emplace_back(index + trace_data.ram_rom_offset); } for (auto& index : builder.memory_write_records) { - proving_key->memory_write_records.emplace_back(index + trace_data.ram_rom_offset); + proving_key.memory_write_records.emplace_back(index + trace_data.ram_rom_offset); } } @@ -135,20 +136,20 @@ template void ExecutionTrace_::populate_public_inputs_blo } template -void ExecutionTrace_::add_ecc_op_wires_to_proving_key( - Builder& builder, const std::shared_ptr& proving_key) +void ExecutionTrace_::add_ecc_op_wires_to_proving_key(Builder& builder, + typename Flavor::ProvingKey& proving_key) requires IsGoblinFlavor { // Initialize the ecc op wire polynomials to zero on the whole domain std::array op_wire_polynomials; for (auto& poly : op_wire_polynomials) { - poly = Polynomial{ proving_key->circuit_size }; + poly = Polynomial{ proving_key.circuit_size }; } - Polynomial ecc_op_selector{ proving_key->circuit_size }; + Polynomial ecc_op_selector{ proving_key.circuit_size }; // Copy the ecc op data from the conventional wires into the op wires over the range of ecc op gates const size_t op_wire_offset = Flavor::has_zero_row ? 1 : 0; - for (auto [ecc_op_wire, wire] : zip_view(op_wire_polynomials, proving_key->get_wires())) { + for (auto [ecc_op_wire, wire] : zip_view(op_wire_polynomials, proving_key.get_wires())) { for (size_t i = 0; i < builder.blocks.ecc_op.size(); ++i) { size_t idx = i + op_wire_offset; ecc_op_wire[idx] = wire[idx]; @@ -156,11 +157,11 @@ void ExecutionTrace_::add_ecc_op_wires_to_proving_key( } } - proving_key->ecc_op_wire_1 = op_wire_polynomials[0].share(); - proving_key->ecc_op_wire_2 = op_wire_polynomials[1].share(); - proving_key->ecc_op_wire_3 = op_wire_polynomials[2].share(); - proving_key->ecc_op_wire_4 = op_wire_polynomials[3].share(); - proving_key->lagrange_ecc_op = ecc_op_selector.share(); + proving_key.ecc_op_wire_1 = op_wire_polynomials[0].share(); + proving_key.ecc_op_wire_2 = op_wire_polynomials[1].share(); + proving_key.ecc_op_wire_3 = op_wire_polynomials[2].share(); + proving_key.ecc_op_wire_4 = op_wire_polynomials[3].share(); + proving_key.lagrange_ecc_op = ecc_op_selector.share(); } template class ExecutionTrace_; diff --git a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp index 633dc618ff9..3dd3899242e 100644 --- a/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp +++ b/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp @@ -42,7 +42,7 @@ template class ExecutionTrace_ { * * @param builder */ - static void populate(Builder& builder, const std::shared_ptr&); + static void populate(Builder& builder, ProvingKey&); private: /** @@ -54,7 +54,7 @@ template class ExecutionTrace_ { */ static void add_wires_and_selectors_to_proving_key(TraceData& trace_data, Builder& builder, - const std::shared_ptr& proving_key); + typename Flavor::ProvingKey& proving_key); /** * @brief Add the memory records indicating which rows correspond to RAM/ROM reads/writes @@ -70,7 +70,7 @@ template class ExecutionTrace_ { */ static void add_memory_records_to_proving_key(TraceData& trace_data, Builder& builder, - const std::shared_ptr& proving_key) + typename Flavor::ProvingKey& proving_key) requires IsUltraPlonkOrHonk; /** @@ -98,8 +98,7 @@ template class ExecutionTrace_ { * @param builder * @param proving_key */ - static void add_ecc_op_wires_to_proving_key(Builder& builder, - const std::shared_ptr& proving_key) + static void add_ecc_op_wires_to_proving_key(Builder& builder, typename Flavor::ProvingKey& proving_key) requires IsGoblinFlavor; }; diff --git a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp index 5b1f4824f03..7f15cc14fe0 100644 --- a/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp @@ -165,19 +165,6 @@ class VerificationKey_ : public PrecomputedCommitments { this->log_circuit_size = numeric::get_msb(circuit_size); this->num_public_inputs = num_public_inputs; }; - - template VerificationKey_(const ProvingKeyPtr& proving_key) - { - this->pcs_verification_key = std::make_shared(); - this->circuit_size = proving_key->circuit_size; - this->log_circuit_size = numeric::get_msb(this->circuit_size); - this->num_public_inputs = proving_key->num_public_inputs; - this->pub_inputs_offset = proving_key->pub_inputs_offset; - - for (auto [polynomial, commitment] : zip_view(proving_key->get_precomputed_polynomials(), this->get_all())) { - commitment = proving_key->commitment_key->commit(polynomial); - } - } }; // Because of how Gemini is written, is importat to put the polynomials out in this order. diff --git a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp index ed23f29679e..35a7e321120 100644 --- a/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp +++ b/barretenberg/cpp/src/barretenberg/goblin/mock_circuits_pinning.test.cpp @@ -25,9 +25,9 @@ TEST_F(MockCircuitsPinning, FunctionSizes) GoblinMockCircuits::construct_mock_function_circuit(app_circuit, large); auto instance = std::make_shared(app_circuit); if (large) { - EXPECT_EQ(instance->proving_key->log_circuit_size, 19); + EXPECT_EQ(instance->proving_key.log_circuit_size, 19); } else { - EXPECT_EQ(instance->proving_key->log_circuit_size, 17); + EXPECT_EQ(instance->proving_key.log_circuit_size, 17); }; }; run_test(true); @@ -51,9 +51,9 @@ TEST_F(MockCircuitsPinning, RecursionKernelSizes) auto instance = std::make_shared(kernel_circuit); if (large) { - EXPECT_EQ(instance->proving_key->log_circuit_size, 17); + EXPECT_EQ(instance->proving_key.log_circuit_size, 17); } else { - EXPECT_EQ(instance->proving_key->log_circuit_size, 17); + EXPECT_EQ(instance->proving_key.log_circuit_size, 17); }; } }; diff --git a/barretenberg/cpp/src/barretenberg/plonk/composer/standard_composer.cpp b/barretenberg/cpp/src/barretenberg/plonk/composer/standard_composer.cpp index f4b016460b3..aee76ed681e 100644 --- a/barretenberg/cpp/src/barretenberg/plonk/composer/standard_composer.cpp +++ b/barretenberg/cpp/src/barretenberg/plonk/composer/standard_composer.cpp @@ -41,7 +41,7 @@ std::shared_ptr StandardComposer::compute_proving_key(Circui subgroup_size, circuit_constructor.public_inputs.size(), crs, CircuitType::STANDARD); // Construct and add to proving key the wire, selector and copy constraint polynomials - Trace::populate(circuit_constructor, circuit_proving_key); + Trace::populate(circuit_constructor, *circuit_proving_key); // Make all selectors nonzero enforce_nonzero_selector_polynomials(circuit_constructor, circuit_proving_key.get()); diff --git a/barretenberg/cpp/src/barretenberg/plonk/composer/ultra_composer.cpp b/barretenberg/cpp/src/barretenberg/plonk/composer/ultra_composer.cpp index e0e24ca7efb..bc856916cb8 100644 --- a/barretenberg/cpp/src/barretenberg/plonk/composer/ultra_composer.cpp +++ b/barretenberg/cpp/src/barretenberg/plonk/composer/ultra_composer.cpp @@ -166,7 +166,7 @@ std::shared_ptr UltraComposer::compute_proving_key(CircuitBuilder& std::make_shared(subgroup_size, circuit.public_inputs.size(), crs, CircuitType::ULTRA); // Construct and add to proving key the wire, selector and copy constraint polynomials - Trace::populate(circuit, circuit_proving_key); + Trace::populate(circuit, *circuit_proving_key); enforce_nonzero_selector_polynomials(circuit, circuit_proving_key.get()); diff --git a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/instance_inspector.hpp b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/instance_inspector.hpp index d0913aef1c4..add3db82ec1 100644 --- a/barretenberg/cpp/src/barretenberg/plonk_honk_shared/instance_inspector.hpp +++ b/barretenberg/cpp/src/barretenberg/plonk_honk_shared/instance_inspector.hpp @@ -49,7 +49,7 @@ void print_databus_info(auto& prover_instance) { info("\nInstance Inspector: Printing databus gate info."); auto& key = prover_instance->proving_key; - for (size_t idx = 0; idx < prover_instance->proving_key->circuit_size; ++idx) { + for (size_t idx = 0; idx < prover_instance->proving_key.circuit_size; ++idx) { if (key->q_busread[idx] == 1) { info("idx = ", idx); info("q_busread = ", key->q_busread[idx]); diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/combiner.test.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/combiner.test.cpp index bafae22398f..2e6f87f73f9 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/combiner.test.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/combiner.test.cpp @@ -45,8 +45,8 @@ TEST(Protogalaxy, CombinerOn2Instances) /*log_circuit_size=*/1, idx * 128); restrict_to_standard_arithmetic_relation(prover_polynomials); instance->prover_polynomials = std::move(prover_polynomials); - instance->proving_key = std::make_shared(); - instance->proving_key->circuit_size = 2; + instance->proving_key = Flavor::ProvingKey(); + instance->proving_key.circuit_size = 2; instance_data[idx] = instance; } @@ -79,8 +79,8 @@ TEST(Protogalaxy, CombinerOn2Instances) /*log_circuit_size=*/1); restrict_to_standard_arithmetic_relation(prover_polynomials); instance->prover_polynomials = std::move(prover_polynomials); - instance->proving_key = std::make_shared(); - instance->proving_key->circuit_size = 2; + instance->proving_key = Flavor::ProvingKey(); + instance->proving_key.circuit_size = 2; instance_data[idx] = instance; } @@ -170,8 +170,8 @@ TEST(Protogalaxy, CombinerOn4Instances) auto prover_polynomials = get_zero_prover_polynomials( /*log_circuit_size=*/1); instance->prover_polynomials = std::move(prover_polynomials); - instance->proving_key = std::make_shared(); - instance->proving_key->circuit_size = 2; + instance->proving_key = Flavor::ProvingKey(); + instance->proving_key.circuit_size = 2; instance_data[idx] = instance; } diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp index 0b13eefeb37..1175e6d7f8f 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/decider_prover.cpp @@ -17,7 +17,7 @@ DeciderProver_::DeciderProver_(const std::shared_ptr& inst, const std::shared_ptr& transcript) : accumulator(std::move(inst)) , transcript(transcript) - , commitment_key(inst->proving_key->commitment_key) + , commitment_key(inst->proving_key.commitment_key) {} /** @@ -28,7 +28,7 @@ DeciderProver_::DeciderProver_(const std::shared_ptr& inst, template void DeciderProver_::execute_relation_check_rounds() { using Sumcheck = SumcheckProver; - auto instance_size = accumulator->proving_key->circuit_size; + auto instance_size = accumulator->proving_key.circuit_size; auto sumcheck = Sumcheck(instance_size, transcript); sumcheck_output = sumcheck.prove(accumulator); } diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp index 453e0d844d7..da44a6e3054 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy.test.cpp @@ -79,7 +79,7 @@ template class ProtoGalaxyTests : public testing::Test { static void check_accumulator_target_sum_manual(std::shared_ptr& accumulator, bool expected_result) { - auto instance_size = accumulator->proving_key->circuit_size; + auto instance_size = accumulator->proving_key.circuit_size; auto expected_honk_evals = ProtoGalaxyProver::compute_full_honk_evaluations( accumulator->prover_polynomials, accumulator->alphas, accumulator->relation_parameters); // Construct pow(\vec{betas*}) as in the paper @@ -124,13 +124,13 @@ template class ProtoGalaxyTests : public testing::Test { instance->relation_parameters.beta = FF::random_element(); instance->relation_parameters.gamma = FF::random_element(); - instance->proving_key->compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, - instance->relation_parameters.eta_two, - instance->relation_parameters.eta_three); + instance->proving_key.compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, + instance->relation_parameters.eta_two, + instance->relation_parameters.eta_three); if constexpr (IsGoblinFlavor) { - instance->proving_key->compute_logderivative_inverse(instance->relation_parameters); + instance->proving_key.compute_logderivative_inverse(instance->relation_parameters); } - instance->proving_key->compute_grand_product_polynomials(instance->relation_parameters); + instance->proving_key.compute_grand_product_polynomials(instance->relation_parameters); instance->prover_polynomials = ProverPolynomials(instance->proving_key); for (auto& alpha : instance->alphas) { diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp index c1ce74400bf..8e4fcdb2e41 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.cpp @@ -6,9 +6,10 @@ template void ProtoGalaxyProver_::finalise_and_send_instance(std::shared_ptr instance, const std::string& domain_separator) { - OinkProver oink_prover(instance->proving_key, commitment_key, transcript, domain_separator + '_'); + OinkProver oink_prover(instance->proving_key, transcript, domain_separator + '_'); - auto [relation_params, alphas] = oink_prover.prove(); + auto [proving_key, relation_params, alphas] = oink_prover.prove(); + instance->proving_key = std::move(proving_key); instance->relation_parameters = std::move(relation_params); instance->prover_polynomials = ProverPolynomials(instance->proving_key); instance->alphas = std::move(alphas); @@ -22,7 +23,7 @@ template void ProtoGalaxyProver_::prepa if (!instance->is_accumulator) { finalise_and_send_instance(instance, domain_separator); instance->target_sum = 0; - instance->gate_challenges = std::vector(instance->proving_key->log_circuit_size, 0); + instance->gate_challenges = std::vector(instance->proving_key.log_circuit_size, 0); } idx++; @@ -50,9 +51,8 @@ std::shared_ptr ProtoGalaxyProver_ lagranges{ FF(1) - challenge, challenge }; // TODO(https://github.com/AztecProtocol/barretenberg/issues/881): bad pattern - auto next_accumulator = std::make_shared(); + auto next_accumulator = std::move(instances[0]); next_accumulator->is_accumulator = true; - next_accumulator->proving_key = instances[0]->proving_key; // Compute the next target sum and send the next folding parameters to the verifier FF next_target_sum = @@ -61,16 +61,20 @@ std::shared_ptr ProtoGalaxyProver_target_sum = next_target_sum; next_accumulator->gate_challenges = instances.next_gate_challenges; - // Initialize prover polynomials - ProvingKey acc_proving_key_polys; - for (auto& polynomial : acc_proving_key_polys.get_all()) { - polynomial = typename Flavor::Polynomial(instances[0]->proving_key->circuit_size); - } + // Initialize accumulator proving key polynomials + auto accumulator_polys = next_accumulator->proving_key.get_all(); + run_loop_in_parallel(Flavor::NUM_FOLDED_ENTITIES, [&](size_t start_idx, size_t end_idx) { + for (size_t poly_idx = start_idx; poly_idx < end_idx; poly_idx++) { + auto& acc_poly = accumulator_polys[poly_idx]; + for (auto& acc_el : acc_poly) { + acc_el *= lagranges[0]; + } + } + }); - // Fold the prover key polynomials - for (size_t inst_idx = 0; inst_idx < ProverInstances::NUM; inst_idx++) { - auto accumulator_polys = acc_proving_key_polys.get_all(); - auto input_polys = instances[inst_idx]->proving_key->get_all(); + // Fold the proving key polynomials + for (size_t inst_idx = 1; inst_idx < ProverInstances::NUM; inst_idx++) { + auto input_polys = instances[inst_idx]->proving_key.get_all(); run_loop_in_parallel(Flavor::NUM_FOLDED_ENTITIES, [&](size_t start_idx, size_t end_idx) { for (size_t poly_idx = start_idx; poly_idx < end_idx; poly_idx++) { auto& acc_poly = accumulator_polys[poly_idx]; @@ -81,23 +85,17 @@ std::shared_ptr ProtoGalaxyProver_proving_key->get_all(), acc_proving_key_polys.get_all())) { - next_acc_poly = std::move(acc_poly); - } - - // Fold public data ϕ from all instances to produce ϕ* and add it to the transcript. As part of the folding - // verification, the verifier will produce ϕ* as well and check it against what was sent by the prover. // Fold the public inputs and send to the verifier - next_accumulator->proving_key->public_inputs = std::vector(instances[0]->proving_key->public_inputs.size(), 0); size_t el_idx = 0; - for (auto& el : next_accumulator->proving_key->public_inputs) { + for (auto& el : next_accumulator->proving_key.public_inputs) { + el *= lagranges[0]; size_t inst = 0; - for (auto& instance : instances) { + for (size_t inst_idx = 1; inst_idx < ProverInstances::NUM; inst_idx++) { + auto& instance = instances[inst_idx]; // TODO(https://github.com/AztecProtocol/barretenberg/issues/830) - if (instance->proving_key->num_public_inputs >= next_accumulator->proving_key->num_public_inputs) { - el += instance->proving_key->public_inputs[el_idx] * lagranges[inst]; + if (instance->proving_key.num_public_inputs >= next_accumulator->proving_key.num_public_inputs) { + el += instance->proving_key.public_inputs[el_idx] * lagranges[inst]; inst++; }; } @@ -124,6 +122,7 @@ std::shared_ptr ProtoGalaxyProver_relation_parameters = folded_relation_parameters; + next_accumulator->proving_key = std::move(instances[0]->proving_key); // Derive the prover polynomials from the proving key polynomials since we only fold the unshifted polynomials. This // is extremely cheap since we only call .share() and .shifted() polynomial functions. We need the folded prover // polynomials for the decider. @@ -142,14 +141,14 @@ template void ProtoGalaxyProver_::pertu BB_OP_COUNT_TIME_NAME("ProtoGalaxyProver_::perturbator_round"); state.accumulator = get_accumulator(); FF delta = transcript->template get_challenge("delta"); - state.deltas = compute_round_challenge_pows(state.accumulator->proving_key->log_circuit_size, delta); - state.perturbator = Polynomial(state.accumulator->proving_key->log_circuit_size + 1); // initialize to all zeros + state.deltas = compute_round_challenge_pows(state.accumulator->proving_key.log_circuit_size, delta); + state.perturbator = Polynomial(state.accumulator->proving_key.log_circuit_size + 1); // initialize to all zeros // compute perturbator only if this is not the first round and has an accumulator if (state.accumulator->is_accumulator) { state.perturbator = compute_perturbator(state.accumulator, state.deltas); // Prover doesn't send the constant coefficient of F because this is supposed to be equal to the target sum of // the accumulator which the folding verifier has from the previous iteration. - for (size_t idx = 1; idx <= state.accumulator->proving_key->log_circuit_size; idx++) { + for (size_t idx = 1; idx <= state.accumulator->proving_key.log_circuit_size; idx++) { transcript->send_to_verifier("perturbator_" + std::to_string(idx), state.perturbator[idx]); } } diff --git a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.hpp b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.hpp index ca5233c5eba..674163ab3ce 100644 --- a/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/protogalaxy/protogalaxy_prover.hpp @@ -71,7 +71,7 @@ template class ProtoGalaxyProver_ { ProtoGalaxyProver_(const std::vector>& insts) : instances(ProverInstances(insts)) // TODO(https://github.com/AztecProtocol/barretenberg/issues/878) - , commitment_key(instances[1]->proving_key->commitment_key){}; + , commitment_key(instances[1]->proving_key.commitment_key){}; ~ProtoGalaxyProver_() = default; /** @@ -307,7 +307,7 @@ template class ProtoGalaxyProver_ { ExtendedUnivariateWithRandomization compute_combiner(const ProverInstances& instances, PowPolynomial& pow_betas) { BB_OP_COUNT_TIME(); - size_t common_instance_size = instances[0]->proving_key->circuit_size; + size_t common_instance_size = instances[0]->proving_key.circuit_size; pow_betas.compute_values(); // Determine number of threads for multithreading. // Note: Multithreading is "on" for every round but we reduce the number of threads from the max available based diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/goblin_ultra_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/goblin_ultra_flavor.hpp index 9a9d557c420..677749016b5 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/goblin_ultra_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/goblin_ultra_flavor.hpp @@ -407,8 +407,27 @@ class GoblinUltraFlavor { * circuits. * @todo TODO(https://github.com/AztecProtocol/barretenberg/issues/876) */ - using VerificationKey = VerificationKey_, VerifierCommitmentKey>; + // using VerificationKey = VerificationKey_, VerifierCommitmentKey>; + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + public: + VerificationKey() = default; + VerificationKey(const size_t circuit_size, const size_t num_public_inputs) + : VerificationKey_(circuit_size, num_public_inputs) + {} + VerificationKey(ProvingKey& proving_key) + { + this->pcs_verification_key = std::make_shared(); + this->circuit_size = proving_key.circuit_size; + this->log_circuit_size = numeric::get_msb(this->circuit_size); + this->num_public_inputs = proving_key.num_public_inputs; + this->pub_inputs_offset = proving_key.pub_inputs_offset; + + for (auto [polynomial, commitment] : zip_view(proving_key.get_precomputed_polynomials(), this->get_all())) { + commitment = proving_key.commitment_key->commit(polynomial); + } + } + }; /** * @brief A container for storing the partially evaluated multivariates produced by sumcheck. */ @@ -451,6 +470,7 @@ class GoblinUltraFlavor { */ class ProverPolynomials : public AllEntities { public: + // TODO(https://github.com/AztecProtocol/barretenberg/issues/925), proving_key could be const ref ProverPolynomials(ProvingKey& proving_key) { for (auto [prover_poly, key_poly] : zip_view(this->get_unshifted(), proving_key.get_all())) { @@ -462,17 +482,6 @@ class GoblinUltraFlavor { prover_poly = key_poly.shifted(); } } - ProverPolynomials(std::shared_ptr& proving_key) - { - for (auto [prover_poly, key_poly] : zip_view(this->get_unshifted(), proving_key->get_all())) { - ASSERT(flavor_get_label(*this, prover_poly) == flavor_get_label(*proving_key, key_poly)); - prover_poly = key_poly.share(); - } - for (auto [prover_poly, key_poly] : zip_view(this->get_shifted(), proving_key->get_to_be_shifted())) { - ASSERT(flavor_get_label(*this, prover_poly) == (flavor_get_label(*proving_key, key_poly) + "_shift")); - prover_poly = key_poly.shifted(); - } - } // Define all operations as default, except copy construction/assignment ProverPolynomials() = default; ProverPolynomials& operator=(const ProverPolynomials&) = delete; diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp index 1e29d4a5ccb..bb40fe0c7ff 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_flavor.hpp @@ -387,8 +387,26 @@ class UltraFlavor { * that, and split out separate PrecomputedPolynomials/Commitments data for clarity but also for portability of our * circuits. */ - using VerificationKey = VerificationKey_, VerifierCommitmentKey>; - + // using VerificationKey = VerificationKey_, VerifierCommitmentKey>; + class VerificationKey : public VerificationKey_, VerifierCommitmentKey> { + public: + VerificationKey() = default; + VerificationKey(const size_t circuit_size, const size_t num_public_inputs) + : VerificationKey_(circuit_size, num_public_inputs) + {} + VerificationKey(ProvingKey& proving_key) + { + this->pcs_verification_key = std::make_shared(); + this->circuit_size = proving_key.circuit_size; + this->log_circuit_size = numeric::get_msb(this->circuit_size); + this->num_public_inputs = proving_key.num_public_inputs; + this->pub_inputs_offset = proving_key.pub_inputs_offset; + + for (auto [polynomial, commitment] : zip_view(proving_key.get_precomputed_polynomials(), this->get_all())) { + commitment = proving_key.commitment_key->commit(polynomial); + } + } + }; /** * @brief A field element for each entity of the flavor. These entities represent the prover polynomials * evaluated at one point. @@ -415,17 +433,6 @@ class UltraFlavor { prover_poly = key_poly.shifted(); } } - ProverPolynomials(std::shared_ptr& proving_key) - { - for (auto [prover_poly, key_poly] : zip_view(this->get_unshifted(), proving_key->get_all())) { - ASSERT(flavor_get_label(*this, prover_poly) == flavor_get_label(*proving_key, key_poly)); - prover_poly = key_poly.share(); - } - for (auto [prover_poly, key_poly] : zip_view(this->get_shifted(), proving_key->get_to_be_shifted())) { - ASSERT(flavor_get_label(*this, prover_poly) == (flavor_get_label(*proving_key, key_poly) + "_shift")); - prover_poly = key_poly.shifted(); - } - } // Define all operations as default, except copy construction/assignment ProverPolynomials() = default; ProverPolynomials& operator=(const ProverPolynomials&) = delete; diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp index ab56e521fad..3f0a6b18072 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp @@ -73,10 +73,10 @@ template void ProverInstance_::construct_table_polynomials(Circuit& circuit, size_t dyadic_circuit_size) { auto table_polynomials = construct_lookup_table_polynomials(circuit, dyadic_circuit_size); - proving_key->table_1 = table_polynomials[0].share(); - proving_key->table_2 = table_polynomials[1].share(); - proving_key->table_3 = table_polynomials[2].share(); - proving_key->table_4 = table_polynomials[3].share(); + proving_key.table_1 = table_polynomials[0].share(); + proving_key.table_2 = table_polynomials[1].share(); + proving_key.table_3 = table_polynomials[2].share(); + proving_key.table_4 = table_polynomials[3].share(); } template class ProverInstance_; diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp index 6d8437530dc..d17f45ce595 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp @@ -30,7 +30,7 @@ template class ProverInstance_ { using Trace = ExecutionTrace_; public: - std::shared_ptr proving_key; + ProvingKey proving_key; ProverPolynomials prover_polynomials; RelationSeparator alphas; @@ -53,7 +53,7 @@ template class ProverInstance_ { dyadic_circuit_size = compute_dyadic_size(circuit); - proving_key = std::make_shared(dyadic_circuit_size, circuit.public_inputs.size()); + proving_key = std::move(ProvingKey(dyadic_circuit_size, circuit.public_inputs.size())); // Construct and add to proving key the wire, selector and copy constraint polynomials Trace::populate(circuit, proving_key); @@ -66,19 +66,19 @@ template class ProverInstance_ { // First and last lagrange polynomials (in the full circuit size) const auto [lagrange_first, lagrange_last] = compute_first_and_last_lagrange_polynomials(dyadic_circuit_size); - proving_key->lagrange_first = lagrange_first; - proving_key->lagrange_last = lagrange_last; + proving_key.lagrange_first = lagrange_first; + proving_key.lagrange_last = lagrange_last; construct_table_polynomials(circuit, dyadic_circuit_size); - proving_key->sorted_polynomials = construct_sorted_list_polynomials(circuit, dyadic_circuit_size); + proving_key.sorted_polynomials = construct_sorted_list_polynomials(circuit, dyadic_circuit_size); - std::span public_wires_source = proving_key->w_r; + std::span public_wires_source = proving_key.w_r; // Construct the public inputs array - for (size_t i = 0; i < proving_key->num_public_inputs; ++i) { - size_t idx = i + proving_key->pub_inputs_offset; - proving_key->public_inputs.emplace_back(public_wires_source[idx]); + for (size_t i = 0; i < proving_key.num_public_inputs; ++i) { + size_t idx = i + proving_key.pub_inputs_offset; + proving_key.public_inputs.emplace_back(public_wires_source[idx]); } } diff --git a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.test.cpp b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.test.cpp index c4f9a0966e7..55834fac7b3 100644 --- a/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.test.cpp +++ b/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.test.cpp @@ -62,15 +62,15 @@ template class InstanceTests : public testing::Test { auto eta_two = FF::random_element(); auto eta_three = FF::random_element(); - auto sorted_list_polynomials = instance.proving_key->sorted_polynomials; + auto sorted_list_polynomials = instance.proving_key.sorted_polynomials; // Method 1: computed sorted list accumulator polynomial using prover library method - instance.proving_key->compute_sorted_list_accumulator(eta, eta_two, eta_three); - auto sorted_list_accumulator = instance.proving_key->sorted_accum; + instance.proving_key.compute_sorted_list_accumulator(eta, eta_two, eta_three); + auto sorted_list_accumulator = instance.proving_key.sorted_accum; // Compute s = s_1 + η*s_2 + η²*s_3 + η³*s_4 Polynomial sorted_list_accumulator_expected{ sorted_list_polynomials[0] }; - for (size_t i = 0; i < instance.proving_key->circuit_size; ++i) { + for (size_t i = 0; i < instance.proving_key.circuit_size; ++i) { sorted_list_accumulator_expected[i] += sorted_list_polynomials[1][i] * eta + sorted_list_polynomials[2][i] * eta_two + sorted_list_polynomials[3][i] * eta_three; diff --git a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_flavor.hpp b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_flavor.hpp index 164b11be335..f48cf345271 100644 --- a/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_flavor.hpp +++ b/barretenberg/cpp/src/barretenberg/translator_vm/goblin_translator_flavor.hpp @@ -1046,12 +1046,20 @@ class GoblinTranslatorFlavor { VerificationKey(const size_t circuit_size, const size_t num_public_inputs) : VerificationKey_(circuit_size, num_public_inputs) {} - - template - VerificationKey(const ProvingKeyPtr& proving_key) - : VerificationKey_(proving_key) - , public_inputs(proving_key->public_inputs) - {} + VerificationKey(const std::shared_ptr& proving_key) + : public_inputs(proving_key->public_inputs) + { + this->pcs_verification_key = std::make_shared(); + this->circuit_size = proving_key->circuit_size; + this->log_circuit_size = numeric::get_msb(this->circuit_size); + this->num_public_inputs = proving_key->num_public_inputs; + this->pub_inputs_offset = proving_key->pub_inputs_offset; + + for (auto [polynomial, commitment] : + zip_view(proving_key->get_precomputed_polynomials(), this->get_all())) { + commitment = proving_key->commitment_key->commit(polynomial); + } + } }; /** * @brief A field element for each entity of the flavor. These entities represent the prover polynomials diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/goblin_ultra_transcript.test.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/goblin_ultra_transcript.test.cpp index c9742ded1d4..0bccfa8084f 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/goblin_ultra_transcript.test.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/goblin_ultra_transcript.test.cpp @@ -156,7 +156,7 @@ TEST_F(GoblinUltraTranscriptTests, ProverManifestConsistency) auto proof = prover.construct_proof(); // Check that the prover generated manifest agrees with the manifest hard coded in this suite - auto manifest_expected = construct_goblin_ultra_honk_manifest(instance->proving_key->circuit_size); + auto manifest_expected = construct_goblin_ultra_honk_manifest(instance->proving_key.circuit_size); auto prover_manifest = prover.transcript->get_manifest(); // Note: a manifest can be printed using manifest.print() for (size_t round = 0; round < manifest_expected.size(); ++round) { diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp index c5e3eac18e2..700ece5181f 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.cpp @@ -29,6 +29,7 @@ template OinkProverOutput OinkProver::pro RelationSeparator alphas = generate_alphas_round(); return OinkProverOutput{ + .proving_key = std::move(proving_key), .relation_parameters = std::move(relation_parameters), .alphas = std::move(alphas), }; @@ -40,17 +41,17 @@ template OinkProverOutput OinkProver::pro */ template void OinkProver::execute_preamble_round() { - const auto circuit_size = static_cast(proving_key->circuit_size); - const auto num_public_inputs = static_cast(proving_key->num_public_inputs); + const auto circuit_size = static_cast(proving_key.circuit_size); + const auto num_public_inputs = static_cast(proving_key.num_public_inputs); transcript->send_to_verifier(domain_separator + "circuit_size", circuit_size); transcript->send_to_verifier(domain_separator + "public_input_size", num_public_inputs); transcript->send_to_verifier(domain_separator + "pub_inputs_offset", - static_cast(proving_key->pub_inputs_offset)); + static_cast(proving_key.pub_inputs_offset)); - ASSERT(proving_key->num_public_inputs == proving_key->public_inputs.size()); + ASSERT(proving_key.num_public_inputs == proving_key.public_inputs.size()); - for (size_t i = 0; i < proving_key->num_public_inputs; ++i) { - auto public_input_i = proving_key->public_inputs[i]; + for (size_t i = 0; i < proving_key.num_public_inputs; ++i) { + auto public_input_i = proving_key.public_inputs[i]; transcript->send_to_verifier(domain_separator + "public_input_" + std::to_string(i), public_input_i); } } @@ -64,9 +65,9 @@ template void OinkProver::execute_wire_commitment { // Commit to the first three wire polynomials of the instance // We only commit to the fourth wire polynomial after adding memory recordss - witness_commitments.w_l = commitment_key->commit(proving_key->w_l); - witness_commitments.w_r = commitment_key->commit(proving_key->w_r); - witness_commitments.w_o = commitment_key->commit(proving_key->w_o); + witness_commitments.w_l = commitment_key->commit(proving_key.w_l); + witness_commitments.w_r = commitment_key->commit(proving_key.w_r); + witness_commitments.w_o = commitment_key->commit(proving_key.w_o); auto wire_comms = witness_commitments.get_wires(); auto wire_labels = commitment_labels.get_wires(); @@ -76,10 +77,10 @@ template void OinkProver::execute_wire_commitment if constexpr (IsGoblinFlavor) { // Commit to Goblin ECC op wires - witness_commitments.ecc_op_wire_1 = commitment_key->commit(proving_key->ecc_op_wire_1); - witness_commitments.ecc_op_wire_2 = commitment_key->commit(proving_key->ecc_op_wire_2); - witness_commitments.ecc_op_wire_3 = commitment_key->commit(proving_key->ecc_op_wire_3); - witness_commitments.ecc_op_wire_4 = commitment_key->commit(proving_key->ecc_op_wire_4); + witness_commitments.ecc_op_wire_1 = commitment_key->commit(proving_key.ecc_op_wire_1); + witness_commitments.ecc_op_wire_2 = commitment_key->commit(proving_key.ecc_op_wire_2); + witness_commitments.ecc_op_wire_3 = commitment_key->commit(proving_key.ecc_op_wire_3); + witness_commitments.ecc_op_wire_4 = commitment_key->commit(proving_key.ecc_op_wire_4); auto op_wire_comms = witness_commitments.get_ecc_op_wires(); auto labels = commitment_labels.get_ecc_op_wires(); @@ -114,12 +115,12 @@ template void OinkProver::execute_sorted_list_acc relation_parameters.eta_two = eta_two; relation_parameters.eta_three = eta_three; - proving_key->compute_sorted_accumulator_polynomials( + proving_key.compute_sorted_accumulator_polynomials( relation_parameters.eta, relation_parameters.eta_two, relation_parameters.eta_three); // Commit to the sorted witness-table accumulator and the finalized (i.e. with memory records) fourth wire // polynomial - witness_commitments.sorted_accum = commitment_key->commit(proving_key->sorted_accum); - witness_commitments.w_4 = commitment_key->commit(proving_key->w_4); + witness_commitments.sorted_accum = commitment_key->commit(proving_key.sorted_accum); + witness_commitments.w_4 = commitment_key->commit(proving_key.w_4); transcript->send_to_verifier(domain_separator + commitment_labels.sorted_accum, witness_commitments.sorted_accum); transcript->send_to_verifier(domain_separator + commitment_labels.w_4, witness_commitments.w_4); @@ -153,10 +154,10 @@ template void OinkProver::execute_log_derivative_ template void OinkProver::execute_grand_product_computation_round() { - proving_key->compute_grand_product_polynomials(relation_parameters); + proving_key.compute_grand_product_polynomials(relation_parameters); - witness_commitments.z_perm = commitment_key->commit(proving_key->z_perm); - witness_commitments.z_lookup = commitment_key->commit(proving_key->z_lookup); + witness_commitments.z_perm = commitment_key->commit(proving_key.z_perm); + witness_commitments.z_lookup = commitment_key->commit(proving_key.z_lookup); transcript->send_to_verifier(domain_separator + commitment_labels.z_perm, witness_commitments.z_perm); transcript->send_to_verifier(domain_separator + commitment_labels.z_lookup, witness_commitments.z_lookup); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp index 14398ae6b18..c4d8ed1e4bc 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/oink_prover.hpp @@ -25,6 +25,7 @@ namespace bb { template struct OinkProverOutput { + typename Flavor::ProvingKey proving_key; bb::RelationParameters relation_parameters; typename Flavor::RelationSeparator alphas; }; @@ -44,7 +45,7 @@ template class OinkProver { using FF = typename Flavor::FF; public: - std::shared_ptr proving_key; + ProvingKey proving_key; std::shared_ptr transcript; std::shared_ptr commitment_key; std::string domain_separator; @@ -54,13 +55,12 @@ template class OinkProver { bb::RelationParameters relation_parameters; - OinkProver(const std::shared_ptr& proving_key, - const std::shared_ptr& commitment_key, + OinkProver(ProvingKey& proving_key, const std::shared_ptr& transcript, std::string domain_separator = "") - : proving_key(proving_key) + : proving_key(std::move(proving_key)) , transcript(transcript) - , commitment_key(commitment_key) + , commitment_key(this->proving_key.commitment_key) , domain_separator(std::move(domain_separator)) {} diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/relation_correctness.test.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/relation_correctness.test.cpp index 0e34783ee6b..ac3ca627ce5 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/relation_correctness.test.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/relation_correctness.test.cpp @@ -262,8 +262,8 @@ TEST_F(UltraRelationCorrectnessTests, Ultra) // Create a prover (it will compute proving key and witness) auto instance = std::make_shared>(builder); - auto proving_key = instance->proving_key; - auto circuit_size = proving_key->circuit_size; + auto& proving_key = instance->proving_key; + auto circuit_size = proving_key.circuit_size; // Generate eta, beta and gamma instance->relation_parameters.eta = FF::random_element(); @@ -272,18 +272,18 @@ TEST_F(UltraRelationCorrectnessTests, Ultra) instance->relation_parameters.beta = FF::random_element(); instance->relation_parameters.gamma = FF::random_element(); - instance->proving_key->compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, - instance->relation_parameters.eta_two, - instance->relation_parameters.eta_three); - instance->proving_key->compute_grand_product_polynomials(instance->relation_parameters); + instance->proving_key.compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, + instance->relation_parameters.eta_two, + instance->relation_parameters.eta_three); + instance->proving_key.compute_grand_product_polynomials(instance->relation_parameters); instance->prover_polynomials = Flavor::ProverPolynomials(instance->proving_key); // Check that selectors are nonzero to ensure corresponding relation has nontrivial contribution - ensure_non_zero(proving_key->q_arith); - ensure_non_zero(proving_key->q_delta_range); - ensure_non_zero(proving_key->q_lookup); - ensure_non_zero(proving_key->q_elliptic); - ensure_non_zero(proving_key->q_aux); + ensure_non_zero(proving_key.q_arith); + ensure_non_zero(proving_key.q_delta_range); + ensure_non_zero(proving_key.q_lookup); + ensure_non_zero(proving_key.q_elliptic); + ensure_non_zero(proving_key.q_aux); // Construct the round for applying sumcheck relations and results for storing computed results using Relations = typename Flavor::Relations; @@ -318,8 +318,8 @@ TEST_F(UltraRelationCorrectnessTests, GoblinUltra) // Create a prover (it will compute proving key and witness) auto instance = std::make_shared>(builder); - auto proving_key = instance->proving_key; - auto circuit_size = proving_key->circuit_size; + auto& proving_key = instance->proving_key; + auto circuit_size = proving_key.circuit_size; // Generate eta, beta and gamma instance->relation_parameters.eta = FF::random_element(); @@ -328,22 +328,22 @@ TEST_F(UltraRelationCorrectnessTests, GoblinUltra) instance->relation_parameters.beta = FF::random_element(); instance->relation_parameters.gamma = FF::random_element(); - instance->proving_key->compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, - instance->relation_parameters.eta_two, - instance->relation_parameters.eta_three); - instance->proving_key->compute_logderivative_inverse(instance->relation_parameters); - instance->proving_key->compute_grand_product_polynomials(instance->relation_parameters); + instance->proving_key.compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, + instance->relation_parameters.eta_two, + instance->relation_parameters.eta_three); + instance->proving_key.compute_logderivative_inverse(instance->relation_parameters); + instance->proving_key.compute_grand_product_polynomials(instance->relation_parameters); instance->prover_polynomials = Flavor::ProverPolynomials(instance->proving_key); // Check that selectors are nonzero to ensure corresponding relation has nontrivial contribution - ensure_non_zero(proving_key->q_arith); - ensure_non_zero(proving_key->q_delta_range); - ensure_non_zero(proving_key->q_lookup); - ensure_non_zero(proving_key->q_elliptic); - ensure_non_zero(proving_key->q_aux); - ensure_non_zero(proving_key->q_busread); - ensure_non_zero(proving_key->q_poseidon2_external); - ensure_non_zero(proving_key->q_poseidon2_internal); + ensure_non_zero(proving_key.q_arith); + ensure_non_zero(proving_key.q_delta_range); + ensure_non_zero(proving_key.q_lookup); + ensure_non_zero(proving_key.q_elliptic); + ensure_non_zero(proving_key.q_aux); + ensure_non_zero(proving_key.q_busread); + ensure_non_zero(proving_key.q_poseidon2_external); + ensure_non_zero(proving_key.q_poseidon2_internal); ensure_non_zero(proving_key.calldata); ensure_non_zero(proving_key.calldata_read_counts); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/sumcheck.test.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/sumcheck.test.cpp index 1ac3f6d5d10..9c267bb72b5 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/sumcheck.test.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/sumcheck.test.cpp @@ -157,14 +157,14 @@ TEST_F(SumcheckTestsRealCircuit, Ultra) instance->relation_parameters.beta = FF::random_element(); instance->relation_parameters.gamma = FF::random_element(); - instance->proving_key->compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, - instance->relation_parameters.eta_two, - instance->relation_parameters.eta_three); - instance->proving_key->compute_grand_product_polynomials(instance->relation_parameters); + instance->proving_key.compute_sorted_accumulator_polynomials(instance->relation_parameters.eta, + instance->relation_parameters.eta_two, + instance->relation_parameters.eta_three); + instance->proving_key.compute_grand_product_polynomials(instance->relation_parameters); instance->prover_polynomials = Flavor::ProverPolynomials(instance->proving_key); auto prover_transcript = Transcript::prover_init_empty(); - auto circuit_size = instance->proving_key->circuit_size; + auto circuit_size = instance->proving_key.circuit_size; auto log_circuit_size = numeric::get_msb(circuit_size); RelationSeparator prover_alphas; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_composer.test.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_composer.test.cpp index 448e47384c2..c6015ca160c 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_composer.test.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_composer.test.cpp @@ -70,17 +70,17 @@ TEST_F(UltraHonkComposerTests, ANonZeroPolynomialIsAGoodPolynomial) auto instance = std::make_shared(circuit_builder); UltraProver prover(instance); auto proof = prover.construct_proof(); - auto proving_key = instance->proving_key; + auto& proving_key = instance->proving_key; - for (auto& poly : proving_key->get_selectors()) { + for (auto& poly : proving_key.get_selectors()) { ensure_non_zero(poly); } - for (auto& poly : proving_key->get_table_polynomials()) { + for (auto& poly : proving_key.get_table_polynomials()) { ensure_non_zero(poly); } - for (auto& poly : proving_key->get_wires()) { + for (auto& poly : proving_key.get_wires()) { ensure_non_zero(poly); } } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index be4c4f9ab87..f3fc6b0e5be 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -1,5 +1,6 @@ #include "ultra_prover.hpp" #include "barretenberg/sumcheck/sumcheck.hpp" +#include "barretenberg/ultra_honk/oink_prover.hpp" namespace bb { @@ -14,8 +15,7 @@ template UltraProver_::UltraProver_(const std::shared_ptr& inst, const std::shared_ptr& transcript) : instance(std::move(inst)) , transcript(transcript) - , commitment_key(instance->proving_key->commitment_key) - , oink_prover(inst->proving_key, commitment_key, transcript, "") + , commitment_key(instance->proving_key.commitment_key) {} /** @@ -29,8 +29,7 @@ template UltraProver_::UltraProver_(Builder& circuit) : instance(std::make_shared(circuit)) , transcript(std::make_shared()) - , commitment_key(instance->proving_key->commitment_key) - , oink_prover(instance->proving_key, commitment_key, transcript, "") + , commitment_key(instance->proving_key.commitment_key) {} /** @@ -40,7 +39,7 @@ UltraProver_::UltraProver_(Builder& circuit) template void UltraProver_::execute_relation_check_rounds() { using Sumcheck = SumcheckProver; - auto circuit_size = instance->proving_key->circuit_size; + auto circuit_size = instance->proving_key.circuit_size; auto sumcheck = Sumcheck(circuit_size, transcript); std::vector gate_challenges(numeric::get_msb(circuit_size)); @@ -75,7 +74,9 @@ template HonkProof& UltraProver_::export_proof() template HonkProof& UltraProver_::construct_proof() { - auto [relation_params, alphas] = oink_prover.prove(); + OinkProver oink_prover(instance->proving_key, transcript); + auto [proving_key, relation_params, alphas] = oink_prover.prove(); + instance->proving_key = std::move(proving_key); instance->relation_parameters = std::move(relation_params); instance->alphas = alphas; instance->prover_polynomials = ProverPolynomials(instance->proving_key); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp index 36f466e2004..279890e614b 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.hpp @@ -7,7 +7,6 @@ #include "barretenberg/sumcheck/instance/prover_instance.hpp" #include "barretenberg/sumcheck/sumcheck_output.hpp" #include "barretenberg/transcript/transcript.hpp" -#include "barretenberg/ultra_honk/oink_prover.hpp" namespace bb { @@ -39,8 +38,6 @@ template class UltraProver_ { std::shared_ptr commitment_key; - OinkProver oink_prover; - explicit UltraProver_(const std::shared_ptr&, const std::shared_ptr& transcript = std::make_shared()); diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_transcript.test.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_transcript.test.cpp index 44fcbfec08e..952894e4a36 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_transcript.test.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_transcript.test.cpp @@ -140,7 +140,7 @@ TEST_F(UltraTranscriptTests, ProverManifestConsistency) auto proof = prover.construct_proof(); // Check that the prover generated manifest agrees with the manifest hard coded in this suite - auto manifest_expected = construct_ultra_honk_manifest(instance->proving_key->circuit_size); + auto manifest_expected = construct_ultra_honk_manifest(instance->proving_key.circuit_size); auto prover_manifest = prover.transcript->get_manifest(); // Note: a manifest can be printed using manifest.print() for (size_t round = 0; round < manifest_expected.size(); ++round) { diff --git a/barretenberg/cpp/srs_db/Earthfile b/barretenberg/cpp/srs_db/Earthfile index 4b4a503b6b7..9bb57f1d5c6 100644 --- a/barretenberg/cpp/srs_db/Earthfile +++ b/barretenberg/cpp/srs_db/Earthfile @@ -4,7 +4,7 @@ FROM ubuntu:lunar RUN apt-get update && apt-get install -y curl build: - WORKDIR /build + WORKDIR /usr/src COPY ./*.sh . RUN ./download_ignition.sh 3 RUN ./download_grumpkin.sh diff --git a/barretenberg/ts/Earthfile b/barretenberg/ts/Earthfile index a0dcd619e32..a11afe022ee 100644 --- a/barretenberg/ts/Earthfile +++ b/barretenberg/ts/Earthfile @@ -1,7 +1,7 @@ VERSION 0.8 FROM node:18.19.0 -WORKDIR /build +WORKDIR /usr/src/barretenberg/ts-build # minimum files to download yarn packages # keep timestamps for incremental builds @@ -20,28 +20,28 @@ COPY ../cpp/+preset-wasm/bin/barretenberg.wasm dest/node-cjs/barretenberg_wasm/b esm: RUN yarn build:esm - SAVE ARTIFACT /build + SAVE ARTIFACT /usr/src/barretenberg/ts-build build cjs: COPY scripts/cjs_postprocess.sh scripts/ RUN yarn build:cjs - SAVE ARTIFACT /build + SAVE ARTIFACT /usr/src/barretenberg/ts-build build browser: RUN yarn build:browser - SAVE ARTIFACT /build + SAVE ARTIFACT /usr/src/barretenberg/ts-build build test-prettier-format: RUN yarn formatting build: # collect all our build types - COPY +esm/build /build - COPY +cjs/build /build - COPY +browser/build /build + COPY +esm/build /usr/src/barretenberg/ts-build + COPY +cjs/build /usr/src/barretenberg/ts-build + COPY +browser/build /usr/src/barretenberg/ts-build # We want to create a pure package, as would be published to npm, for consuming projects. RUN yarn pack && tar zxf package.tgz && rm package.tgz && mv package ../ts - SAVE ARTIFACT /build + SAVE ARTIFACT /usr/src/barretenberg/ts build test: BUILD +test-prettier-format From 319e5e1c2728b639018d3a59ddf0096cd1a3380f Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:10:08 +0000 Subject: [PATCH 059/123] reverted extraneous changes --- yarn-project/Earthfile | 36 ++-- .../accounts/src/defaults/account_contract.ts | 8 +- .../src/defaults/account_interface.ts | 10 +- .../accounts/src/ecdsa/account_contract.ts | 8 +- yarn-project/accounts/src/ecdsa/artifact.ts | 2 +- yarn-project/accounts/src/ecdsa/index.ts | 8 +- .../accounts/src/schnorr/account_contract.ts | 8 +- yarn-project/accounts/src/schnorr/artifact.ts | 2 +- yarn-project/accounts/src/schnorr/index.ts | 8 +- .../src/single_key/account_contract.ts | 10 +- .../accounts/src/single_key/artifact.ts | 2 +- yarn-project/accounts/src/single_key/index.ts | 8 +- .../accounts/src/testing/configuration.ts | 4 +- .../accounts/src/testing/create_account.ts | 4 +- .../archiver/src/archiver/archiver.test.ts | 20 +- .../archiver/src/archiver/archiver.ts | 52 ++--- .../archiver/src/archiver/archiver_store.ts | 40 ++-- .../src/archiver/archiver_store_test_suite.ts | 10 +- yarn-project/archiver/src/archiver/config.ts | 2 +- .../archiver/src/archiver/data_retrieval.ts | 8 +- .../archiver/src/archiver/eth_log_handlers.ts | 4 +- .../kv_archiver_store/block_body_store.ts | 2 +- .../archiver/kv_archiver_store/block_store.ts | 10 +- .../kv_archiver_store/contract_class_store.ts | 8 +- .../contract_instance_store.ts | 6 +- .../kv_archiver_store/kv_archiver_store.ts | 44 ++-- .../archiver/kv_archiver_store/log_store.ts | 14 +- .../kv_archiver_store/message_store.ts | 6 +- .../l1_to_l2_message_store.ts | 4 +- .../memory_archiver_store.test.ts | 2 +- .../memory_archiver_store.ts | 36 ++-- .../archiver/src/rpc/archiver_client.ts | 2 +- .../archiver/src/rpc/archiver_server.ts | 2 +- yarn-project/aztec-faucet/src/bin/index.ts | 2 +- .../aztec-node/src/aztec-node/config.ts | 6 +- .../src/aztec-node/http_rpc_server.ts | 2 +- .../aztec-node/src/aztec-node/server.test.ts | 2 +- .../aztec-node/src/aztec-node/server.ts | 66 +++--- .../src/aztec-node/simulator-factory.ts | 6 +- yarn-project/aztec-node/src/bin/index.ts | 2 +- yarn-project/aztec.js/src/account/contract.ts | 8 +- yarn-project/aztec.js/src/account/index.ts | 2 +- .../aztec.js/src/account/interface.ts | 10 +- yarn-project/aztec.js/src/account/wallet.ts | 4 +- .../account_manager/deploy_account_sent_tx.ts | 8 +- .../aztec.js/src/account_manager/index.ts | 16 +- .../src/contract/base_contract_interaction.ts | 4 +- .../aztec.js/src/contract/batch_call.ts | 6 +- yarn-project/aztec.js/src/contract/checker.ts | 8 +- .../aztec.js/src/contract/contract.test.ts | 13 +- .../aztec.js/src/contract/contract.ts | 8 +- .../aztec.js/src/contract/contract_base.ts | 50 +---- .../aztec.js/src/contract/deploy_method.ts | 16 +- .../aztec.js/src/contract/deploy_sent_tx.ts | 14 +- .../aztec.js/src/contract/sent_tx.test.ts | 4 +- yarn-project/aztec.js/src/contract/sent_tx.ts | 11 +- .../aztec.js/src/contract/unsafe_contract.ts | 6 +- .../src/deployment/broadcast_function.ts | 6 +- .../src/deployment/contract_deployer.ts | 8 +- .../src/deployment/deploy_instance.ts | 6 +- .../src/deployment/protocol_contracts.ts | 2 +- .../aztec.js/src/deployment/register_class.ts | 6 +- .../src/entrypoint/default_entrypoint.ts | 4 +- .../aztec.js/src/entrypoint/entrypoint.ts | 6 +- .../aztec.js/src/fee/fee_payment_method.ts | 6 +- .../src/fee/native_fee_payment_method.ts | 10 +- .../src/fee/private_fee_payment_method.ts | 8 +- .../src/fee/public_fee_payment_method.ts | 8 +- yarn-project/aztec.js/src/index.ts | 2 - yarn-project/aztec.js/src/utils/abi_types.ts | 2 +- yarn-project/aztec.js/src/utils/account.ts | 4 +- yarn-project/aztec.js/src/utils/authwit.ts | 4 +- .../aztec.js/src/utils/cheat_codes.ts | 4 +- .../aztec.js/src/utils/l1_contracts.ts | 2 +- yarn-project/aztec.js/src/utils/pub_key.ts | 2 +- yarn-project/aztec.js/src/utils/pxe.ts | 4 +- .../aztec.js/src/wallet/account_wallet.ts | 10 +- .../wallet/account_wallet_with_private_key.ts | 8 +- .../aztec.js/src/wallet/base_wallet.ts | 20 +- .../aztec.js/src/wallet/create_recipient.ts | 2 +- yarn-project/aztec.js/src/wallet/index.ts | 6 +- .../aztec.js/src/wallet/signerless_wallet.ts | 6 +- yarn-project/aztec/src/cli/cli.ts | 4 +- .../aztec/src/cli/cmds/start_archiver.ts | 4 +- yarn-project/aztec/src/cli/cmds/start_node.ts | 12 +- .../aztec/src/cli/cmds/start_p2p_bootstrap.ts | 6 +- yarn-project/aztec/src/cli/cmds/start_pxe.ts | 6 +- yarn-project/aztec/src/cli/util.ts | 14 +- yarn-project/aztec/src/examples/token.ts | 9 +- yarn-project/aztec/src/examples/util.ts | 2 +- yarn-project/aztec/src/sandbox.ts | 22 +- .../src/aztec_node/rpc/aztec_node_client.ts | 2 +- .../circuit-types/src/function_call.ts | 2 +- .../src/interfaces/aztec-node.ts | 38 ++-- .../src/interfaces/block-prover.ts | 6 +- .../circuit-types/src/interfaces/configs.ts | 2 +- .../src/interfaces/nullifier_tree.ts | 2 +- .../src/interfaces/prover-client.ts | 2 +- .../src/interfaces/public_data_tree.ts | 4 +- .../circuit-types/src/interfaces/pxe.ts | 14 +- .../circuit-types/src/keys/key_pair.ts | 2 +- .../circuit-types/src/keys/key_store.ts | 2 +- .../circuit-types/src/l2_block_context.ts | 4 +- .../l2_block_downloader.ts | 4 +- .../circuit-types/src/l2_block_source.ts | 10 +- .../src/logs/get_unencrypted_logs_response.ts | 2 +- .../l1_note_payload/browserify-cipher.d.ts | 2 +- .../logs/l1_note_payload/encrypt_buffer.ts | 4 +- .../logs/l1_note_payload/l1_note_payload.ts | 4 +- .../src/logs/l1_note_payload/tagged_note.ts | 4 +- .../src/logs/l2_block_l2_logs.ts | 6 +- .../circuit-types/src/logs/l2_logs_source.ts | 8 +- .../circuit-types/src/logs/log_filter.ts | 8 +- .../circuit-types/src/logs/log_type.ts | 4 +- .../circuit-types/src/logs/tx_l2_logs.ts | 6 +- .../src/messaging/l1_to_l2_message_source.ts | 2 +- yarn-project/circuit-types/src/mocks.ts | 5 +- .../circuit-types/src/notes/note_filter.ts | 4 +- .../circuit-types/src/packed_arguments.ts | 2 +- .../src/sibling_path/sibling_path.ts | 4 +- .../circuit-types/src/simulation_error.ts | 4 +- .../circuit-types/src/stats/benchmarks.ts | 2 +- .../circuit-types/src/stats/metrics.ts | 2 +- .../circuit-types/src/tx/processed_tx.ts | 4 +- yarn-project/circuit-types/src/tx/tx.ts | 6 +- .../circuit-types/src/tx/tx_receipt.ts | 6 +- .../circuit-types/src/tx_execution_request.ts | 2 +- .../barretenberg/crypto/ecdsa/signature.ts | 2 +- .../crypto/grumpkin/index.test.ts | 2 +- .../src/barretenberg/crypto/grumpkin/index.ts | 2 +- .../src/barretenberg/crypto/schnorr/index.ts | 4 +- .../barretenberg/crypto/schnorr/signature.ts | 2 +- .../barretenberg/crypto/signature/index.ts | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- .../src/contract/artifact_hash.test.ts | 2 +- .../circuits.js/src/contract/artifact_hash.ts | 6 +- .../src/contract/contract_address.test.ts | 2 +- .../src/contract/contract_address.ts | 6 +- .../src/contract/contract_class.ts | 6 +- .../src/contract/contract_class_id.test.ts | 2 +- .../src/contract/contract_class_id.ts | 2 +- .../src/contract/contract_instance.ts | 6 +- .../events/contract_class_registered_event.ts | 4 +- .../contract_instance_deployed_event.ts | 2 +- .../private_function_broadcasted_event.ts | 6 +- ...trained_function_broadcasted_event.test.ts | 2 +- ...nconstrained_function_broadcasted_event.ts | 6 +- .../src/contract/private_function.test.ts | 2 +- .../src/contract/private_function.ts | 4 +- .../private_function_membership_proof.test.ts | 6 +- .../private_function_membership_proof.ts | 8 +- .../src/contract/public_bytecode.test.ts | 2 +- .../src/contract/public_bytecode.ts | 2 +- ...strained_function_membership_proof.test.ts | 6 +- ...unconstrained_function_membership_proof.ts | 8 +- yarn-project/circuits.js/src/hash/hash.ts | 2 +- .../circuits.js/src/hints/build_hints.test.ts | 4 +- .../circuits.js/src/hints/build_hints.ts | 16 +- yarn-project/circuits.js/src/keys/index.ts | 4 +- .../src/merkle/sibling_path.test.ts | 2 +- .../src/structs/aggregation_object.ts | 2 +- .../circuits.js/src/structs/call_context.ts | 2 +- .../circuits.js/src/structs/call_request.ts | 2 +- .../src/structs/complete_address.ts | 6 +- .../contract_storage_update_request.ts | 2 +- .../circuits.js/src/structs/function_data.ts | 4 +- .../src/structs/global_variables.ts | 2 +- .../circuits.js/src/structs/header.ts | 2 +- .../kernel/combined_accumulated_data.ts | 2 +- .../src/structs/kernel/kernel_data.ts | 4 +- .../src/structs/kernel/private_call_data.ts | 4 +- .../src/structs/kernel/private_kernel_data.ts | 4 +- .../src/structs/kernel/public_call_data.ts | 12 +- .../public_kernel_circuit_private_inputs.ts | 4 +- .../src/structs/kernel/public_kernel_data.ts | 4 +- ...blic_kernel_tail_circuit_private_inputs.ts | 6 +- .../src/structs/max_block_number.ts | 2 +- .../src/structs/membership_witness.ts | 2 +- .../non_existent_read_request_hints.ts | 6 +- ...te_hash_read_request_membership_witness.ts | 4 +- .../nullifier_key_validation_request.ts | 4 +- .../src/structs/parity/base_parity_inputs.ts | 4 +- .../structs/parity/parity_public_inputs.ts | 2 +- .../src/structs/parity/root_parity_input.ts | 2 +- .../src/structs/parity/root_parity_inputs.ts | 2 +- .../src/structs/partial_state_reference.ts | 2 +- .../src/structs/private_call_stack_item.ts | 4 +- .../structs/private_circuit_public_inputs.ts | 10 +- .../src/structs/public_call_request.ts | 2 +- .../src/structs/public_call_stack_item.ts | 4 +- .../structs/public_circuit_public_inputs.ts | 10 +- .../src/structs/read_request_hints.ts | 4 +- .../rollup/append_only_tree_snapshot.ts | 2 +- .../base_or_merge_rollup_public_inputs.ts | 2 +- .../src/structs/rollup/base_rollup.ts | 6 +- .../src/structs/rollup/merge_rollup.ts | 2 +- .../structs/rollup/nullifier_leaf/index.ts | 2 +- .../structs/rollup/previous_rollup_data.ts | 12 +- .../structs/rollup/public_data_leaf/index.ts | 2 +- .../src/structs/rollup/root_rollup.ts | 16 +- .../src/structs/rollup/state_diff_hints.ts | 20 +- .../circuits.js/src/structs/shared.ts | 2 +- .../src/structs/state_reference.ts | 2 +- .../circuits.js/src/structs/tx_context.ts | 2 +- .../circuits.js/src/structs/tx_request.ts | 2 +- .../src/structs/validation_requests.ts | 2 +- .../circuits.js/src/tests/factories.ts | 12 +- .../circuits.js/src/tests/fixtures.ts | 4 +- .../src/types/contract_function_dao.ts | 2 +- .../circuits.js/src/types/deployment_info.ts | 4 +- .../src/types/grumpkin_private_key.ts | 2 +- .../circuits.js/src/types/partial_address.ts | 2 +- .../circuits.js/src/types/public_key.ts | 2 +- yarn-project/cli/src/client.test.ts | 6 +- yarn-project/cli/src/client.ts | 4 +- yarn-project/cli/src/cmds/add_contract.ts | 8 +- yarn-project/cli/src/cmds/add_note.ts | 6 +- yarn-project/cli/src/cmds/block_number.ts | 2 +- yarn-project/cli/src/cmds/call.ts | 4 +- yarn-project/cli/src/cmds/check_deploy.ts | 4 +- yarn-project/cli/src/cmds/compute_selector.ts | 2 +- yarn-project/cli/src/cmds/create_account.ts | 4 +- yarn-project/cli/src/cmds/deploy.ts | 4 +- .../cli/src/cmds/deploy_l1_contracts.ts | 2 +- .../cli/src/cmds/example_contracts.ts | 2 +- .../cli/src/cmds/generate_p2p_private_key.ts | 2 +- .../cli/src/cmds/generate_private_key.ts | 2 +- yarn-project/cli/src/cmds/get_account.ts | 4 +- yarn-project/cli/src/cmds/get_accounts.ts | 2 +- .../cli/src/cmds/get_contract_data.ts | 4 +- yarn-project/cli/src/cmds/get_logs.ts | 6 +- yarn-project/cli/src/cmds/get_node_info.ts | 2 +- yarn-project/cli/src/cmds/get_recipient.ts | 4 +- yarn-project/cli/src/cmds/get_recipients.ts | 2 +- yarn-project/cli/src/cmds/get_tx_receipt.ts | 4 +- yarn-project/cli/src/cmds/inspect_contract.ts | 4 +- .../cli/src/cmds/parse_parameter_struct.ts | 4 +- yarn-project/cli/src/cmds/register_account.ts | 4 +- .../cli/src/cmds/register_recipient.ts | 4 +- yarn-project/cli/src/cmds/send.ts | 4 +- yarn-project/cli/src/encoding.ts | 4 +- yarn-project/cli/src/index.ts | 2 +- yarn-project/cli/src/test/mocks.ts | 7 +- yarn-project/cli/src/test/utils.test.ts | 4 +- yarn-project/cli/src/update/noir.ts | 4 +- yarn-project/cli/src/update/npm.ts | 6 +- yarn-project/cli/src/update/update.ts | 4 +- yarn-project/end-to-end/Earthfile | 202 +++++++++--------- .../benchmarks/bench_process_history.test.ts | 10 +- .../benchmarks/bench_publish_rollup.test.ts | 6 +- .../src/benchmarks/bench_tx_size_fees.test.ts | 8 +- .../end-to-end/src/benchmarks/utils.ts | 16 +- .../end-to-end/src/e2e_2_pxes.test.ts | 24 +-- .../src/e2e_account_contracts.test.ts | 10 +- .../end-to-end/src/e2e_authwit.test.ts | 8 +- .../end-to-end/src/e2e_avm_simulator.test.ts | 2 +- .../src/e2e_blacklist_token_contract.test.ts | 20 +- .../end-to-end/src/e2e_block_building.test.ts | 14 +- .../end-to-end/src/e2e_card_game.test.ts | 8 +- .../end-to-end/src/e2e_cheat_codes.test.ts | 31 +-- yarn-project/end-to-end/src/e2e_cli.test.ts | 2 +- .../src/e2e_counter_contract.test.ts | 2 +- .../src/e2e_cross_chain_messaging.test.ts | 10 +- .../src/e2e_crowdfunding_and_claim.test.ts | 23 +- .../src/e2e_dapp_subscription.test.ts | 10 +- .../end-to-end/src/e2e_delegate_calls.test.ts | 2 +- .../src/e2e_deploy_contract.test.ts | 20 +- .../src/e2e_escrow_contract.test.ts | 25 ++- yarn-project/end-to-end/src/e2e_fees.test.ts | 25 ++- .../src/e2e_inclusion_proofs_contract.test.ts | 6 +- .../src/e2e_lending_contract.test.ts | 15 +- .../src/e2e_max_block_number.test.ts | 2 +- .../e2e_multiple_accounts_1_enc_key.test.ts | 19 +- .../src/e2e_nested_contract.test.ts | 2 +- .../src/e2e_non_contract_account.test.ts | 17 +- .../end-to-end/src/e2e_note_getter.test.ts | 4 +- .../end-to-end/src/e2e_ordering.test.ts | 2 +- .../end-to-end/src/e2e_outbox.test.ts | 8 +- .../end-to-end/src/e2e_p2p_network.test.ts | 12 +- .../e2e_pending_note_hashes_contract.test.ts | 9 +- .../end-to-end/src/e2e_persistence.test.ts | 28 ++- .../src/e2e_private_voting_contract.test.ts | 2 +- .../e2e_public_cross_chain_messaging.test.ts | 20 +- .../e2e_public_to_private_messaging.test.ts | 2 +- .../src/e2e_sandbox_example.test.ts | 18 +- .../end-to-end/src/e2e_slow_tree.test.ts | 2 +- .../end-to-end/src/e2e_state_vars.test.ts | 2 +- .../end-to-end/src/e2e_static_calls.test.ts | 2 +- .../end-to-end/src/e2e_token_contract.test.ts | 15 +- yarn-project/end-to-end/src/fixtures/utils.ts | 38 ++-- .../src/guides/dapp_testing.test.ts | 29 ++- .../writing_an_account_contract.test.ts | 18 +- .../src/integration_l1_publisher.test.ts | 41 ++-- yarn-project/end-to-end/src/shared/browser.ts | 10 +- yarn-project/end-to-end/src/shared/cli.ts | 9 +- .../src/shared/cross_chain_test_harness.ts | 36 ++-- .../src/shared/gas_portal_test_harness.ts | 20 +- .../end-to-end/src/shared/uniswap_l1_l2.ts | 20 +- .../src/simulators/lending_simulator.ts | 6 +- .../src/simulators/token_simulator.ts | 4 +- .../src/uniswap_trade_on_l1_from_l2.test.ts | 2 +- .../entrypoints/src/account_entrypoint.ts | 10 +- .../entrypoints/src/dapp_entrypoint.ts | 10 +- .../entrypoints/src/entrypoint_payload.ts | 6 +- .../entrypoints/src/multi_call_entrypoint.ts | 8 +- yarn-project/ethereum/src/constants.ts | 2 +- .../ethereum/src/deploy_l1_contracts.ts | 18 +- yarn-project/ethereum/src/ethereum_chain.ts | 2 +- yarn-project/ethereum/src/index.ts | 2 +- .../ethereum/src/l1_contract_addresses.ts | 2 +- yarn-project/ethereum/src/testnet.ts | 4 +- yarn-project/foundation/.eslintrc.cjs | 1 + yarn-project/foundation/src/abi/abi.test.ts | 8 +- yarn-project/foundation/src/abi/abi.ts | 75 +++---- .../foundation/src/abi/decoder.test.ts | 2 +- yarn-project/foundation/src/abi/decoder.ts | 6 +- .../foundation/src/abi/encoder.test.ts | 2 +- yarn-project/foundation/src/abi/encoder.ts | 6 +- .../foundation/src/abi/event_selector.ts | 2 +- .../foundation/src/abi/function_selector.ts | 4 +- yarn-project/foundation/src/abi/utils.ts | 12 +- yarn-project/foundation/src/array/array.ts | 2 +- .../foundation/src/aztec-address/index.ts | 2 +- .../foundation/src/collection/array.ts | 2 +- .../src/crypto/pedersen/pedersen.wasm.ts | 2 +- .../foundation/src/crypto/sha256/index.ts | 2 +- .../foundation/src/fields/coordinate.ts | 2 +- .../src/json-rpc/client/json_rpc_client.ts | 6 +- .../foundation/src/json-rpc/convert.ts | 2 +- .../src/json-rpc/server/json_proxy.ts | 2 +- .../src/json-rpc/server/json_rpc_server.ts | 4 +- yarn-project/foundation/src/log/console.ts | 2 +- yarn-project/foundation/src/log/debug.ts | 2 +- yarn-project/foundation/src/log/logger.ts | 2 +- yarn-project/foundation/src/mutex/index.ts | 2 +- .../foundation/src/mutex/mutex.test.ts | 2 +- .../foundation/src/serialize/buffer_reader.ts | 2 +- .../foundation/src/serialize/field_reader.ts | 4 +- .../foundation/src/serialize/free_funcs.ts | 2 +- .../transport/browser/message_port_socket.ts | 2 +- .../browser/shared_worker_connector.ts | 2 +- .../browser/shared_worker_listener.ts | 2 +- .../src/transport/browser/worker_connector.ts | 2 +- .../src/transport/browser/worker_listener.ts | 2 +- .../dispatch/create_dispatch_proxy.ts | 6 +- .../src/transport/interface/connector.ts | 2 +- .../src/transport/interface/listener.ts | 4 +- .../src/transport/node/node_connector.ts | 4 +- .../transport/node/node_connector_socket.ts | 4 +- .../src/transport/node/node_listener.ts | 2 +- .../transport/node/node_listener_socket.ts | 4 +- .../src/transport/transport_client.ts | 6 +- .../src/transport/transport_server.ts | 6 +- .../foundation/src/wasm/wasm_module.ts | 2 +- .../src/worker/browser/start_web_module.ts | 4 +- .../src/worker/browser/web_data_store.ts | 4 +- .../src/worker/browser/web_worker.ts | 4 +- .../src/worker/node/node_data_store.ts | 4 +- .../foundation/src/worker/node/node_worker.ts | 4 +- .../src/worker/node/start_node_module.ts | 4 +- .../foundation/src/worker/wasm_worker.ts | 4 +- .../foundation/src/worker/worker_pool.ts | 2 +- yarn-project/key-store/src/key_pair.ts | 6 +- yarn-project/key-store/src/test_key_store.ts | 10 +- .../kv-store/src/interfaces/counter.ts | 2 +- yarn-project/kv-store/src/interfaces/map.ts | 2 +- yarn-project/kv-store/src/interfaces/store.ts | 10 +- yarn-project/kv-store/src/lmdb/array.test.ts | 2 +- yarn-project/kv-store/src/lmdb/array.ts | 4 +- .../kv-store/src/lmdb/counter.test.ts | 2 +- yarn-project/kv-store/src/lmdb/counter.ts | 6 +- yarn-project/kv-store/src/lmdb/map.test.ts | 2 +- yarn-project/kv-store/src/lmdb/map.ts | 6 +- yarn-project/kv-store/src/lmdb/singleton.ts | 4 +- yarn-project/kv-store/src/lmdb/store.ts | 12 +- yarn-project/kv-store/src/utils.ts | 6 +- .../merkle-tree/src/hasher_with_stats.ts | 2 +- .../src/interfaces/append_only_tree.ts | 6 +- .../src/interfaces/indexed_tree.ts | 14 +- .../merkle-tree/src/interfaces/merkle_tree.ts | 4 +- .../src/interfaces/update_only_tree.ts | 6 +- yarn-project/merkle-tree/src/load_tree.ts | 8 +- yarn-project/merkle-tree/src/new_tree.ts | 8 +- yarn-project/merkle-tree/src/pedersen.ts | 2 +- yarn-project/merkle-tree/src/sha_256.ts | 2 +- .../snapshots/append_only_snapshot.test.ts | 4 +- .../src/snapshots/append_only_snapshot.ts | 12 +- .../src/snapshots/base_full_snapshot.ts | 8 +- .../src/snapshots/full_snapshot.test.ts | 4 +- .../src/snapshots/full_snapshot.ts | 8 +- .../snapshots/indexed_tree_snapshot.test.ts | 4 +- .../src/snapshots/indexed_tree_snapshot.ts | 10 +- .../src/snapshots/snapshot_builder.ts | 6 +- .../snapshots/snapshot_builder_test_suite.ts | 6 +- .../src/sparse_tree/sparse_tree.test.ts | 6 +- .../src/sparse_tree/sparse_tree.ts | 6 +- .../standard_indexed_tree.ts | 21 +- .../test/standard_indexed_tree.test.ts | 8 +- .../src/standard_tree/standard_tree.test.ts | 6 +- .../src/standard_tree/standard_tree.ts | 8 +- .../src/test/standard_based_test_suite.ts | 8 +- .../merkle-tree/src/test/test_suite.ts | 8 +- .../src/test/utils/append_leaves.ts | 4 +- yarn-project/merkle-tree/src/tree_base.ts | 10 +- .../add_noir_compiler_commander_actions.ts | 4 +- .../src/contract-interface-gen/noir.ts | 10 +- .../src/contract-interface-gen/typescript.ts | 76 ------- yarn-project/noir-compiler/src/utils.ts | 2 +- .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- .../src/index.test.ts | 2 +- .../noir-protocol-circuits-types/src/index.ts | 12 +- .../src/noir_test_gen.test.ts | 2 +- .../src/scripts/generate_ts_from_abi.ts | 10 +- .../src/type_conversion.ts | 108 +++++----- yarn-project/p2p/src/bootstrap/bootstrap.ts | 4 +- yarn-project/p2p/src/client/index.ts | 8 +- yarn-project/p2p/src/client/mocks.ts | 2 +- .../p2p/src/client/p2p_client.test.ts | 8 +- yarn-project/p2p/src/client/p2p_client.ts | 15 +- yarn-project/p2p/src/service/dummy_service.ts | 4 +- .../p2p/src/service/known_txs.test.ts | 2 +- yarn-project/p2p/src/service/known_txs.ts | 2 +- .../p2p/src/service/libp2p_service.ts | 16 +- yarn-project/p2p/src/service/service.ts | 2 +- .../p2p/src/service/tx_messages.test.ts | 2 +- .../p2p/src/tx_pool/aztec_kv_tx_pool.ts | 8 +- .../p2p/src/tx_pool/memory_tx_pool.ts | 4 +- yarn-project/p2p/src/tx_pool/tx_pool.ts | 2 +- .../p2p/src/tx_pool/tx_pool_test_suite.ts | 2 +- .../src/class-registerer/artifact.ts | 2 +- .../src/class-registerer/index.ts | 4 +- .../src/gas-token/artifact.ts | 2 +- .../protocol-contracts/src/gas-token/index.ts | 4 +- .../src/instance-deployer/artifact.ts | 2 +- .../src/instance-deployer/index.ts | 2 +- .../src/multi-call-entrypoint/artifact.ts | 2 +- .../src/multi-call-entrypoint/index.ts | 4 +- .../src/protocol_contract.ts | 6 +- .../prover-client/src/dummy-prover.ts | 12 +- .../orchestrator/block-building-helpers.ts | 30 +-- .../src/orchestrator/orchestrator.test.ts | 14 +- .../src/orchestrator/orchestrator.ts | 32 +-- .../src/orchestrator/proving-state.ts | 16 +- .../prover-client/src/prover/empty.ts | 12 +- .../prover-client/src/simulator/rollup.ts | 20 +- .../prover-client/src/tx-prover/tx-prover.ts | 14 +- .../pxe/src/contract_data_oracle/index.ts | 18 +- .../private_functions_tree.ts | 6 +- .../contracts/contract_artifact_db.ts | 4 +- .../contracts/contract_instance_db.ts | 4 +- .../pxe/src/database/deferred_note_dao.ts | 2 +- .../pxe/src/database/kv_pxe_database.ts | 18 +- yarn-project/pxe/src/database/note_dao.ts | 4 +- yarn-project/pxe/src/database/pxe_database.ts | 22 +- .../src/database/pxe_database_test_suite.ts | 6 +- yarn-project/pxe/src/kernel_oracle/index.ts | 18 +- .../pxe/src/kernel_prover/hints_builder.ts | 18 +- .../src/kernel_prover/kernel_prover.test.ts | 4 +- .../pxe/src/kernel_prover/kernel_prover.ts | 14 +- .../pxe/src/kernel_prover/proof_creator.ts | 4 +- .../src/kernel_prover/proving_data_oracle.ts | 22 +- .../src/note_processor/note_processor.test.ts | 16 +- .../pxe/src/note_processor/note_processor.ts | 18 +- .../src/note_processor/produce_note_dao.ts | 6 +- .../pxe/src/pxe_service/create_pxe_service.ts | 4 +- .../pxe/src/pxe_service/pxe_service.ts | 40 ++-- .../src/pxe_service/test/pxe_service.test.ts | 10 +- .../src/pxe_service/test/pxe_test_suite.ts | 2 +- yarn-project/pxe/src/simulator/index.ts | 4 +- .../pxe/src/simulator_oracle/index.ts | 38 ++-- .../pxe/src/synchronizer/synchronizer.test.ts | 8 +- .../pxe/src/synchronizer/synchronizer.ts | 23 +- .../scripts/src/benchmarks/aggregate.ts | 30 +-- .../src/client/sequencer-client.ts | 16 +- yarn-project/sequencer-client/src/config.ts | 10 +- .../src/global_variable_builder/config.ts | 2 +- .../global_variable_builder/global_builder.ts | 2 +- .../src/global_variable_builder/index.ts | 4 +- .../global_variable_builder/viem-reader.ts | 12 +- .../sequencer-client/src/publisher/config.ts | 2 +- .../sequencer-client/src/publisher/index.ts | 2 +- .../src/publisher/l1-publisher.test.ts | 2 +- .../src/publisher/l1-publisher.ts | 8 +- .../src/publisher/viem-tx-sender.ts | 24 +-- yarn-project/sequencer-client/src/receiver.ts | 2 +- .../src/sequencer/abstract_phase_manager.ts | 28 +-- .../src/sequencer/app_logic_phase_manager.ts | 17 +- .../src/sequencer/hints_builder.ts | 2 +- .../src/sequencer/phase_manager_factory.ts | 14 +- .../src/sequencer/public_processor.test.ts | 16 +- .../src/sequencer/public_processor.ts | 14 +- .../src/sequencer/sequencer.test.ts | 18 +- .../src/sequencer/sequencer.ts | 26 +-- .../src/sequencer/setup_phase_manager.test.ts | 10 +- .../src/sequencer/setup_phase_manager.ts | 17 +- .../src/sequencer/tail_phase_manager.ts | 4 +- .../src/sequencer/teardown_phase_manager.ts | 17 +- .../src/sequencer/tx_validator.test.ts | 8 +- .../src/sequencer/tx_validator.ts | 14 +- .../src/sequencer/tx_validator_factory.ts | 6 +- .../sequencer-client/src/sequencer/utils.ts | 2 +- .../src/simulator/public_executor.ts | 31 ++- .../src/simulator/public_kernel.ts | 6 +- .../simulator/world_state_public_db.test.ts | 6 +- yarn-project/simulator/src/acvm/acvm.ts | 16 +- yarn-project/simulator/src/acvm/acvm_types.ts | 2 +- .../simulator/src/acvm/deserialize.ts | 2 +- .../simulator/src/acvm/oracle/debug.ts | 4 +- .../simulator/src/acvm/oracle/index.ts | 2 +- .../simulator/src/acvm/oracle/oracle.ts | 4 +- .../simulator/src/acvm/oracle/typed_oracle.ts | 36 ++-- yarn-project/simulator/src/acvm/serialize.ts | 8 +- yarn-project/simulator/src/avm/avm_context.ts | 8 +- .../src/avm/avm_execution_environment.ts | 8 +- .../simulator/src/avm/avm_machine_state.ts | 4 +- .../simulator/src/avm/avm_memory_types.ts | 2 +- .../src/avm/avm_message_call_result.ts | 2 +- .../simulator/src/avm/avm_simulator.ts | 2 +- yarn-project/simulator/src/avm/errors.ts | 2 +- .../simulator/src/avm/fixtures/index.ts | 7 +- .../simulator/src/avm/journal/host_storage.ts | 2 +- .../simulator/src/avm/journal/journal.test.ts | 6 +- .../simulator/src/avm/journal/journal.ts | 4 +- .../src/avm/journal/nullifiers.test.ts | 4 +- .../src/avm/journal/public_storage.test.ts | 4 +- .../simulator/src/avm/journal/trace.test.ts | 2 +- .../simulator/src/avm/journal/trace.ts | 2 +- .../simulator/src/avm/journal/trace_types.ts | 2 +- .../src/avm/opcodes/accrued_substate.test.ts | 4 +- .../src/avm/opcodes/addressing_mode.ts | 2 +- .../src/avm/opcodes/arithmetic.test.ts | 2 +- .../simulator/src/avm/opcodes/arithmetic.ts | 4 +- .../simulator/src/avm/opcodes/bitwise.test.ts | 2 +- .../simulator/src/avm/opcodes/bitwise.ts | 2 +- .../src/avm/opcodes/comparators.test.ts | 2 +- .../src/avm/opcodes/control_flow.test.ts | 2 +- .../simulator/src/avm/opcodes/control_flow.ts | 2 +- .../src/avm/opcodes/environment_getters.ts | 2 +- .../src/avm/opcodes/external_calls.test.ts | 6 +- .../simulator/src/avm/opcodes/hashing.test.ts | 2 +- .../simulator/src/avm/opcodes/hashing.ts | 2 +- .../simulator/src/avm/opcodes/instruction.ts | 6 +- .../simulator/src/avm/opcodes/memory.test.ts | 2 +- .../simulator/src/avm/opcodes/memory.ts | 2 +- .../simulator/src/avm/opcodes/storage.test.ts | 6 +- .../bytecode_serialization.test.ts | 6 +- .../src/avm/temporary_executor_migration.ts | 8 +- .../src/client/client_execution_context.ts | 30 +-- .../simulator/src/client/db_oracle.ts | 26 ++- .../src/client/execution_note_cache.ts | 4 +- .../src/client/execution_result.test.ts | 2 +- .../simulator/src/client/execution_result.ts | 14 +- .../simulator/src/client/pick_notes.ts | 2 +- .../src/client/private_execution.test.ts | 16 +- .../simulator/src/client/private_execution.ts | 8 +- .../simulator/src/client/simulator.test.ts | 12 +- .../simulator/src/client/simulator.ts | 16 +- .../client/unconstrained_execution.test.ts | 4 +- .../src/client/unconstrained_execution.ts | 10 +- .../simulator/src/client/view_data_oracle.ts | 22 +- yarn-project/simulator/src/common/errors.ts | 2 +- .../simulator/src/public/avm_executor.test.ts | 8 +- yarn-project/simulator/src/public/db.ts | 12 +- .../simulator/src/public/execution.ts | 20 +- yarn-project/simulator/src/public/executor.ts | 6 +- .../simulator/src/public/index.test.ts | 12 +- .../src/public/public_execution_context.ts | 24 ++- .../simulator/src/public/state_actions.ts | 4 +- .../simulator/src/simulator/acvm_native.ts | 6 +- .../simulator/src/simulator/acvm_wasm.ts | 12 +- .../src/simulator/simulation_provider.ts | 4 +- yarn-project/simulator/src/test/utils.ts | 2 +- yarn-project/simulator/src/utils.ts | 2 +- .../types/src/abi/contract_artifact.ts | 8 +- .../types/src/contracts/contract_class.ts | 4 +- .../src/contracts/contract_data_source.ts | 10 +- .../types/src/contracts/contract_instance.ts | 2 +- .../types/src/interfaces/node-info.ts | 2 +- yarn-project/types/src/noir/index.ts | 11 +- yarn-project/types/src/test/fixtures.ts | 4 +- .../server_world_state_synchronizer.test.ts | 6 +- .../server_world_state_synchronizer.ts | 20 +- .../synchronizer/world_state_synchronizer.ts | 2 +- .../src/world-state-db/merkle_tree_db.ts | 8 +- .../world-state-db/merkle_tree_operations.ts | 8 +- .../merkle_tree_operations_facade.ts | 20 +- .../merkle_tree_snapshot_operations_facade.ts | 20 +- .../src/world-state-db/merkle_trees.ts | 32 +-- 590 files changed, 2482 insertions(+), 2394 deletions(-) diff --git a/yarn-project/Earthfile b/yarn-project/Earthfile index 2cc5d59f1ae..e37d7332233 100644 --- a/yarn-project/Earthfile +++ b/yarn-project/Earthfile @@ -3,14 +3,14 @@ FROM node:18.19.0 RUN apt update && apt install -y jq curl perl && rm -rf /var/lib/apt/lists/* && apt-get clean # copy bb-js and noir-packages -COPY ../barretenberg/ts/+build/build /build/barretenberg/ts -COPY ../noir/+packages/packages /build/noir/packages +COPY ../barretenberg/ts/+build/build /usr/src/barretenberg/ts +COPY ../noir/+packages/packages /usr/src/noir/packages # install acvm binary COPY ../noir/+nargo/acvm /usr/bin/acvm -COPY --dir ../noir-projects/+build/. /build/noir-projects -COPY ../l1-contracts/+build/out /build/l1-contracts/out +COPY --dir ../noir-projects/+build/. /usr/src/noir-projects +COPY ../l1-contracts/+build/out /usr/src/l1-contracts/out -WORKDIR /build/yarn-project +WORKDIR /usr/src/yarn-project # copy source COPY --dir * *.json .yarn .yarnrc.yml . @@ -20,24 +20,16 @@ COPY --dir * *.json .yarn .yarnrc.yml . # This does kind of work, but jest doesn't honor it correctly, so this seems like a neat workaround. # Also, --preserve-symlinks causes duplication of portalled instances such as bb.js, and breaks the singleton logic # by initialising the module more than once. So at present I don't see a viable alternative. -RUN ln -s /build/yarn-project/node_modules /build/node_modules +RUN ln -s /usr/src/yarn-project/node_modules /usr/src/node_modules # Target for main build process build: FROM +source ARG EARTHLY_CI # TODO: Replace puppeteer with puppeteer-core to avoid this. - # TODO encapsulate in bash script for cleanliness ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true - ENV YARN_CACHE_FOLDER /build/yarn-cache - # Use a mount for incremental builds locally. - RUN --mount type=cache,target=/build/node_modules_cache --mount type=cache,target=/build/yarn-cache \ - mkdir -p node_modules_cache && \ - mv node_modules_cache node_modules && \ - ./bootstrap.sh && \ - yarn workspaces focus @aztec/cli @aztec/aztec --production && \ - cp -r node_modules node_modules_cache - SAVE ARTIFACT /build + RUN ./bootstrap.sh && yarn workspaces focus @aztec/cli @aztec/aztec --production + SAVE ARTIFACT /usr/src # TODO versioning flow at end before publish? # ENV COMMIT_TAG=$EARTHLY_BUILD_SHA @@ -47,15 +39,15 @@ build: # FROM node:18.19.1-slim # ARG COMMIT_TAG="" # ENV COMMIT_TAG=$COMMIT_TAG -# COPY --from=builder /build /build -# WORKDIR /build/yarn-project +# COPY --from=builder /usr/src /usr/src +# WORKDIR /usr/src/yarn-project # ENTRYPOINT ["yarn"] aztec: FROM +build # ENV vars for using native ACVM simulation ENV ACVM_BINARY_PATH="/usr/bin/acvm" ACVM_WORKING_DIRECTORY="/tmp/acvm" - ENTRYPOINT ["node", "--no-warnings", "/build/yarn-project/aztec/dest/bin/index.js"] + ENTRYPOINT ["node", "--no-warnings", "/usr/src/yarn-project/aztec/dest/bin/index.js"] EXPOSE 8080 # TODO(AD) the following are the biggest node modules bundled, should they be deleted as they are build tools? # 25840 @jest @@ -77,7 +69,7 @@ end-to-end: # Build web bundle for browser tests RUN yarn workspace @aztec/end-to-end run build:web RUN yarn workspaces focus @aztec/end-to-end --production && yarn cache clean - SAVE ARTIFACT /build + SAVE ARTIFACT /usr/src/* end-to-end-minimal: # end to end test runner @@ -85,8 +77,8 @@ end-to-end-minimal: FROM node:18.19.1-slim RUN apt-get update && apt-get install jq chromium netcat-openbsd -y ENV CHROME_BIN="/usr/bin/chromium" - COPY +end-to-end/build /build - WORKDIR /build/yarn-project/end-to-end + COPY +end-to-end/. /usr/src + WORKDIR /usr/src/yarn-project/end-to-end ENTRYPOINT ["yarn", "test"] build-end-to-end: diff --git a/yarn-project/accounts/src/defaults/account_contract.ts b/yarn-project/accounts/src/defaults/account_contract.ts index fe270c5acf7..f2842c9ac0f 100644 --- a/yarn-project/accounts/src/defaults/account_contract.ts +++ b/yarn-project/accounts/src/defaults/account_contract.ts @@ -1,7 +1,7 @@ -import { AccountContract, AccountInterface, AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { CompleteAddress } from '@aztec/circuit-types'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { type AccountContract, type AccountInterface, type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { type CompleteAddress } from '@aztec/circuit-types'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type NodeInfo } from '@aztec/types/interfaces'; import { DefaultAccountInterface } from '../defaults/account_interface.js'; diff --git a/yarn-project/accounts/src/defaults/account_interface.ts b/yarn-project/accounts/src/defaults/account_interface.ts index e4bcf6abc5f..44e68db64e2 100644 --- a/yarn-project/accounts/src/defaults/account_interface.ts +++ b/yarn-project/accounts/src/defaults/account_interface.ts @@ -1,9 +1,9 @@ -import { AccountInterface, AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { EntrypointInterface, FeeOptions } from '@aztec/aztec.js/entrypoint'; -import { AuthWitness, FunctionCall, TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, CompleteAddress, Fr } from '@aztec/circuits.js'; +import { type AccountInterface, type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { type EntrypointInterface, type FeeOptions } from '@aztec/aztec.js/entrypoint'; +import { type AuthWitness, type FunctionCall, type TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecAddress, type CompleteAddress, Fr } from '@aztec/circuits.js'; import { DefaultAccountEntrypoint } from '@aztec/entrypoints/account'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { type NodeInfo } from '@aztec/types/interfaces'; /** * Default implementation for an account interface. Requires that the account uses the default diff --git a/yarn-project/accounts/src/ecdsa/account_contract.ts b/yarn-project/accounts/src/ecdsa/account_contract.ts index 7919ecf62a3..5c641f2acf4 100644 --- a/yarn-project/accounts/src/ecdsa/account_contract.ts +++ b/yarn-project/accounts/src/ecdsa/account_contract.ts @@ -1,8 +1,8 @@ -import { AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { AuthWitness, CompleteAddress } from '@aztec/circuit-types'; +import { type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { AuthWitness, type CompleteAddress } from '@aztec/circuit-types'; import { Ecdsa } from '@aztec/circuits.js/barretenberg'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; import { DefaultAccountContract } from '../defaults/account_contract.js'; import { EcdsaAccountContractArtifact } from './artifact.js'; diff --git a/yarn-project/accounts/src/ecdsa/artifact.ts b/yarn-project/accounts/src/ecdsa/artifact.ts index 4dd2fd60dd6..54ec3212dd0 100644 --- a/yarn-project/accounts/src/ecdsa/artifact.ts +++ b/yarn-project/accounts/src/ecdsa/artifact.ts @@ -1,4 +1,4 @@ -import { NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; +import { type NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; import EcdsaAccountContractJson from '../artifacts/EcdsaAccount.json' assert { type: 'json' }; diff --git a/yarn-project/accounts/src/ecdsa/index.ts b/yarn-project/accounts/src/ecdsa/index.ts index 3bd3c5d215d..4efcf941dcc 100644 --- a/yarn-project/accounts/src/ecdsa/index.ts +++ b/yarn-project/accounts/src/ecdsa/index.ts @@ -4,10 +4,10 @@ * * @packageDocumentation */ -import { AccountManager, Salt } from '@aztec/aztec.js/account'; -import { AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; -import { GrumpkinPrivateKey, PXE } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; +import { AccountManager, type Salt } from '@aztec/aztec.js/account'; +import { type AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; +import { type GrumpkinPrivateKey, type PXE } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; import { EcdsaAccountContract } from './account_contract.js'; diff --git a/yarn-project/accounts/src/schnorr/account_contract.ts b/yarn-project/accounts/src/schnorr/account_contract.ts index aa651a073f1..cac79664b28 100644 --- a/yarn-project/accounts/src/schnorr/account_contract.ts +++ b/yarn-project/accounts/src/schnorr/account_contract.ts @@ -1,8 +1,8 @@ -import { AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { AuthWitness, CompleteAddress, GrumpkinPrivateKey } from '@aztec/circuit-types'; +import { type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { AuthWitness, type CompleteAddress, type GrumpkinPrivateKey } from '@aztec/circuit-types'; import { Schnorr } from '@aztec/circuits.js/barretenberg'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; import { DefaultAccountContract } from '../defaults/account_contract.js'; import { SchnorrAccountContractArtifact } from './artifact.js'; diff --git a/yarn-project/accounts/src/schnorr/artifact.ts b/yarn-project/accounts/src/schnorr/artifact.ts index 1d9088bf3ca..f7cac3337f7 100644 --- a/yarn-project/accounts/src/schnorr/artifact.ts +++ b/yarn-project/accounts/src/schnorr/artifact.ts @@ -1,4 +1,4 @@ -import { NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; +import { type NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; import SchnorrAccountContractJson from '../artifacts/SchnorrAccount.json' assert { type: 'json' }; diff --git a/yarn-project/accounts/src/schnorr/index.ts b/yarn-project/accounts/src/schnorr/index.ts index ce44cdb3eab..7e752fce6ac 100644 --- a/yarn-project/accounts/src/schnorr/index.ts +++ b/yarn-project/accounts/src/schnorr/index.ts @@ -4,10 +4,10 @@ * * @packageDocumentation */ -import { AccountManager, Salt } from '@aztec/aztec.js/account'; -import { AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; -import { GrumpkinPrivateKey, PXE } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; +import { AccountManager, type Salt } from '@aztec/aztec.js/account'; +import { type AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; +import { type GrumpkinPrivateKey, type PXE } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; import { SchnorrAccountContract } from './account_contract.js'; diff --git a/yarn-project/accounts/src/single_key/account_contract.ts b/yarn-project/accounts/src/single_key/account_contract.ts index 1334c6791dc..393bbab82d8 100644 --- a/yarn-project/accounts/src/single_key/account_contract.ts +++ b/yarn-project/accounts/src/single_key/account_contract.ts @@ -1,10 +1,10 @@ import { generatePublicKey } from '@aztec/aztec.js'; -import { AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { AuthWitness, CompleteAddress, GrumpkinPrivateKey } from '@aztec/circuit-types'; -import { PartialAddress } from '@aztec/circuits.js'; +import { type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { AuthWitness, type CompleteAddress, type GrumpkinPrivateKey } from '@aztec/circuit-types'; +import { type PartialAddress } from '@aztec/circuits.js'; import { Schnorr } from '@aztec/circuits.js/barretenberg'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; import { DefaultAccountContract } from '../defaults/account_contract.js'; import { SchnorrSingleKeyAccountContractArtifact } from './artifact.js'; diff --git a/yarn-project/accounts/src/single_key/artifact.ts b/yarn-project/accounts/src/single_key/artifact.ts index 954c5f199e7..55a819dc570 100644 --- a/yarn-project/accounts/src/single_key/artifact.ts +++ b/yarn-project/accounts/src/single_key/artifact.ts @@ -1,4 +1,4 @@ -import { NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; +import { type NoirCompiledContract, loadContractArtifact } from '@aztec/aztec.js'; import SchnorrSingleKeyAccountContractJson from '../artifacts/SchnorrSingleKeyAccount.json' assert { type: 'json' }; diff --git a/yarn-project/accounts/src/single_key/index.ts b/yarn-project/accounts/src/single_key/index.ts index bf20f5da07c..1293f97fd6d 100644 --- a/yarn-project/accounts/src/single_key/index.ts +++ b/yarn-project/accounts/src/single_key/index.ts @@ -4,10 +4,10 @@ * * @packageDocumentation */ -import { AccountManager, Salt } from '@aztec/aztec.js/account'; -import { AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; -import { GrumpkinPrivateKey, PXE } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; +import { AccountManager, type Salt } from '@aztec/aztec.js/account'; +import { type AccountWallet, getWallet } from '@aztec/aztec.js/wallet'; +import { type GrumpkinPrivateKey, type PXE } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; import { SingleKeyAccountContract } from './account_contract.js'; diff --git a/yarn-project/accounts/src/testing/configuration.ts b/yarn-project/accounts/src/testing/configuration.ts index 269b400366a..a7e9b2c160b 100644 --- a/yarn-project/accounts/src/testing/configuration.ts +++ b/yarn-project/accounts/src/testing/configuration.ts @@ -1,6 +1,6 @@ import { generatePublicKey } from '@aztec/aztec.js'; -import { AccountWalletWithPrivateKey } from '@aztec/aztec.js/wallet'; -import { PXE } from '@aztec/circuit-types'; +import { type AccountWalletWithPrivateKey } from '@aztec/aztec.js/wallet'; +import { type PXE } from '@aztec/circuit-types'; import { Fr, GrumpkinScalar } from '@aztec/foundation/fields'; import { getSchnorrAccount } from '../schnorr/index.js'; diff --git a/yarn-project/accounts/src/testing/create_account.ts b/yarn-project/accounts/src/testing/create_account.ts index 2003ebc278e..9b409740b6c 100644 --- a/yarn-project/accounts/src/testing/create_account.ts +++ b/yarn-project/accounts/src/testing/create_account.ts @@ -1,5 +1,5 @@ -import { AccountWalletWithPrivateKey } from '@aztec/aztec.js/wallet'; -import { PXE } from '@aztec/circuit-types'; +import { type AccountWalletWithPrivateKey } from '@aztec/aztec.js/wallet'; +import { type PXE } from '@aztec/circuit-types'; import { GrumpkinScalar } from '@aztec/circuits.js'; import { getSchnorrAccount } from '../schnorr/index.js'; diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index 3a4e4428a4c..6657106ef64 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -1,14 +1,22 @@ -import { Body, EncryptedL2BlockL2Logs, L2Block, LogType, UnencryptedL2BlockL2Logs } from '@aztec/circuit-types'; +import { type Body, EncryptedL2BlockL2Logs, L2Block, LogType, UnencryptedL2BlockL2Logs } from '@aztec/circuit-types'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { sleep } from '@aztec/foundation/sleep'; -import { AvailabilityOracleAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; - -import { MockProxy, mock } from 'jest-mock-extended'; -import { Chain, HttpTransport, Log, PublicClient, Transaction, encodeFunctionData, toHex } from 'viem'; +import { AvailabilityOracleAbi, type InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; + +import { type MockProxy, mock } from 'jest-mock-extended'; +import { + type Chain, + type HttpTransport, + type Log, + type PublicClient, + type Transaction, + encodeFunctionData, + toHex, +} from 'viem'; import { Archiver } from './archiver.js'; -import { ArchiverDataStore } from './archiver_store.js'; +import { type ArchiverDataStore } from './archiver_store.js'; import { MemoryArchiverStore } from './memory_archiver_store/memory_archiver_store.js'; describe('Archiver', () => { diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index b0c994cb2d0..989a765d912 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -1,19 +1,19 @@ import { - FromLogType, - GetUnencryptedLogsResponse, - L1ToL2MessageSource, + type FromLogType, + type GetUnencryptedLogsResponse, + type L1ToL2MessageSource, L2Block, - L2BlockL2Logs, - L2BlockSource, - L2LogsSource, - LogFilter, - LogType, - TxEffect, - TxHash, - TxReceipt, - UnencryptedL2Log, + type L2BlockL2Logs, + type L2BlockSource, + type L2LogsSource, + type LogFilter, + type LogType, + type TxEffect, + type TxHash, + type TxReceipt, + type UnencryptedL2Log, } from '@aztec/circuit-types'; -import { ContractClassRegisteredEvent, FunctionSelector } from '@aztec/circuits.js'; +import { ContractClassRegisteredEvent, type FunctionSelector } from '@aztec/circuits.js'; import { ContractInstanceDeployedEvent, PrivateFunctionBroadcastedEvent, @@ -22,28 +22,28 @@ import { isValidUnconstrainedFunctionMembershipProof, } from '@aztec/circuits.js/contract'; import { createEthereumChain } from '@aztec/ethereum'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; import { - ContractClassPublic, - ContractDataSource, - ContractInstanceWithAddress, - ExecutablePrivateFunctionWithMembershipProof, - PublicFunction, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ContractDataSource, + type ContractInstanceWithAddress, + type ExecutablePrivateFunctionWithMembershipProof, + type PublicFunction, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; import groupBy from 'lodash.groupby'; -import { Chain, HttpTransport, PublicClient, createPublicClient, http } from 'viem'; +import { type Chain, type HttpTransport, type PublicClient, createPublicClient, http } from 'viem'; -import { ArchiverDataStore } from './archiver_store.js'; -import { ArchiverConfig } from './config.js'; +import { type ArchiverDataStore } from './archiver_store.js'; +import { type ArchiverConfig } from './config.js'; import { - DataRetrieval, + type DataRetrieval, retrieveBlockBodiesFromAvailabilityOracle, retrieveBlockMetadataFromRollup, retrieveL1ToL2Messages, diff --git a/yarn-project/archiver/src/archiver/archiver_store.ts b/yarn-project/archiver/src/archiver/archiver_store.ts index ad6a792c75f..0188575228f 100644 --- a/yarn-project/archiver/src/archiver/archiver_store.ts +++ b/yarn-project/archiver/src/archiver/archiver_store.ts @@ -1,28 +1,28 @@ import { - Body, - EncryptedL2BlockL2Logs, - FromLogType, - GetUnencryptedLogsResponse, - InboxLeaf, - L2Block, - L2BlockL2Logs, - LogFilter, - LogType, - TxEffect, - TxHash, - TxReceipt, - UnencryptedL2BlockL2Logs, + type Body, + type EncryptedL2BlockL2Logs, + type FromLogType, + type GetUnencryptedLogsResponse, + type InboxLeaf, + type L2Block, + type L2BlockL2Logs, + type LogFilter, + type LogType, + type TxEffect, + type TxHash, + type TxReceipt, + type UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; -import { Fr } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { - ContractClassPublic, - ContractInstanceWithAddress, - ExecutablePrivateFunctionWithMembershipProof, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ContractInstanceWithAddress, + type ExecutablePrivateFunctionWithMembershipProof, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; -import { DataRetrieval } from './data_retrieval.js'; +import { type DataRetrieval } from './data_retrieval.js'; /** * Represents the latest L1 block processed by the archiver for various objects in L2. diff --git a/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts b/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts index 6fe2437d7a4..54d1efe177f 100644 --- a/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts +++ b/yarn-project/archiver/src/archiver/archiver_store_test_suite.ts @@ -8,10 +8,14 @@ import { } from '@aztec/circuits.js/testing'; import { times } from '@aztec/foundation/collection'; import { randomBytes, randomInt } from '@aztec/foundation/crypto'; -import { ContractClassPublic, ContractInstanceWithAddress, SerializableContractInstance } from '@aztec/types/contracts'; +import { + type ContractClassPublic, + type ContractInstanceWithAddress, + SerializableContractInstance, +} from '@aztec/types/contracts'; -import { ArchiverDataStore } from './archiver_store.js'; -import { DataRetrieval } from './data_retrieval.js'; +import { type ArchiverDataStore } from './archiver_store.js'; +import { type DataRetrieval } from './data_retrieval.js'; /** * @param testName - The name of the test suite. diff --git a/yarn-project/archiver/src/archiver/config.ts b/yarn-project/archiver/src/archiver/config.ts index 8a741ff31ac..fe1fb79e848 100644 --- a/yarn-project/archiver/src/archiver/config.ts +++ b/yarn-project/archiver/src/archiver/config.ts @@ -1,4 +1,4 @@ -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; import { EthAddress } from '@aztec/foundation/eth-address'; /** diff --git a/yarn-project/archiver/src/archiver/data_retrieval.ts b/yarn-project/archiver/src/archiver/data_retrieval.ts index 86f1fc6e8bf..46dd01160f2 100644 --- a/yarn-project/archiver/src/archiver/data_retrieval.ts +++ b/yarn-project/archiver/src/archiver/data_retrieval.ts @@ -1,8 +1,8 @@ -import { Body, InboxLeaf } from '@aztec/circuit-types'; -import { AppendOnlyTreeSnapshot, Header } from '@aztec/circuits.js'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type Body, type InboxLeaf } from '@aztec/circuit-types'; +import { type AppendOnlyTreeSnapshot, type Header } from '@aztec/circuits.js'; +import { type EthAddress } from '@aztec/foundation/eth-address'; -import { PublicClient } from 'viem'; +import { type PublicClient } from 'viem'; import { getL2BlockProcessedLogs, diff --git a/yarn-project/archiver/src/archiver/eth_log_handlers.ts b/yarn-project/archiver/src/archiver/eth_log_handlers.ts index 4c04f3f4410..88c91b7dcf0 100644 --- a/yarn-project/archiver/src/archiver/eth_log_handlers.ts +++ b/yarn-project/archiver/src/archiver/eth_log_handlers.ts @@ -1,11 +1,11 @@ import { Body, InboxLeaf } from '@aztec/circuit-types'; import { AppendOnlyTreeSnapshot, Header } from '@aztec/circuits.js'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { numToUInt32BE } from '@aztec/foundation/serialize'; import { AvailabilityOracleAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts'; -import { Hex, Log, PublicClient, decodeFunctionData, getAbiItem, getAddress, hexToBytes } from 'viem'; +import { type Hex, type Log, type PublicClient, decodeFunctionData, getAbiItem, getAddress, hexToBytes } from 'viem'; /** * Processes newly received MessageSent (L1 to L2) logs. diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts index 11518efb113..4dce18fca50 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_body_store.ts @@ -1,5 +1,5 @@ import { Body } from '@aztec/circuit-types'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; export class BlockBodyStore { /** Map block body hash to block body */ diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts index f00fa2ea216..873b80496d2 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/block_store.ts @@ -1,10 +1,10 @@ -import { L2Block, TxEffect, TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; -import { AppendOnlyTreeSnapshot, AztecAddress, Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; +import { L2Block, type TxEffect, type TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; +import { AppendOnlyTreeSnapshot, type AztecAddress, Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore, AztecMap, AztecSingleton, Range } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecMap, type AztecSingleton, type Range } from '@aztec/kv-store'; -import { DataRetrieval } from '../data_retrieval.js'; -import { BlockBodyStore } from './block_body_store.js'; +import { type DataRetrieval } from '../data_retrieval.js'; +import { type BlockBodyStore } from './block_body_store.js'; type BlockIndexValue = [blockNumber: number, index: number]; diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/contract_class_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/contract_class_store.ts index a07dd5f3de7..8c14213d37e 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/contract_class_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/contract_class_store.ts @@ -1,10 +1,10 @@ import { Fr, FunctionSelector, Vector } from '@aztec/circuits.js'; import { BufferReader, numToUInt8, serializeToBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; import { - ContractClassPublic, - ExecutablePrivateFunctionWithMembershipProof, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ExecutablePrivateFunctionWithMembershipProof, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; /** diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/contract_instance_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/contract_instance_store.ts index cebdad65df9..0c8b8597b65 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/contract_instance_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/contract_instance_store.ts @@ -1,6 +1,6 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; -import { ContractInstanceWithAddress, SerializableContractInstance } from '@aztec/types/contracts'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; +import { type ContractInstanceWithAddress, SerializableContractInstance } from '@aztec/types/contracts'; /** * LMDB implementation of the ArchiverDataStore interface. diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts index ab8c12d795d..c01b8d2202b 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/kv_archiver_store.ts @@ -1,31 +1,31 @@ import { - Body, - EncryptedL2BlockL2Logs, - FromLogType, - GetUnencryptedLogsResponse, - InboxLeaf, - L2Block, - L2BlockL2Logs, - LogFilter, - LogType, - TxEffect, - TxHash, - TxReceipt, - UnencryptedL2BlockL2Logs, + type Body, + type EncryptedL2BlockL2Logs, + type FromLogType, + type GetUnencryptedLogsResponse, + type InboxLeaf, + type L2Block, + type L2BlockL2Logs, + type LogFilter, + type LogType, + type TxEffect, + type TxHash, + type TxReceipt, + type UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; -import { Fr } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { - ContractClassPublic, - ContractInstanceWithAddress, - ExecutablePrivateFunctionWithMembershipProof, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ContractInstanceWithAddress, + type ExecutablePrivateFunctionWithMembershipProof, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; -import { ArchiverDataStore, ArchiverL1SynchPoint } from '../archiver_store.js'; -import { DataRetrieval } from '../data_retrieval.js'; +import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js'; +import { type DataRetrieval } from '../data_retrieval.js'; import { BlockBodyStore } from './block_body_store.js'; import { BlockStore } from './block_store.js'; import { ContractClassStore } from './contract_class_store.js'; diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts index cada02c9979..26590fb626c 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/log_store.ts @@ -1,20 +1,20 @@ import { EncryptedL2BlockL2Logs, ExtendedUnencryptedL2Log, - FromLogType, - GetUnencryptedLogsResponse, - L2BlockL2Logs, - LogFilter, + type FromLogType, + type GetUnencryptedLogsResponse, + type L2BlockL2Logs, + type LogFilter, LogId, LogType, UnencryptedL2BlockL2Logs, - UnencryptedL2Log, + type UnencryptedL2Log, } from '@aztec/circuit-types'; import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; -import { BlockStore } from './block_store.js'; +import { type BlockStore } from './block_store.js'; /** * A store for logs diff --git a/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts b/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts index e85a36e2df6..8b6023ad65c 100644 --- a/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts +++ b/yarn-project/archiver/src/archiver/kv_archiver_store/message_store.ts @@ -1,4 +1,4 @@ -import { InboxLeaf } from '@aztec/circuit-types'; +import { type InboxLeaf } from '@aztec/circuit-types'; import { Fr, INITIAL_L2_BLOCK_NUM, @@ -6,9 +6,9 @@ import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore, AztecMap, AztecSingleton } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecMap, type AztecSingleton } from '@aztec/kv-store'; -import { DataRetrieval } from '../data_retrieval.js'; +import { type DataRetrieval } from '../data_retrieval.js'; /** * LMDB implementation of the ArchiverDataStore interface. diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts index e311e1b8ed3..a922e62067e 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts @@ -1,10 +1,10 @@ -import { InboxLeaf } from '@aztec/circuit-types'; +import { type InboxLeaf } from '@aztec/circuit-types'; import { INITIAL_L2_BLOCK_NUM, L1_TO_L2_MSG_SUBTREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '@aztec/circuits.js/constants'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * A simple in-memory implementation of an L1 to L2 message store. diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts index 38707f67190..7c90a611c2f 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.test.ts @@ -1,6 +1,6 @@ import { L2Block } from '@aztec/circuit-types'; -import { ArchiverDataStore } from '../archiver_store.js'; +import { type ArchiverDataStore } from '../archiver_store.js'; import { describeArchiverDataStore } from '../archiver_store_test_suite.js'; import { MemoryArchiverStore } from './memory_archiver_store.js'; diff --git a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts index c30aeff7a9b..2273ded7ab5 100644 --- a/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts +++ b/yarn-project/archiver/src/archiver/memory_archiver_store/memory_archiver_store.ts @@ -1,33 +1,33 @@ import { - Body, - EncryptedL2BlockL2Logs, + type Body, + type EncryptedL2BlockL2Logs, ExtendedUnencryptedL2Log, - FromLogType, - GetUnencryptedLogsResponse, - InboxLeaf, - L2Block, + type FromLogType, + type GetUnencryptedLogsResponse, + type InboxLeaf, + type L2Block, L2BlockContext, - L2BlockL2Logs, - LogFilter, + type L2BlockL2Logs, + type LogFilter, LogId, LogType, - TxEffect, - TxHash, + type TxEffect, + type TxHash, TxReceipt, TxStatus, - UnencryptedL2BlockL2Logs, + type UnencryptedL2BlockL2Logs, } from '@aztec/circuit-types'; import { Fr, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { - ContractClassPublic, - ContractInstanceWithAddress, - ExecutablePrivateFunctionWithMembershipProof, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ContractInstanceWithAddress, + type ExecutablePrivateFunctionWithMembershipProof, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; -import { ArchiverDataStore, ArchiverL1SynchPoint } from '../archiver_store.js'; -import { DataRetrieval } from '../data_retrieval.js'; +import { type ArchiverDataStore, type ArchiverL1SynchPoint } from '../archiver_store.js'; +import { type DataRetrieval } from '../data_retrieval.js'; import { L1ToL2MessageStore } from './l1_to_l2_message_store.js'; /** diff --git a/yarn-project/archiver/src/rpc/archiver_client.ts b/yarn-project/archiver/src/rpc/archiver_client.ts index 2e456cc6218..53fb5775103 100644 --- a/yarn-project/archiver/src/rpc/archiver_client.ts +++ b/yarn-project/archiver/src/rpc/archiver_client.ts @@ -9,7 +9,7 @@ import { import { EthAddress, Fr } from '@aztec/circuits.js'; import { createJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/client'; -import { ArchiveSource } from '../archiver/archiver.js'; +import { type ArchiveSource } from '../archiver/archiver.js'; export const createArchiverClient = (url: string, fetch = makeFetch([1, 2, 3], true)): ArchiveSource => createJsonRpcClient( diff --git a/yarn-project/archiver/src/rpc/archiver_server.ts b/yarn-project/archiver/src/rpc/archiver_server.ts index 8e96db9bcbb..02a5472e46c 100644 --- a/yarn-project/archiver/src/rpc/archiver_server.ts +++ b/yarn-project/archiver/src/rpc/archiver_server.ts @@ -10,7 +10,7 @@ import { import { EthAddress, Fr } from '@aztec/circuits.js'; import { JsonRpcServer } from '@aztec/foundation/json-rpc/server'; -import { Archiver } from '../archiver/archiver.js'; +import { type Archiver } from '../archiver/archiver.js'; /** * Wrap an Archiver instance with a JSON RPC HTTP server. diff --git a/yarn-project/aztec-faucet/src/bin/index.ts b/yarn-project/aztec-faucet/src/bin/index.ts index dd93e9655f1..ad96b2839b6 100644 --- a/yarn-project/aztec-faucet/src/bin/index.ts +++ b/yarn-project/aztec-faucet/src/bin/index.ts @@ -7,7 +7,7 @@ import http from 'http'; import Koa from 'koa'; import cors from 'koa-cors'; import Router from 'koa-router'; -import { Hex, http as ViemHttp, createPublicClient, createWalletClient, parseEther } from 'viem'; +import { type Hex, http as ViemHttp, createPublicClient, createWalletClient, parseEther } from 'viem'; import { privateKeyToAccount } from 'viem/accounts'; const { diff --git a/yarn-project/aztec-node/src/aztec-node/config.ts b/yarn-project/aztec-node/src/aztec-node/config.ts index 07f79f82383..125ec88b287 100644 --- a/yarn-project/aztec-node/src/aztec-node/config.ts +++ b/yarn-project/aztec-node/src/aztec-node/config.ts @@ -1,6 +1,6 @@ -import { ArchiverConfig, getConfigEnvVars as getArchiverVars } from '@aztec/archiver'; -import { P2PConfig, getP2PConfigEnvVars } from '@aztec/p2p'; -import { SequencerClientConfig, getConfigEnvVars as getSequencerVars } from '@aztec/sequencer-client'; +import { type ArchiverConfig, getConfigEnvVars as getArchiverVars } from '@aztec/archiver'; +import { type P2PConfig, getP2PConfigEnvVars } from '@aztec/p2p'; +import { type SequencerClientConfig, getConfigEnvVars as getSequencerVars } from '@aztec/sequencer-client'; import { getConfigEnvVars as getWorldStateVars } from '@aztec/world-state'; /** diff --git a/yarn-project/aztec-node/src/aztec-node/http_rpc_server.ts b/yarn-project/aztec-node/src/aztec-node/http_rpc_server.ts index 7158662dfc5..dd283644826 100644 --- a/yarn-project/aztec-node/src/aztec-node/http_rpc_server.ts +++ b/yarn-project/aztec-node/src/aztec-node/http_rpc_server.ts @@ -1,5 +1,5 @@ import { - AztecNode, + type AztecNode, EncryptedL2BlockL2Logs, ExtendedUnencryptedL2Log, L2Block, diff --git a/yarn-project/aztec-node/src/aztec-node/server.test.ts b/yarn-project/aztec-node/src/aztec-node/server.test.ts index a972190d03b..309a9ef3bcc 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.test.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.test.ts @@ -1,6 +1,6 @@ import { createEthereumChain } from '@aztec/ethereum'; -import { AztecNodeConfig, AztecNodeService } from '../index.js'; +import { type AztecNodeConfig, AztecNodeService } from '../index.js'; describe('aztec node service', () => { it('fails to create Aztec Node if given incorrect chain id', async () => { diff --git a/yarn-project/aztec-node/src/aztec-node/server.ts b/yarn-project/aztec-node/src/aztec-node/server.ts index 12872a6ec2d..e00c0b93f14 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.ts @@ -1,73 +1,77 @@ -import { ArchiveSource, Archiver, KVArchiverDataStore, createArchiverClient } from '@aztec/archiver'; +import { type ArchiveSource, Archiver, KVArchiverDataStore, createArchiverClient } from '@aztec/archiver'; import { - AztecNode, - FromLogType, - GetUnencryptedLogsResponse, - L1ToL2MessageSource, - L2Block, - L2BlockL2Logs, - L2BlockNumber, - L2BlockSource, - L2LogsSource, - LogFilter, + type AztecNode, + type FromLogType, + type GetUnencryptedLogsResponse, + type L1ToL2MessageSource, + type L2Block, + type L2BlockL2Logs, + type L2BlockNumber, + type L2BlockSource, + type L2LogsSource, + type LogFilter, LogType, MerkleTreeId, NullifierMembershipWitness, - ProverClient, + type ProverClient, PublicDataWitness, - SequencerConfig, - SiblingPath, - Tx, - TxEffect, - TxHash, + type SequencerConfig, + type SiblingPath, + type Tx, + type TxEffect, + type TxHash, TxReceipt, TxStatus, partitionReverts, } from '@aztec/circuit-types'; import { - ARCHIVE_HEIGHT, + type ARCHIVE_HEIGHT, EthAddress, Fr, - Header, + type Header, INITIAL_L2_BLOCK_NUM, - L1_TO_L2_MSG_TREE_HEIGHT, + type L1_TO_L2_MSG_TREE_HEIGHT, L2_TO_L1_MESSAGE_LENGTH, MAX_NEW_L2_TO_L1_MSGS_PER_TX, type NOTE_HASH_TREE_HEIGHT, type NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, - NullifierLeafPreimage, - PUBLIC_DATA_TREE_HEIGHT, - PublicDataTreeLeafPreimage, + type NullifierLeafPreimage, + type PUBLIC_DATA_TREE_HEIGHT, + type PublicDataTreeLeafPreimage, } from '@aztec/circuits.js'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; -import { L1ContractAddresses, createEthereumChain } from '@aztec/ethereum'; +import { type L1ContractAddresses, createEthereumChain } from '@aztec/ethereum'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { padArrayEnd } from '@aztec/foundation/collection'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { AztecLmdbStore } from '@aztec/kv-store/lmdb'; import { initStoreForRollup, openTmpStore } from '@aztec/kv-store/utils'; import { SHA256Trunc, StandardTree } from '@aztec/merkle-tree'; -import { AztecKVTxPool, P2P, createP2PClient } from '@aztec/p2p'; +import { AztecKVTxPool, type P2P, createP2PClient } from '@aztec/p2p'; import { DummyProver, TxProver } from '@aztec/prover-client'; import { - GlobalVariableBuilder, + type GlobalVariableBuilder, PublicProcessorFactory, SequencerClient, getGlobalVariableBuilder, } from '@aztec/sequencer-client'; import { WASMSimulator } from '@aztec/simulator'; -import { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { + type ContractClassPublic, + type ContractDataSource, + type ContractInstanceWithAddress, +} from '@aztec/types/contracts'; import { MerkleTrees, ServerWorldStateSynchronizer, - WorldStateConfig, - WorldStateSynchronizer, + type WorldStateConfig, + type WorldStateSynchronizer, getConfigEnvVars as getWorldStateConfig, } from '@aztec/world-state'; -import { AztecNodeConfig } from './config.js'; +import { type AztecNodeConfig } from './config.js'; import { getSimulationProvider } from './simulator-factory.js'; /** diff --git a/yarn-project/aztec-node/src/aztec-node/simulator-factory.ts b/yarn-project/aztec-node/src/aztec-node/simulator-factory.ts index 8cf8de0b01f..0ccaf6be6e6 100644 --- a/yarn-project/aztec-node/src/aztec-node/simulator-factory.ts +++ b/yarn-project/aztec-node/src/aztec-node/simulator-factory.ts @@ -1,9 +1,9 @@ -import { DebugLogger } from '@aztec/foundation/log'; -import { NativeACVMSimulator, SimulationProvider, WASMSimulator } from '@aztec/simulator'; +import { type DebugLogger } from '@aztec/foundation/log'; +import { NativeACVMSimulator, type SimulationProvider, WASMSimulator } from '@aztec/simulator'; import * as fs from 'fs/promises'; -import { AztecNodeConfig } from './config.js'; +import { type AztecNodeConfig } from './config.js'; export async function getSimulationProvider( config: AztecNodeConfig, diff --git a/yarn-project/aztec-node/src/bin/index.ts b/yarn-project/aztec-node/src/bin/index.ts index 7d265c0f2f6..e1688b79198 100644 --- a/yarn-project/aztec-node/src/bin/index.ts +++ b/yarn-project/aztec-node/src/bin/index.ts @@ -3,7 +3,7 @@ import { createDebugLogger } from '@aztec/foundation/log'; import http from 'http'; -import { AztecNodeConfig, AztecNodeService, createAztecNodeRpcServer, getConfigEnvVars } from '../index.js'; +import { type AztecNodeConfig, AztecNodeService, createAztecNodeRpcServer, getConfigEnvVars } from '../index.js'; const { AZTEC_NODE_PORT = 8081, API_PREFIX = '' } = process.env; diff --git a/yarn-project/aztec.js/src/account/contract.ts b/yarn-project/aztec.js/src/account/contract.ts index f85afacf4b7..0711292bbac 100644 --- a/yarn-project/aztec.js/src/account/contract.ts +++ b/yarn-project/aztec.js/src/account/contract.ts @@ -1,8 +1,8 @@ -import { CompleteAddress } from '@aztec/circuit-types'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { type CompleteAddress } from '@aztec/circuit-types'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type NodeInfo } from '@aztec/types/interfaces'; -import { AccountInterface } from './interface.js'; +import { type AccountInterface } from './interface.js'; // docs:start:account-contract-interface /** diff --git a/yarn-project/aztec.js/src/account/index.ts b/yarn-project/aztec.js/src/account/index.ts index 19f673839ee..1e17feb770a 100644 --- a/yarn-project/aztec.js/src/account/index.ts +++ b/yarn-project/aztec.js/src/account/index.ts @@ -6,7 +6,7 @@ * * @packageDocumentation */ -import { Fr } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/circuits.js'; export { AccountContract } from './contract.js'; export { AccountInterface, AuthWitnessProvider } from './interface.js'; diff --git a/yarn-project/aztec.js/src/account/interface.ts b/yarn-project/aztec.js/src/account/interface.ts index 4a3b90e2444..5a5ab2cf28e 100644 --- a/yarn-project/aztec.js/src/account/interface.ts +++ b/yarn-project/aztec.js/src/account/interface.ts @@ -1,9 +1,9 @@ -import { AuthWitness, CompleteAddress, FunctionCall } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; -import { Fr } from '@aztec/foundation/fields'; +import { type AuthWitness, type CompleteAddress, type FunctionCall } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/foundation/fields'; -import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { EntrypointInterface } from '../entrypoint/entrypoint.js'; +import { type ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; +import { type EntrypointInterface } from '../entrypoint/entrypoint.js'; // docs:start:account-interface /** Creates authorization witnesses. */ diff --git a/yarn-project/aztec.js/src/account/wallet.ts b/yarn-project/aztec.js/src/account/wallet.ts index a5b7bf963cb..b618abf94c8 100644 --- a/yarn-project/aztec.js/src/account/wallet.ts +++ b/yarn-project/aztec.js/src/account/wallet.ts @@ -1,6 +1,6 @@ -import { PXE } from '@aztec/circuit-types'; +import { type PXE } from '@aztec/circuit-types'; -import { AccountInterface } from './interface.js'; +import { type AccountInterface } from './interface.js'; /** * The wallet interface. diff --git a/yarn-project/aztec.js/src/account_manager/deploy_account_sent_tx.ts b/yarn-project/aztec.js/src/account_manager/deploy_account_sent_tx.ts index 5fd45b835a8..cfaa577ea8e 100644 --- a/yarn-project/aztec.js/src/account_manager/deploy_account_sent_tx.ts +++ b/yarn-project/aztec.js/src/account_manager/deploy_account_sent_tx.ts @@ -1,8 +1,8 @@ -import { TxHash, TxReceipt } from '@aztec/circuit-types'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type TxHash, type TxReceipt } from '@aztec/circuit-types'; +import { type FieldsOf } from '@aztec/foundation/types'; -import { Wallet } from '../account/index.js'; -import { DefaultWaitOpts, SentTx, WaitOpts } from '../contract/index.js'; +import { type Wallet } from '../account/index.js'; +import { DefaultWaitOpts, SentTx, type WaitOpts } from '../contract/index.js'; import { waitForAccountSynch } from '../utils/account.js'; /** Extends a transaction receipt with a wallet instance for the newly deployed contract. */ diff --git a/yarn-project/aztec.js/src/account_manager/index.ts b/yarn-project/aztec.js/src/account_manager/index.ts index 7814dafa78f..d18bc8b38d2 100644 --- a/yarn-project/aztec.js/src/account_manager/index.ts +++ b/yarn-project/aztec.js/src/account_manager/index.ts @@ -1,13 +1,13 @@ -import { CompleteAddress, GrumpkinPrivateKey, PXE } from '@aztec/circuit-types'; -import { PublicKey, getContractInstanceFromDeployParams } from '@aztec/circuits.js'; +import { CompleteAddress, type GrumpkinPrivateKey, type PXE } from '@aztec/circuit-types'; +import { type PublicKey, getContractInstanceFromDeployParams } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { AccountContract } from '../account/contract.js'; -import { Salt } from '../account/index.js'; -import { AccountInterface } from '../account/interface.js'; -import { DeployMethod } from '../contract/deploy_method.js'; -import { DefaultWaitOpts, WaitOpts } from '../contract/sent_tx.js'; +import { type AccountContract } from '../account/contract.js'; +import { type Salt } from '../account/index.js'; +import { type AccountInterface } from '../account/interface.js'; +import { type DeployMethod } from '../contract/deploy_method.js'; +import { DefaultWaitOpts, type WaitOpts } from '../contract/sent_tx.js'; import { ContractDeployer } from '../deployment/contract_deployer.js'; import { waitForAccountSynch } from '../utils/account.js'; import { generatePublicKey } from '../utils/index.js'; diff --git a/yarn-project/aztec.js/src/contract/base_contract_interaction.ts b/yarn-project/aztec.js/src/contract/base_contract_interaction.ts index d9f024ee29e..1125a528ec2 100644 --- a/yarn-project/aztec.js/src/contract/base_contract_interaction.ts +++ b/yarn-project/aztec.js/src/contract/base_contract_interaction.ts @@ -1,6 +1,6 @@ -import { PXE, Tx, TxExecutionRequest } from '@aztec/circuit-types'; +import { type PXE, type Tx, type TxExecutionRequest } from '@aztec/circuit-types'; -import { FeeOptions } from '../entrypoint/entrypoint.js'; +import { type FeeOptions } from '../entrypoint/entrypoint.js'; import { SentTx } from './sent_tx.js'; /** diff --git a/yarn-project/aztec.js/src/contract/batch_call.ts b/yarn-project/aztec.js/src/contract/batch_call.ts index 4bfd2187952..b6a9c29f5c5 100644 --- a/yarn-project/aztec.js/src/contract/batch_call.ts +++ b/yarn-project/aztec.js/src/contract/batch_call.ts @@ -1,7 +1,7 @@ -import { FunctionCall, TxExecutionRequest } from '@aztec/circuit-types'; +import { type FunctionCall, type TxExecutionRequest } from '@aztec/circuit-types'; -import { Wallet } from '../account/index.js'; -import { BaseContractInteraction, SendMethodOptions } from './base_contract_interaction.js'; +import { type Wallet } from '../account/index.js'; +import { BaseContractInteraction, type SendMethodOptions } from './base_contract_interaction.js'; /** A batch of function calls to be sent as a single transaction through a wallet. */ export class BatchCall extends BaseContractInteraction { diff --git a/yarn-project/aztec.js/src/contract/checker.ts b/yarn-project/aztec.js/src/contract/checker.ts index e6c449cfb75..438bef2048c 100644 --- a/yarn-project/aztec.js/src/contract/checker.ts +++ b/yarn-project/aztec.js/src/contract/checker.ts @@ -1,4 +1,4 @@ -import { type AbiType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; +import { type ABIType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; /** * Represents a type derived from input type T with the 'kind' property removed. @@ -51,10 +51,10 @@ export function abiChecker(artifact: ContractArtifact) { * Throws an error if the type has an unrecognized kind or incorrectly formed attributes. * Additionally, checks nested types for array and struct kinds. * - * @param type - The AbiType object representing the type of the ABI function parameter. + * @param type - The ABIType object representing the type of the ABI function parameter. * @returns A boolean value indicating whether the type is valid or not. */ -function abiParameterTypeChecker(type: AbiType): boolean { +function abiParameterTypeChecker(type: ABIType): boolean { switch (type.kind) { case 'field': case 'boolean': @@ -73,7 +73,7 @@ function abiParameterTypeChecker(type: AbiType): boolean { } /** - * Check if the structure of the AbiType 'struct' is valid by ensuring field names are strings + * Check if the structure of the ABIType 'struct' is valid by ensuring field names are strings * and their type attribute passes the abiParameterTypeChecker. Returns true on successful validation, * otherwise throws an error providing insight into the incorrect formation in the struct. * diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index 0bf70d6b08b..ea338b82c62 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -1,13 +1,13 @@ -import { Tx, TxExecutionRequest, TxHash, TxReceipt } from '@aztec/circuit-types'; +import { type Tx, type TxExecutionRequest, type TxHash, type TxReceipt } from '@aztec/circuit-types'; import { AztecAddress, CompleteAddress, EthAddress } from '@aztec/circuits.js'; import { type L1ContractAddresses } from '@aztec/ethereum'; import { ABIParameterVisibility, type ContractArtifact, type DecodedReturn, FunctionType } from '@aztec/foundation/abi'; import { type NodeInfo } from '@aztec/types/interfaces'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { ContractInstanceWithAddress } from '../index.js'; -import { Wallet } from '../wallet/index.js'; +import { type ContractInstanceWithAddress } from '../index.js'; +import { type Wallet } from '../wallet/index.js'; import { Contract } from './contract.js'; describe('Contract Class', () => { @@ -100,10 +100,7 @@ describe('Contract Class', () => { debugSymbols: '', }, ], - outputs: { - structs: {}, - globals: {}, - }, + events: [], fileMap: {}, }; diff --git a/yarn-project/aztec.js/src/contract/contract.ts b/yarn-project/aztec.js/src/contract/contract.ts index 67501983cb0..36b4c831a4b 100644 --- a/yarn-project/aztec.js/src/contract/contract.ts +++ b/yarn-project/aztec.js/src/contract/contract.ts @@ -1,9 +1,9 @@ -import { PublicKey } from '@aztec/circuit-types'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type PublicKey } from '@aztec/circuit-types'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Point } from '@aztec/foundation/fields'; -import { Wallet } from '../account/index.js'; +import { type Wallet } from '../account/index.js'; import { ContractBase } from './contract_base.js'; import { DeployMethod } from './deploy_method.js'; diff --git a/yarn-project/aztec.js/src/contract/contract_base.ts b/yarn-project/aztec.js/src/contract/contract_base.ts index e4dca07a868..a49a7205c13 100644 --- a/yarn-project/aztec.js/src/contract/contract_base.ts +++ b/yarn-project/aztec.js/src/contract/contract_base.ts @@ -1,8 +1,8 @@ -import { Fr, computePartialAddress } from '@aztec/circuits.js'; -import { ContractArtifact, FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { computePartialAddress } from '@aztec/circuits.js'; +import { type ContractArtifact, type FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { Wallet } from '../account/index.js'; +import { type Wallet } from '../account/index.js'; import { ContractFunctionInteraction } from './contract_function_interaction.js'; /** @@ -16,48 +16,6 @@ export type ContractMethod = ((...args: any[]) => ContractFunctionInteraction) & readonly selector: FunctionSelector; }; -/** - * Type representing a field layout in the storage of a contract. - */ -type FieldLayout = { - /** - * Slot in which the field is stored. - */ - slot: Fr; - /** - * Type being stored at the slot - */ - typ: string; -}; - -/** - * Type representing a note in use in the contract. - */ -type ContractNote = { - /** - * Note identifier - */ - id: Fr; - /** - * Type of the note - */ - typ: string; -}; - -/** - * Type representing the storage layout of a contract. - */ -export type ContractStorageLayout = { - [K in T]: FieldLayout; -}; - -/** - * Type representing the notes used in a contract. - */ -export type ContractNotes = { - [K in T]: ContractNote; -}; - /** * Abstract implementation of a contract extended by the Contract class and generated contract types. */ diff --git a/yarn-project/aztec.js/src/contract/deploy_method.ts b/yarn-project/aztec.js/src/contract/deploy_method.ts index 36c3316ae08..93cce037db6 100644 --- a/yarn-project/aztec.js/src/contract/deploy_method.ts +++ b/yarn-project/aztec.js/src/contract/deploy_method.ts @@ -1,22 +1,22 @@ -import { FunctionCall, PublicKey, Tx, TxExecutionRequest } from '@aztec/circuit-types'; +import { type FunctionCall, type PublicKey, type Tx, type TxExecutionRequest } from '@aztec/circuit-types'; import { AztecAddress, computePartialAddress, getContractClassFromArtifact, getContractInstanceFromDeployParams, } from '@aztec/circuits.js'; -import { ContractArtifact, FunctionArtifact, getInitializer } from '@aztec/foundation/abi'; -import { EthAddress } from '@aztec/foundation/eth-address'; -import { Fr } from '@aztec/foundation/fields'; +import { type ContractArtifact, type FunctionArtifact, getInitializer } from '@aztec/foundation/abi'; +import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { Wallet } from '../account/index.js'; +import { type Wallet } from '../account/index.js'; import { deployInstance } from '../deployment/deploy_instance.js'; import { registerContractClass } from '../deployment/register_class.js'; -import { BaseContractInteraction, SendMethodOptions } from './base_contract_interaction.js'; +import { BaseContractInteraction, type SendMethodOptions } from './base_contract_interaction.js'; import { type Contract } from './contract.js'; -import { ContractBase } from './contract_base.js'; +import { type ContractBase } from './contract_base.js'; import { ContractFunctionInteraction } from './contract_function_interaction.js'; import { DeploySentTx } from './deploy_sent_tx.js'; diff --git a/yarn-project/aztec.js/src/contract/deploy_sent_tx.ts b/yarn-project/aztec.js/src/contract/deploy_sent_tx.ts index a9898e71267..224a2adff5e 100644 --- a/yarn-project/aztec.js/src/contract/deploy_sent_tx.ts +++ b/yarn-project/aztec.js/src/contract/deploy_sent_tx.ts @@ -1,12 +1,12 @@ -import { PXE, TxHash, TxReceipt } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; -import { FieldsOf } from '@aztec/foundation/types'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type PXE, type TxHash, type TxReceipt } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type FieldsOf } from '@aztec/foundation/types'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { Wallet } from '../account/index.js'; +import { type Wallet } from '../account/index.js'; import { type Contract } from './contract.js'; -import { ContractBase } from './contract_base.js'; -import { SentTx, WaitOpts } from './sent_tx.js'; +import { type ContractBase } from './contract_base.js'; +import { SentTx, type WaitOpts } from './sent_tx.js'; /** Options related to waiting for a deployment tx. */ export type DeployedWaitOpts = WaitOpts & { diff --git a/yarn-project/aztec.js/src/contract/sent_tx.test.ts b/yarn-project/aztec.js/src/contract/sent_tx.test.ts index b9f2b78bea1..649cd6f9e8d 100644 --- a/yarn-project/aztec.js/src/contract/sent_tx.test.ts +++ b/yarn-project/aztec.js/src/contract/sent_tx.test.ts @@ -1,6 +1,6 @@ -import { PXE, TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; +import { type PXE, TxHash, type TxReceipt, TxStatus } from '@aztec/circuit-types'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { SentTx } from './sent_tx.js'; diff --git a/yarn-project/aztec.js/src/contract/sent_tx.ts b/yarn-project/aztec.js/src/contract/sent_tx.ts index 751fc3b5c77..c4182252244 100644 --- a/yarn-project/aztec.js/src/contract/sent_tx.ts +++ b/yarn-project/aztec.js/src/contract/sent_tx.ts @@ -1,6 +1,13 @@ -import { ExtendedNote, GetUnencryptedLogsResponse, PXE, TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; +import { + type ExtendedNote, + type GetUnencryptedLogsResponse, + type PXE, + type TxHash, + type TxReceipt, + TxStatus, +} from '@aztec/circuit-types'; import { retryUntil } from '@aztec/foundation/retry'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; /** Options related to waiting for a tx. */ export type WaitOpts = { diff --git a/yarn-project/aztec.js/src/contract/unsafe_contract.ts b/yarn-project/aztec.js/src/contract/unsafe_contract.ts index d010d7121c7..e47fb3b3266 100644 --- a/yarn-project/aztec.js/src/contract/unsafe_contract.ts +++ b/yarn-project/aztec.js/src/contract/unsafe_contract.ts @@ -1,7 +1,7 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { Wallet } from '../wallet/index.js'; +import { type Wallet } from '../wallet/index.js'; import { ContractBase } from './contract_base.js'; /** Unsafe constructor for ContractBase that bypasses the check that the instance is registered in the wallet. */ diff --git a/yarn-project/aztec.js/src/deployment/broadcast_function.ts b/yarn-project/aztec.js/src/deployment/broadcast_function.ts index e748629b5ad..6bb647af033 100644 --- a/yarn-project/aztec.js/src/deployment/broadcast_function.ts +++ b/yarn-project/aztec.js/src/deployment/broadcast_function.ts @@ -6,12 +6,12 @@ import { createUnconstrainedFunctionMembershipProof, getContractClassFromArtifact, } from '@aztec/circuits.js'; -import { ContractArtifact, FunctionSelector, FunctionType, bufferAsFields } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionSelector, FunctionType, bufferAsFields } from '@aztec/foundation/abi'; import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; -import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { Wallet } from '../wallet/index.js'; +import { type ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; +import { type Wallet } from '../wallet/index.js'; import { getRegistererContract } from './protocol_contracts.js'; /** diff --git a/yarn-project/aztec.js/src/deployment/contract_deployer.ts b/yarn-project/aztec.js/src/deployment/contract_deployer.ts index 09420c60401..bd0f04ea74f 100644 --- a/yarn-project/aztec.js/src/deployment/contract_deployer.ts +++ b/yarn-project/aztec.js/src/deployment/contract_deployer.ts @@ -1,9 +1,9 @@ -import { PublicKey } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type PublicKey } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { Point } from '@aztec/foundation/fields'; -import { Wallet } from '../account/wallet.js'; +import { type Wallet } from '../account/wallet.js'; import { DeployMethod } from '../contract/deploy_method.js'; import { Contract } from '../contract/index.js'; diff --git a/yarn-project/aztec.js/src/deployment/deploy_instance.ts b/yarn-project/aztec.js/src/deployment/deploy_instance.ts index aac32143c17..c6ff64a9992 100644 --- a/yarn-project/aztec.js/src/deployment/deploy_instance.ts +++ b/yarn-project/aztec.js/src/deployment/deploy_instance.ts @@ -1,7 +1,7 @@ -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { Wallet } from '../wallet/index.js'; +import { type ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; +import { type Wallet } from '../wallet/index.js'; import { getDeployerContract } from './protocol_contracts.js'; /** diff --git a/yarn-project/aztec.js/src/deployment/protocol_contracts.ts b/yarn-project/aztec.js/src/deployment/protocol_contracts.ts index c7d59c59d63..9fc681f8a55 100644 --- a/yarn-project/aztec.js/src/deployment/protocol_contracts.ts +++ b/yarn-project/aztec.js/src/deployment/protocol_contracts.ts @@ -2,7 +2,7 @@ import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-reg import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer'; import { UnsafeContract } from '../contract/unsafe_contract.js'; -import { Wallet } from '../wallet/index.js'; +import { type Wallet } from '../wallet/index.js'; /** Returns a Contract wrapper for the class registerer. */ export function getRegistererContract(wallet: Wallet) { diff --git a/yarn-project/aztec.js/src/deployment/register_class.ts b/yarn-project/aztec.js/src/deployment/register_class.ts index 8d5efd0107f..8ba9c99f55a 100644 --- a/yarn-project/aztec.js/src/deployment/register_class.ts +++ b/yarn-project/aztec.js/src/deployment/register_class.ts @@ -1,8 +1,8 @@ import { MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS, getContractClassFromArtifact } from '@aztec/circuits.js'; -import { ContractArtifact, bufferAsFields } from '@aztec/foundation/abi'; +import { type ContractArtifact, bufferAsFields } from '@aztec/foundation/abi'; -import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { Wallet } from '../wallet/index.js'; +import { type ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; +import { type Wallet } from '../wallet/index.js'; import { getRegistererContract } from './protocol_contracts.js'; /** Sets up a call to register a contract class given its artifact. */ diff --git a/yarn-project/aztec.js/src/entrypoint/default_entrypoint.ts b/yarn-project/aztec.js/src/entrypoint/default_entrypoint.ts index 7315d4f6aa0..a88cfef9e7a 100644 --- a/yarn-project/aztec.js/src/entrypoint/default_entrypoint.ts +++ b/yarn-project/aztec.js/src/entrypoint/default_entrypoint.ts @@ -1,7 +1,7 @@ -import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; +import { type FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; import { TxContext } from '@aztec/circuits.js'; -import { EntrypointInterface } from './entrypoint.js'; +import { type EntrypointInterface } from './entrypoint.js'; /** * Default implementation of the entrypoint interface. It calls a function on a contract directly diff --git a/yarn-project/aztec.js/src/entrypoint/entrypoint.ts b/yarn-project/aztec.js/src/entrypoint/entrypoint.ts index d32e9b768af..ece23e67924 100644 --- a/yarn-project/aztec.js/src/entrypoint/entrypoint.ts +++ b/yarn-project/aztec.js/src/entrypoint/entrypoint.ts @@ -1,7 +1,7 @@ -import { FunctionCall, TxExecutionRequest } from '@aztec/circuit-types'; -import { Fr } from '@aztec/foundation/fields'; +import { type FunctionCall, type TxExecutionRequest } from '@aztec/circuit-types'; +import { type Fr } from '@aztec/foundation/fields'; -import { FeePaymentMethod } from '../fee/fee_payment_method.js'; +import { type FeePaymentMethod } from '../fee/fee_payment_method.js'; /** * Fee payment options for a transaction. diff --git a/yarn-project/aztec.js/src/fee/fee_payment_method.ts b/yarn-project/aztec.js/src/fee/fee_payment_method.ts index 034ce3ad312..cc67345b2c0 100644 --- a/yarn-project/aztec.js/src/fee/fee_payment_method.ts +++ b/yarn-project/aztec.js/src/fee/fee_payment_method.ts @@ -1,6 +1,6 @@ -import { FunctionCall } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr } from '@aztec/foundation/fields'; +import { type FunctionCall } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/foundation/fields'; /** * Holds information about how the fee for a transaction is to be paid. diff --git a/yarn-project/aztec.js/src/fee/native_fee_payment_method.ts b/yarn-project/aztec.js/src/fee/native_fee_payment_method.ts index 21aba74b258..f1b77c2037c 100644 --- a/yarn-project/aztec.js/src/fee/native_fee_payment_method.ts +++ b/yarn-project/aztec.js/src/fee/native_fee_payment_method.ts @@ -1,11 +1,11 @@ -import { FunctionCall } from '@aztec/circuit-types'; -import { AztecAddress, FunctionData } from '@aztec/circuits.js'; +import { type FunctionCall } from '@aztec/circuit-types'; +import { type AztecAddress, FunctionData } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token'; -import { Wallet } from '../account/wallet.js'; -import { FeePaymentMethod } from './fee_payment_method.js'; +import { type Wallet } from '../account/wallet.js'; +import { type FeePaymentMethod } from './fee_payment_method.js'; /** * Pay fee directly in the native gas token. diff --git a/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts b/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts index bc4c998ce7d..ce4e3ae1242 100644 --- a/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts +++ b/yarn-project/aztec.js/src/fee/private_fee_payment_method.ts @@ -1,13 +1,13 @@ -import { FunctionCall } from '@aztec/circuit-types'; +import { type FunctionCall } from '@aztec/circuit-types'; import { FunctionData } from '@aztec/circuits.js'; import { computeMessageSecretHash } from '@aztec/circuits.js/hash'; import { FunctionSelector } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -import { Wallet } from '../account/wallet.js'; +import { type Wallet } from '../account/wallet.js'; import { computeAuthWitMessageHash } from '../utils/authwit.js'; -import { FeePaymentMethod } from './fee_payment_method.js'; +import { type FeePaymentMethod } from './fee_payment_method.js'; /** * Holds information about how the fee for a transaction is to be paid. diff --git a/yarn-project/aztec.js/src/fee/public_fee_payment_method.ts b/yarn-project/aztec.js/src/fee/public_fee_payment_method.ts index ed44beb91eb..9dbd4b416d6 100644 --- a/yarn-project/aztec.js/src/fee/public_fee_payment_method.ts +++ b/yarn-project/aztec.js/src/fee/public_fee_payment_method.ts @@ -1,12 +1,12 @@ -import { FunctionCall } from '@aztec/circuit-types'; +import { type FunctionCall } from '@aztec/circuit-types'; import { FunctionData } from '@aztec/circuits.js'; import { FunctionSelector } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { computeAuthWitMessageHash } from '../utils/authwit.js'; -import { AccountWallet } from '../wallet/account_wallet.js'; -import { FeePaymentMethod } from './fee_payment_method.js'; +import { type AccountWallet } from '../wallet/account_wallet.js'; +import { type FeePaymentMethod } from './fee_payment_method.js'; /** * Holds information about how the fee for a transaction is to be paid. diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index e7cc7c0ba20..646c5488bf9 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -25,8 +25,6 @@ export { Contract, ContractBase, ContractMethod, - ContractStorageLayout, - ContractNotes, SentTx, BatchCall, DeployMethod, diff --git a/yarn-project/aztec.js/src/utils/abi_types.ts b/yarn-project/aztec.js/src/utils/abi_types.ts index 7be0b3896ba..71b88b89848 100644 --- a/yarn-project/aztec.js/src/utils/abi_types.ts +++ b/yarn-project/aztec.js/src/utils/abi_types.ts @@ -1,4 +1,4 @@ -import { AztecAddress, EthAddress, Fr, FunctionSelector } from '@aztec/circuits.js'; +import { type AztecAddress, type EthAddress, type Fr, type FunctionSelector } from '@aztec/circuits.js'; /** Any type that can be converted into a field for a contract call. */ export type FieldLike = Fr | Buffer | bigint | number | { /** Converts to field */ toField: () => Fr }; diff --git a/yarn-project/aztec.js/src/utils/account.ts b/yarn-project/aztec.js/src/utils/account.ts index 35c437cc5ac..c128d8e227e 100644 --- a/yarn-project/aztec.js/src/utils/account.ts +++ b/yarn-project/aztec.js/src/utils/account.ts @@ -1,7 +1,7 @@ -import { CompleteAddress, PXE } from '@aztec/circuit-types'; +import { type CompleteAddress, type PXE } from '@aztec/circuit-types'; import { retryUntil } from '@aztec/foundation/retry'; -import { DefaultWaitOpts, WaitOpts } from '../contract/index.js'; +import { DefaultWaitOpts, type WaitOpts } from '../contract/index.js'; /** * Waits for the account to finish synchronizing with the PXE Service. diff --git a/yarn-project/aztec.js/src/utils/authwit.ts b/yarn-project/aztec.js/src/utils/authwit.ts index 0979524b9dd..562c73ca593 100644 --- a/yarn-project/aztec.js/src/utils/authwit.ts +++ b/yarn-project/aztec.js/src/utils/authwit.ts @@ -1,5 +1,5 @@ -import { FunctionCall, PackedArguments } from '@aztec/circuit-types'; -import { AztecAddress, Fr, GeneratorIndex } from '@aztec/circuits.js'; +import { type FunctionCall, PackedArguments } from '@aztec/circuit-types'; +import { type AztecAddress, type Fr, GeneratorIndex } from '@aztec/circuits.js'; import { pedersenHash } from '@aztec/foundation/crypto'; // docs:start:authwit_computeAuthWitMessageHash diff --git a/yarn-project/aztec.js/src/utils/cheat_codes.ts b/yarn-project/aztec.js/src/utils/cheat_codes.ts index 49f91a3247a..b3a64e92ec8 100644 --- a/yarn-project/aztec.js/src/utils/cheat_codes.ts +++ b/yarn-project/aztec.js/src/utils/cheat_codes.ts @@ -1,5 +1,5 @@ -import { Note, PXE } from '@aztec/circuit-types'; -import { AztecAddress, EthAddress, Fr } from '@aztec/circuits.js'; +import { type Note, type PXE } from '@aztec/circuit-types'; +import { type AztecAddress, type EthAddress, Fr } from '@aztec/circuits.js'; import { toBigIntBE, toHex } from '@aztec/foundation/bigint-buffer'; import { keccak, pedersenHash } from '@aztec/foundation/crypto'; import { createDebugLogger } from '@aztec/foundation/log'; diff --git a/yarn-project/aztec.js/src/utils/l1_contracts.ts b/yarn-project/aztec.js/src/utils/l1_contracts.ts index d0230c8f329..88b9a875234 100644 --- a/yarn-project/aztec.js/src/utils/l1_contracts.ts +++ b/yarn-project/aztec.js/src/utils/l1_contracts.ts @@ -1,4 +1,4 @@ -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; import { retryUntil } from '@aztec/foundation/retry'; import { createPXEClient } from '../rpc_clients/index.js'; diff --git a/yarn-project/aztec.js/src/utils/pub_key.ts b/yarn-project/aztec.js/src/utils/pub_key.ts index 5e04f00a1e2..85009e302d3 100644 --- a/yarn-project/aztec.js/src/utils/pub_key.ts +++ b/yarn-project/aztec.js/src/utils/pub_key.ts @@ -1,4 +1,4 @@ -import { GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; +import { type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; /** diff --git a/yarn-project/aztec.js/src/utils/pxe.ts b/yarn-project/aztec.js/src/utils/pxe.ts index cd2b257d1a4..9b1a9222409 100644 --- a/yarn-project/aztec.js/src/utils/pxe.ts +++ b/yarn-project/aztec.js/src/utils/pxe.ts @@ -1,5 +1,5 @@ -import { PXE } from '@aztec/circuit-types'; -import { DebugLogger } from '@aztec/foundation/log'; +import { type PXE } from '@aztec/circuit-types'; +import { type DebugLogger } from '@aztec/foundation/log'; import { retryUntil } from '@aztec/foundation/retry'; export const waitForPXE = async (pxe: PXE, logger?: DebugLogger) => { diff --git a/yarn-project/aztec.js/src/wallet/account_wallet.ts b/yarn-project/aztec.js/src/wallet/account_wallet.ts index f23e8a4b42e..b75c81fca70 100644 --- a/yarn-project/aztec.js/src/wallet/account_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/account_wallet.ts @@ -1,10 +1,10 @@ -import { AuthWitness, FunctionCall, PXE, TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, Fr } from '@aztec/circuits.js'; -import { ABIParameterVisibility, FunctionAbi, FunctionType } from '@aztec/foundation/abi'; +import { type AuthWitness, type FunctionCall, type PXE, type TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecAddress, Fr } from '@aztec/circuits.js'; +import { type ABIParameterVisibility, type FunctionAbi, FunctionType } from '@aztec/foundation/abi'; -import { AccountInterface } from '../account/interface.js'; +import { type AccountInterface } from '../account/interface.js'; import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { FeeOptions } from '../entrypoint/entrypoint.js'; +import { type FeeOptions } from '../entrypoint/entrypoint.js'; import { computeAuthWitMessageHash } from '../utils/authwit.js'; import { BaseWallet } from './base_wallet.js'; diff --git a/yarn-project/aztec.js/src/wallet/account_wallet_with_private_key.ts b/yarn-project/aztec.js/src/wallet/account_wallet_with_private_key.ts index 645db1cf5db..d21bddf3e85 100644 --- a/yarn-project/aztec.js/src/wallet/account_wallet_with_private_key.ts +++ b/yarn-project/aztec.js/src/wallet/account_wallet_with_private_key.ts @@ -1,8 +1,8 @@ -import { PXE } from '@aztec/circuit-types'; -import { GrumpkinPrivateKey } from '@aztec/circuits.js'; +import { type PXE } from '@aztec/circuit-types'; +import { type GrumpkinPrivateKey } from '@aztec/circuits.js'; -import { Salt } from '../account/index.js'; -import { AccountInterface } from '../account/interface.js'; +import { type Salt } from '../account/index.js'; +import { type AccountInterface } from '../account/interface.js'; import { AccountWallet } from './account_wallet.js'; /** diff --git a/yarn-project/aztec.js/src/wallet/base_wallet.ts b/yarn-project/aztec.js/src/wallet/base_wallet.ts index 41bae750e5d..e5d5775eaa9 100644 --- a/yarn-project/aztec.js/src/wallet/base_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/base_wallet.ts @@ -15,14 +15,20 @@ import { type TxHash, type TxReceipt, } from '@aztec/circuit-types'; -import { AztecAddress, CompleteAddress, Fr, GrumpkinPrivateKey, PartialAddress } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { ContractClassWithId, ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { + type AztecAddress, + type CompleteAddress, + type Fr, + type GrumpkinPrivateKey, + type PartialAddress, +} from '@aztec/circuits.js'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractClassWithId, type ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type NodeInfo } from '@aztec/types/interfaces'; -import { Wallet } from '../account/wallet.js'; -import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; -import { FeeOptions } from '../entrypoint/entrypoint.js'; +import { type Wallet } from '../account/wallet.js'; +import { type ContractFunctionInteraction } from '../contract/contract_function_interaction.js'; +import { type FeeOptions } from '../entrypoint/entrypoint.js'; /** * A base class for Wallet implementations diff --git a/yarn-project/aztec.js/src/wallet/create_recipient.ts b/yarn-project/aztec.js/src/wallet/create_recipient.ts index 94e7917aece..765f0fcc74e 100644 --- a/yarn-project/aztec.js/src/wallet/create_recipient.ts +++ b/yarn-project/aztec.js/src/wallet/create_recipient.ts @@ -1,4 +1,4 @@ -import { PXE } from '@aztec/circuit-types'; +import { type PXE } from '@aztec/circuit-types'; import { CompleteAddress } from '@aztec/circuits.js'; /** diff --git a/yarn-project/aztec.js/src/wallet/index.ts b/yarn-project/aztec.js/src/wallet/index.ts index 18fcfe3514c..08e8cb27c41 100644 --- a/yarn-project/aztec.js/src/wallet/index.ts +++ b/yarn-project/aztec.js/src/wallet/index.ts @@ -1,7 +1,7 @@ -import { PXE } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type PXE } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; -import { AccountContract } from '../account/contract.js'; +import { type AccountContract } from '../account/contract.js'; import { AccountWallet } from './account_wallet.js'; export * from '../account/wallet.js'; diff --git a/yarn-project/aztec.js/src/wallet/signerless_wallet.ts b/yarn-project/aztec.js/src/wallet/signerless_wallet.ts index 816b5a9e5ba..63ef84ae128 100644 --- a/yarn-project/aztec.js/src/wallet/signerless_wallet.ts +++ b/yarn-project/aztec.js/src/wallet/signerless_wallet.ts @@ -1,8 +1,8 @@ -import { AuthWitness, FunctionCall, PXE, TxExecutionRequest } from '@aztec/circuit-types'; -import { CompleteAddress, Fr } from '@aztec/circuits.js'; +import { type AuthWitness, type FunctionCall, type PXE, type TxExecutionRequest } from '@aztec/circuit-types'; +import { type CompleteAddress, type Fr } from '@aztec/circuits.js'; import { DefaultEntrypoint } from '../entrypoint/default_entrypoint.js'; -import { EntrypointInterface } from '../entrypoint/entrypoint.js'; +import { type EntrypointInterface } from '../entrypoint/entrypoint.js'; import { BaseWallet } from './base_wallet.js'; /** diff --git a/yarn-project/aztec/src/cli/cli.ts b/yarn-project/aztec/src/cli/cli.ts index a373f6e97ba..09ba1a37fb2 100644 --- a/yarn-project/aztec/src/cli/cli.ts +++ b/yarn-project/aztec/src/cli/cli.ts @@ -1,6 +1,6 @@ import { fileURLToPath } from '@aztec/aztec.js'; -import { ServerList, createNamespacedJsonRpcServer, createStatusRouter } from '@aztec/foundation/json-rpc/server'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type ServerList, createNamespacedJsonRpcServer, createStatusRouter } from '@aztec/foundation/json-rpc/server'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { Command } from 'commander'; import { readFileSync } from 'fs'; diff --git a/yarn-project/aztec/src/cli/cmds/start_archiver.ts b/yarn-project/aztec/src/cli/cmds/start_archiver.ts index 96cee4c34ee..567f2b160b0 100644 --- a/yarn-project/aztec/src/cli/cmds/start_archiver.ts +++ b/yarn-project/aztec/src/cli/cmds/start_archiver.ts @@ -1,12 +1,12 @@ import { Archiver, - ArchiverConfig, + type ArchiverConfig, KVArchiverDataStore, createArchiverRpcServer, getConfigEnvVars as getArchiverConfigEnvVars, } from '@aztec/archiver'; import { createDebugLogger } from '@aztec/aztec.js'; -import { ServerList } from '@aztec/foundation/json-rpc/server'; +import { type ServerList } from '@aztec/foundation/json-rpc/server'; import { AztecLmdbStore } from '@aztec/kv-store/lmdb'; import { initStoreForRollup } from '@aztec/kv-store/utils'; diff --git a/yarn-project/aztec/src/cli/cmds/start_node.ts b/yarn-project/aztec/src/cli/cmds/start_node.ts index f498b42fdef..d9a28ced7a2 100644 --- a/yarn-project/aztec/src/cli/cmds/start_node.ts +++ b/yarn-project/aztec/src/cli/cmds/start_node.ts @@ -1,8 +1,12 @@ -import { AztecNodeConfig, createAztecNodeRpcServer, getConfigEnvVars as getNodeConfigEnvVars } from '@aztec/aztec-node'; +import { + type AztecNodeConfig, + createAztecNodeRpcServer, + getConfigEnvVars as getNodeConfigEnvVars, +} from '@aztec/aztec-node'; import { NULL_KEY } from '@aztec/ethereum'; -import { ServerList } from '@aztec/foundation/json-rpc/server'; -import { LogFn } from '@aztec/foundation/log'; -import { PXEServiceConfig, createPXERpcServer, getPXEServiceConfig } from '@aztec/pxe'; +import { type ServerList } from '@aztec/foundation/json-rpc/server'; +import { type LogFn } from '@aztec/foundation/log'; +import { type PXEServiceConfig, createPXERpcServer, getPXEServiceConfig } from '@aztec/pxe'; import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts'; diff --git a/yarn-project/aztec/src/cli/cmds/start_p2p_bootstrap.ts b/yarn-project/aztec/src/cli/cmds/start_p2p_bootstrap.ts index 2fedcfd5645..e3f70aacebb 100644 --- a/yarn-project/aztec/src/cli/cmds/start_p2p_bootstrap.ts +++ b/yarn-project/aztec/src/cli/cmds/start_p2p_bootstrap.ts @@ -1,6 +1,6 @@ -import { DebugLogger } from '@aztec/aztec.js'; -import { LogFn } from '@aztec/foundation/log'; -import { BootstrapNode, P2PConfig, getP2PConfigEnvVars } from '@aztec/p2p'; +import { type DebugLogger } from '@aztec/aztec.js'; +import { type LogFn } from '@aztec/foundation/log'; +import { BootstrapNode, type P2PConfig, getP2PConfigEnvVars } from '@aztec/p2p'; import { mergeEnvVarsAndCliOptions, parseModuleOptions } from '../util.js'; diff --git a/yarn-project/aztec/src/cli/cmds/start_pxe.ts b/yarn-project/aztec/src/cli/cmds/start_pxe.ts index b97cc431cc8..95f4027097b 100644 --- a/yarn-project/aztec/src/cli/cmds/start_pxe.ts +++ b/yarn-project/aztec/src/cli/cmds/start_pxe.ts @@ -1,7 +1,7 @@ import { createAztecNodeClient } from '@aztec/circuit-types'; -import { ServerList } from '@aztec/foundation/json-rpc/server'; -import { LogFn } from '@aztec/foundation/log'; -import { PXEServiceConfig, createPXERpcServer, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; +import { type ServerList } from '@aztec/foundation/json-rpc/server'; +import { type LogFn } from '@aztec/foundation/log'; +import { type PXEServiceConfig, createPXERpcServer, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; import { mergeEnvVarsAndCliOptions, parseModuleOptions } from '../util.js'; diff --git a/yarn-project/aztec/src/cli/util.ts b/yarn-project/aztec/src/cli/util.ts index 3a7a3f499cd..21e79359da2 100644 --- a/yarn-project/aztec/src/cli/util.ts +++ b/yarn-project/aztec/src/cli/util.ts @@ -1,11 +1,11 @@ -import { ArchiverConfig } from '@aztec/archiver'; -import { AztecNodeConfig } from '@aztec/aztec-node'; -import { AccountManager } from '@aztec/aztec.js'; -import { L1ContractAddresses, l1ContractsNames } from '@aztec/ethereum'; +import { type ArchiverConfig } from '@aztec/archiver'; +import { type AztecNodeConfig } from '@aztec/aztec-node'; +import { type AccountManager } from '@aztec/aztec.js'; +import { type L1ContractAddresses, l1ContractsNames } from '@aztec/ethereum'; import { EthAddress } from '@aztec/foundation/eth-address'; -import { LogFn, createConsoleLogger } from '@aztec/foundation/log'; -import { P2PConfig } from '@aztec/p2p'; -import { GrumpkinScalar, PXEService, PXEServiceConfig } from '@aztec/pxe'; +import { type LogFn, createConsoleLogger } from '@aztec/foundation/log'; +import { type P2PConfig } from '@aztec/p2p'; +import { type GrumpkinScalar, type PXEService, type PXEServiceConfig } from '@aztec/pxe'; /** * Checks if the object has l1Contracts property diff --git a/yarn-project/aztec/src/examples/token.ts b/yarn-project/aztec/src/examples/token.ts index 577acc98dc8..3dfcba2666f 100644 --- a/yarn-project/aztec/src/examples/token.ts +++ b/yarn-project/aztec/src/examples/token.ts @@ -1,5 +1,12 @@ import { getSingleKeyAccount } from '@aztec/accounts/single_key'; -import { AccountWallet, Fr, GrumpkinScalar, Note, computeMessageSecretHash, createPXEClient } from '@aztec/aztec.js'; +import { + type AccountWallet, + Fr, + GrumpkinScalar, + Note, + computeMessageSecretHash, + createPXEClient, +} from '@aztec/aztec.js'; import { ExtendedNote } from '@aztec/circuit-types'; import { createDebugLogger } from '@aztec/foundation/log'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; diff --git a/yarn-project/aztec/src/examples/util.ts b/yarn-project/aztec/src/examples/util.ts index a008e15dbd0..0d38e5beeef 100644 --- a/yarn-project/aztec/src/examples/util.ts +++ b/yarn-project/aztec/src/examples/util.ts @@ -1,7 +1,7 @@ import { EthAddress } from '@aztec/aztec.js'; import type { Abi, Narrow } from 'abitype'; -import { Account, Chain, Hex, HttpTransport, PublicClient, WalletClient } from 'viem'; +import { type Account, type Chain, type Hex, type HttpTransport, type PublicClient, type WalletClient } from 'viem'; /** * Helper function to deploy ETH contracts. diff --git a/yarn-project/aztec/src/sandbox.ts b/yarn-project/aztec/src/sandbox.ts index b5ae376daa4..54952cd331a 100644 --- a/yarn-project/aztec/src/sandbox.ts +++ b/yarn-project/aztec/src/sandbox.ts @@ -1,13 +1,13 @@ #!/usr/bin/env -S node --no-warnings -import { AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node'; -import { AztecAddress, BatchCall, SignerlessWallet, Wallet } from '@aztec/aztec.js'; +import { type AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node'; +import { type AztecAddress, BatchCall, SignerlessWallet, type Wallet } from '@aztec/aztec.js'; import { deployInstance, registerContractClass } from '@aztec/aztec.js/deployment'; -import { AztecNode } from '@aztec/circuit-types'; +import { type AztecNode } from '@aztec/circuit-types'; import { DefaultMultiCallEntrypoint } from '@aztec/entrypoints/multi-call'; import { - DeployL1Contracts, - L1ContractAddresses, - L1ContractArtifactsForDeployment, + type DeployL1Contracts, + type L1ContractAddresses, + type L1ContractArtifactsForDeployment, NULL_KEY, createEthereumChain, deployL1Contracts, @@ -31,9 +31,15 @@ import { RollupBytecode, } from '@aztec/l1-artifacts'; import { getCanonicalGasToken } from '@aztec/protocol-contracts/gas-token'; -import { PXEServiceConfig, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; +import { type PXEServiceConfig, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; -import { HDAccount, PrivateKeyAccount, createPublicClient, getContract, http as httpViemTransport } from 'viem'; +import { + type HDAccount, + type PrivateKeyAccount, + createPublicClient, + getContract, + http as httpViemTransport, +} from 'viem'; import { mnemonicToAccount } from 'viem/accounts'; import { foundry } from 'viem/chains'; diff --git a/yarn-project/circuit-types/src/aztec_node/rpc/aztec_node_client.ts b/yarn-project/circuit-types/src/aztec_node/rpc/aztec_node_client.ts index 2e093883d1e..79f9795f9f4 100644 --- a/yarn-project/circuit-types/src/aztec_node/rpc/aztec_node_client.ts +++ b/yarn-project/circuit-types/src/aztec_node/rpc/aztec_node_client.ts @@ -5,7 +5,7 @@ import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { createJsonRpcClient, defaultFetch } from '@aztec/foundation/json-rpc/client'; -import { AztecNode } from '../../interfaces/aztec-node.js'; +import { type AztecNode } from '../../interfaces/aztec-node.js'; import { NullifierMembershipWitness } from '../../interfaces/nullifier_tree.js'; import { L2Block } from '../../l2_block.js'; import { EncryptedL2BlockL2Logs, ExtendedUnencryptedL2Log, LogId, UnencryptedL2BlockL2Logs } from '../../logs/index.js'; diff --git a/yarn-project/circuit-types/src/function_call.ts b/yarn-project/circuit-types/src/function_call.ts index c3d8e831ad4..3f3c45ad268 100644 --- a/yarn-project/circuit-types/src/function_call.ts +++ b/yarn-project/circuit-types/src/function_call.ts @@ -1,4 +1,4 @@ -import { AztecAddress, Fr, FunctionData } from '@aztec/circuits.js'; +import { AztecAddress, type Fr, FunctionData } from '@aztec/circuits.js'; /** A request to call a function on a contract from a given address. */ export type FunctionCall = { diff --git a/yarn-project/circuit-types/src/interfaces/aztec-node.ts b/yarn-project/circuit-types/src/interfaces/aztec-node.ts index 0930cc739da..918630b042e 100644 --- a/yarn-project/circuit-types/src/interfaces/aztec-node.ts +++ b/yarn-project/circuit-types/src/interfaces/aztec-node.ts @@ -1,10 +1,10 @@ import { - ARCHIVE_HEIGHT, - Header, - L1_TO_L2_MSG_TREE_HEIGHT, - NOTE_HASH_TREE_HEIGHT, - NULLIFIER_TREE_HEIGHT, - PUBLIC_DATA_TREE_HEIGHT, + type ARCHIVE_HEIGHT, + type Header, + type L1_TO_L2_MSG_TREE_HEIGHT, + type NOTE_HASH_TREE_HEIGHT, + type NULLIFIER_TREE_HEIGHT, + type PUBLIC_DATA_TREE_HEIGHT, } from '@aztec/circuits.js'; import { type L1ContractAddresses } from '@aztec/ethereum'; import { type ProcessReturnValues } from '@aztec/foundation/abi'; @@ -12,16 +12,22 @@ import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { type Fr } from '@aztec/foundation/fields'; import { type ContractClassPublic, type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { L2Block } from '../l2_block.js'; -import { FromLogType, GetUnencryptedLogsResponse, L2BlockL2Logs, LogFilter, LogType } from '../logs/index.js'; -import { MerkleTreeId } from '../merkle_tree_id.js'; -import { SiblingPath } from '../sibling_path/index.js'; -import { Tx, TxHash, TxReceipt } from '../tx/index.js'; -import { TxEffect } from '../tx_effect.js'; -import { SequencerConfig } from './configs.js'; -import { L2BlockNumber } from './l2_block_number.js'; -import { NullifierMembershipWitness } from './nullifier_tree.js'; -import { PublicDataWitness } from './public_data_tree.js'; +import { type L2Block } from '../l2_block.js'; +import { + type FromLogType, + type GetUnencryptedLogsResponse, + type L2BlockL2Logs, + type LogFilter, + type LogType, +} from '../logs/index.js'; +import { type MerkleTreeId } from '../merkle_tree_id.js'; +import { type SiblingPath } from '../sibling_path/index.js'; +import { type Tx, type TxHash, type TxReceipt } from '../tx/index.js'; +import { type TxEffect } from '../tx_effect.js'; +import { type SequencerConfig } from './configs.js'; +import { type L2BlockNumber } from './l2_block_number.js'; +import { type NullifierMembershipWitness } from './nullifier_tree.js'; +import { type PublicDataWitness } from './public_data_tree.js'; /** * The aztec node. diff --git a/yarn-project/circuit-types/src/interfaces/block-prover.ts b/yarn-project/circuit-types/src/interfaces/block-prover.ts index 9e02a117b22..31560b36a5b 100644 --- a/yarn-project/circuit-types/src/interfaces/block-prover.ts +++ b/yarn-project/circuit-types/src/interfaces/block-prover.ts @@ -1,7 +1,7 @@ -import { Fr, GlobalVariables, Proof } from '@aztec/circuits.js'; +import { type Fr, type GlobalVariables, type Proof } from '@aztec/circuits.js'; -import { L2Block } from '../l2_block.js'; -import { ProcessedTx } from '../tx/processed_tx.js'; +import { type L2Block } from '../l2_block.js'; +import { type ProcessedTx } from '../tx/processed_tx.js'; export enum PROVING_STATUS { SUCCESS, diff --git a/yarn-project/circuit-types/src/interfaces/configs.ts b/yarn-project/circuit-types/src/interfaces/configs.ts index 80198bfca29..ee90be579d2 100644 --- a/yarn-project/circuit-types/src/interfaces/configs.ts +++ b/yarn-project/circuit-types/src/interfaces/configs.ts @@ -1,4 +1,4 @@ -import { AztecAddress, EthAddress, Fr } from '@aztec/circuits.js'; +import { type AztecAddress, type EthAddress, type Fr } from '@aztec/circuits.js'; /** * The sequencer configuration. diff --git a/yarn-project/circuit-types/src/interfaces/nullifier_tree.ts b/yarn-project/circuit-types/src/interfaces/nullifier_tree.ts index a3a1bd1a8d1..5e1dfe80a83 100644 --- a/yarn-project/circuit-types/src/interfaces/nullifier_tree.ts +++ b/yarn-project/circuit-types/src/interfaces/nullifier_tree.ts @@ -1,4 +1,4 @@ -import { Fr, NULLIFIER_TREE_HEIGHT, NullifierLeafPreimage } from '@aztec/circuits.js'; +import { Fr, type NULLIFIER_TREE_HEIGHT, NullifierLeafPreimage } from '@aztec/circuits.js'; import { SiblingPath } from '../sibling_path/index.js'; diff --git a/yarn-project/circuit-types/src/interfaces/prover-client.ts b/yarn-project/circuit-types/src/interfaces/prover-client.ts index ac803d0e94b..5c2ef55b8d5 100644 --- a/yarn-project/circuit-types/src/interfaces/prover-client.ts +++ b/yarn-project/circuit-types/src/interfaces/prover-client.ts @@ -1,4 +1,4 @@ -import { BlockProver } from './block-prover.js'; +import { type BlockProver } from './block-prover.js'; /** * The interface to the prover client. diff --git a/yarn-project/circuit-types/src/interfaces/public_data_tree.ts b/yarn-project/circuit-types/src/interfaces/public_data_tree.ts index 26f65bfba55..1ae620154ee 100644 --- a/yarn-project/circuit-types/src/interfaces/public_data_tree.ts +++ b/yarn-project/circuit-types/src/interfaces/public_data_tree.ts @@ -1,6 +1,6 @@ -import { Fr, PUBLIC_DATA_TREE_HEIGHT, PublicDataTreeLeafPreimage } from '@aztec/circuits.js'; +import { Fr, type PUBLIC_DATA_TREE_HEIGHT, type PublicDataTreeLeafPreimage } from '@aztec/circuits.js'; -import { SiblingPath } from '../sibling_path/index.js'; +import { type SiblingPath } from '../sibling_path/index.js'; /** * Public data witness. diff --git a/yarn-project/circuit-types/src/interfaces/pxe.ts b/yarn-project/circuit-types/src/interfaces/pxe.ts index 6585052c919..ab72749fe78 100644 --- a/yarn-project/circuit-types/src/interfaces/pxe.ts +++ b/yarn-project/circuit-types/src/interfaces/pxe.ts @@ -1,7 +1,13 @@ -import { AztecAddress, CompleteAddress, Fr, GrumpkinPrivateKey, PartialAddress } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { ContractClassWithId, ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { + type AztecAddress, + type CompleteAddress, + type Fr, + type GrumpkinPrivateKey, + type PartialAddress, +} from '@aztec/circuits.js'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractClassWithId, type ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type NodeInfo } from '@aztec/types/interfaces'; import { type AuthWitness } from '../auth_witness.js'; import { type L2Block } from '../l2_block.js'; diff --git a/yarn-project/circuit-types/src/keys/key_pair.ts b/yarn-project/circuit-types/src/keys/key_pair.ts index 43809c2ad7a..2f4c0c1e3d3 100644 --- a/yarn-project/circuit-types/src/keys/key_pair.ts +++ b/yarn-project/circuit-types/src/keys/key_pair.ts @@ -1,4 +1,4 @@ -import { GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; +import { type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; /** * Represents a cryptographic public-private key pair. diff --git a/yarn-project/circuit-types/src/keys/key_store.ts b/yarn-project/circuit-types/src/keys/key_store.ts index f70648a0c4c..4869503def4 100644 --- a/yarn-project/circuit-types/src/keys/key_store.ts +++ b/yarn-project/circuit-types/src/keys/key_store.ts @@ -1,4 +1,4 @@ -import { AztecAddress, GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; +import { type AztecAddress, type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; /** * Represents a secure storage for managing keys. diff --git a/yarn-project/circuit-types/src/l2_block_context.ts b/yarn-project/circuit-types/src/l2_block_context.ts index 9e9f7040852..c5d16b03171 100644 --- a/yarn-project/circuit-types/src/l2_block_context.ts +++ b/yarn-project/circuit-types/src/l2_block_context.ts @@ -1,5 +1,5 @@ -import { L2Block } from './l2_block.js'; -import { TxHash } from './tx/tx_hash.js'; +import { type L2Block } from './l2_block.js'; +import { type TxHash } from './tx/tx_hash.js'; /** * A wrapper around L2 block used to cache results of expensive operations. diff --git a/yarn-project/circuit-types/src/l2_block_downloader/l2_block_downloader.ts b/yarn-project/circuit-types/src/l2_block_downloader/l2_block_downloader.ts index fb322129b5e..081d65633c8 100644 --- a/yarn-project/circuit-types/src/l2_block_downloader/l2_block_downloader.ts +++ b/yarn-project/circuit-types/src/l2_block_downloader/l2_block_downloader.ts @@ -3,8 +3,8 @@ import { MemoryFifo, Semaphore, SerialQueue } from '@aztec/foundation/fifo'; import { createDebugLogger } from '@aztec/foundation/log'; import { InterruptibleSleep } from '@aztec/foundation/sleep'; -import { L2Block } from '../l2_block.js'; -import { L2BlockSource } from '../l2_block_source.js'; +import { type L2Block } from '../l2_block.js'; +import { type L2BlockSource } from '../l2_block_source.js'; const log = createDebugLogger('aztec:l2_block_downloader'); diff --git a/yarn-project/circuit-types/src/l2_block_source.ts b/yarn-project/circuit-types/src/l2_block_source.ts index f60e545d3e4..78b6078f0fa 100644 --- a/yarn-project/circuit-types/src/l2_block_source.ts +++ b/yarn-project/circuit-types/src/l2_block_source.ts @@ -1,9 +1,9 @@ -import { EthAddress } from '@aztec/circuits.js'; +import { type EthAddress } from '@aztec/circuits.js'; -import { L2Block } from './l2_block.js'; -import { TxHash } from './tx/tx_hash.js'; -import { TxReceipt } from './tx/tx_receipt.js'; -import { TxEffect } from './tx_effect.js'; +import { type L2Block } from './l2_block.js'; +import { type TxHash } from './tx/tx_hash.js'; +import { type TxReceipt } from './tx/tx_receipt.js'; +import { type TxEffect } from './tx_effect.js'; /** * Interface of classes allowing for the retrieval of L2 blocks. diff --git a/yarn-project/circuit-types/src/logs/get_unencrypted_logs_response.ts b/yarn-project/circuit-types/src/logs/get_unencrypted_logs_response.ts index d50c7280a9b..b8c18fa278d 100644 --- a/yarn-project/circuit-types/src/logs/get_unencrypted_logs_response.ts +++ b/yarn-project/circuit-types/src/logs/get_unencrypted_logs_response.ts @@ -1,4 +1,4 @@ -import { ExtendedUnencryptedL2Log } from './extended_unencrypted_l2_log.js'; +import { type ExtendedUnencryptedL2Log } from './extended_unencrypted_l2_log.js'; /** * It provides documentation for the GetUnencryptedLogsResponse type. diff --git a/yarn-project/circuit-types/src/logs/l1_note_payload/browserify-cipher.d.ts b/yarn-project/circuit-types/src/logs/l1_note_payload/browserify-cipher.d.ts index 40a65868749..5d393110202 100644 --- a/yarn-project/circuit-types/src/logs/l1_note_payload/browserify-cipher.d.ts +++ b/yarn-project/circuit-types/src/logs/l1_note_payload/browserify-cipher.d.ts @@ -1,5 +1,5 @@ declare module 'browserify-cipher' { - import { Cipher } from 'crypto'; + import { type Cipher } from 'crypto'; /** * Type representing supported cipher algorithms for encryption and decryption. diff --git a/yarn-project/circuit-types/src/logs/l1_note_payload/encrypt_buffer.ts b/yarn-project/circuit-types/src/logs/l1_note_payload/encrypt_buffer.ts index 8883ff8941e..314ef0d6c28 100644 --- a/yarn-project/circuit-types/src/logs/l1_note_payload/encrypt_buffer.ts +++ b/yarn-project/circuit-types/src/logs/l1_note_payload/encrypt_buffer.ts @@ -1,5 +1,5 @@ -import { GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; import { sha256 } from '@aztec/foundation/crypto'; import { Point } from '@aztec/foundation/fields'; import { numToUInt8 } from '@aztec/foundation/serialize'; diff --git a/yarn-project/circuit-types/src/logs/l1_note_payload/l1_note_payload.ts b/yarn-project/circuit-types/src/logs/l1_note_payload/l1_note_payload.ts index 1dd11c02cee..8b34dd37b8f 100644 --- a/yarn-project/circuit-types/src/logs/l1_note_payload/l1_note_payload.ts +++ b/yarn-project/circuit-types/src/logs/l1_note_payload/l1_note_payload.ts @@ -1,5 +1,5 @@ -import { AztecAddress, GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { AztecAddress, type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; import { Fr, GrumpkinScalar } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; diff --git a/yarn-project/circuit-types/src/logs/l1_note_payload/tagged_note.ts b/yarn-project/circuit-types/src/logs/l1_note_payload/tagged_note.ts index f1ada6ec614..ddc362e4628 100644 --- a/yarn-project/circuit-types/src/logs/l1_note_payload/tagged_note.ts +++ b/yarn-project/circuit-types/src/logs/l1_note_payload/tagged_note.ts @@ -1,5 +1,5 @@ -import { GrumpkinPrivateKey, PublicKey } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { type GrumpkinPrivateKey, type PublicKey } from '@aztec/circuits.js'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; diff --git a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts b/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts index 9aa780fda8b..28a71d5a5fc 100644 --- a/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts +++ b/yarn-project/circuit-types/src/logs/l2_block_l2_logs.ts @@ -2,9 +2,9 @@ import { BufferReader, prefixBufferWithLength } from '@aztec/foundation/serializ import isEqual from 'lodash.isequal'; -import { EncryptedL2Log } from './encrypted_l2_log.js'; -import { EncryptedTxL2Logs, TxL2Logs, UnencryptedTxL2Logs } from './tx_l2_logs.js'; -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; +import { type EncryptedL2Log } from './encrypted_l2_log.js'; +import { EncryptedTxL2Logs, type TxL2Logs, UnencryptedTxL2Logs } from './tx_l2_logs.js'; +import { type UnencryptedL2Log } from './unencrypted_l2_log.js'; /** * Data container of logs emitted in all txs in a given L2 block. diff --git a/yarn-project/circuit-types/src/logs/l2_logs_source.ts b/yarn-project/circuit-types/src/logs/l2_logs_source.ts index d6d9ac4d1d9..1d5745484d6 100644 --- a/yarn-project/circuit-types/src/logs/l2_logs_source.ts +++ b/yarn-project/circuit-types/src/logs/l2_logs_source.ts @@ -1,7 +1,7 @@ -import { GetUnencryptedLogsResponse } from './get_unencrypted_logs_response.js'; -import { L2BlockL2Logs } from './l2_block_l2_logs.js'; -import { LogFilter } from './log_filter.js'; -import { FromLogType, LogType } from './log_type.js'; +import { type GetUnencryptedLogsResponse } from './get_unencrypted_logs_response.js'; +import { type L2BlockL2Logs } from './l2_block_l2_logs.js'; +import { type LogFilter } from './log_filter.js'; +import { type FromLogType, type LogType } from './log_type.js'; /** * Interface of classes allowing for the retrieval of logs. diff --git a/yarn-project/circuit-types/src/logs/log_filter.ts b/yarn-project/circuit-types/src/logs/log_filter.ts index 0b472bb9939..deb81e98efa 100644 --- a/yarn-project/circuit-types/src/logs/log_filter.ts +++ b/yarn-project/circuit-types/src/logs/log_filter.ts @@ -1,8 +1,8 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { EventSelector } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type EventSelector } from '@aztec/foundation/abi'; -import { TxHash } from '../tx/tx_hash.js'; -import { LogId } from './log_id.js'; +import { type TxHash } from '../tx/tx_hash.js'; +import { type LogId } from './log_id.js'; /** * Log filter used to fetch L2 logs. diff --git a/yarn-project/circuit-types/src/logs/log_type.ts b/yarn-project/circuit-types/src/logs/log_type.ts index 00d2a49240c..1f9c247cc4a 100644 --- a/yarn-project/circuit-types/src/logs/log_type.ts +++ b/yarn-project/circuit-types/src/logs/log_type.ts @@ -1,5 +1,5 @@ -import { EncryptedL2Log } from './encrypted_l2_log.js'; -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; +import { type EncryptedL2Log } from './encrypted_l2_log.js'; +import { type UnencryptedL2Log } from './unencrypted_l2_log.js'; /** * Defines possible log types. diff --git a/yarn-project/circuit-types/src/logs/tx_l2_logs.ts b/yarn-project/circuit-types/src/logs/tx_l2_logs.ts index 774e479cf65..bd6fe976ed0 100644 --- a/yarn-project/circuit-types/src/logs/tx_l2_logs.ts +++ b/yarn-project/circuit-types/src/logs/tx_l2_logs.ts @@ -3,9 +3,9 @@ import { BufferReader, prefixBufferWithLength, truncateAndPad } from '@aztec/fou import isEqual from 'lodash.isequal'; -import { EncryptedL2Log } from './encrypted_l2_log.js'; -import { EncryptedFunctionL2Logs, FunctionL2Logs, UnencryptedFunctionL2Logs } from './function_l2_logs.js'; -import { UnencryptedL2Log } from './unencrypted_l2_log.js'; +import { type EncryptedL2Log } from './encrypted_l2_log.js'; +import { EncryptedFunctionL2Logs, type FunctionL2Logs, UnencryptedFunctionL2Logs } from './function_l2_logs.js'; +import { type UnencryptedL2Log } from './unencrypted_l2_log.js'; /** * Data container of logs emitted in 1 tx. diff --git a/yarn-project/circuit-types/src/messaging/l1_to_l2_message_source.ts b/yarn-project/circuit-types/src/messaging/l1_to_l2_message_source.ts index 090726a671d..1bd0efab89d 100644 --- a/yarn-project/circuit-types/src/messaging/l1_to_l2_message_source.ts +++ b/yarn-project/circuit-types/src/messaging/l1_to_l2_message_source.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * Interface of classes allowing for the retrieval of L1 to L2 messages. diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 2bca46b6f83..60f9e378c2c 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -99,10 +99,7 @@ export const mockSimulatedTx = (seed = 1, hasLogs = true) => { export const randomContractArtifact = (): ContractArtifact => ({ name: randomBytes(4).toString('hex'), functions: [], - outputs: { - structs: {}, - globals: {}, - }, + events: [], fileMap: {}, }); diff --git a/yarn-project/circuit-types/src/notes/note_filter.ts b/yarn-project/circuit-types/src/notes/note_filter.ts index 90570f1f122..7eb6c62c865 100644 --- a/yarn-project/circuit-types/src/notes/note_filter.ts +++ b/yarn-project/circuit-types/src/notes/note_filter.ts @@ -1,6 +1,6 @@ -import { AztecAddress, Fr } from '@aztec/circuits.js'; +import { type AztecAddress, type Fr } from '@aztec/circuits.js'; -import { TxHash } from '../tx/tx_hash.js'; +import { type TxHash } from '../tx/tx_hash.js'; /** * The status of notes to retrieve. diff --git a/yarn-project/circuit-types/src/packed_arguments.ts b/yarn-project/circuit-types/src/packed_arguments.ts index d5589a77ad1..29452c88bfc 100644 --- a/yarn-project/circuit-types/src/packed_arguments.ts +++ b/yarn-project/circuit-types/src/packed_arguments.ts @@ -1,7 +1,7 @@ import { Fr, Vector } from '@aztec/circuits.js'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; /** * Packs a set of arguments into a hash. diff --git a/yarn-project/circuit-types/src/sibling_path/sibling_path.ts b/yarn-project/circuit-types/src/sibling_path/sibling_path.ts index fcfe0eb4d33..086c57baf80 100644 --- a/yarn-project/circuit-types/src/sibling_path/sibling_path.ts +++ b/yarn-project/circuit-types/src/sibling_path/sibling_path.ts @@ -1,12 +1,12 @@ import { makeTuple } from '@aztec/foundation/array'; import { Fr } from '@aztec/foundation/fields'; import { - Tuple, + type Tuple, assertLength, deserializeArrayFromVector, serializeArrayOfBufferableToVector, } from '@aztec/foundation/serialize'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; /** * Contains functionality to compute and serialize/deserialize a sibling path. diff --git a/yarn-project/circuit-types/src/simulation_error.ts b/yarn-project/circuit-types/src/simulation_error.ts index 47188b7b05a..69e1b98166f 100644 --- a/yarn-project/circuit-types/src/simulation_error.ts +++ b/yarn-project/circuit-types/src/simulation_error.ts @@ -1,5 +1,5 @@ -import { AztecAddress, FunctionSelector } from '@aztec/circuits.js'; -import { OpcodeLocation } from '@aztec/foundation/abi'; +import { type AztecAddress, type FunctionSelector } from '@aztec/circuits.js'; +import { type OpcodeLocation } from '@aztec/foundation/abi'; /** * Address and selector of a function that failed during simulation. diff --git a/yarn-project/circuit-types/src/stats/benchmarks.ts b/yarn-project/circuit-types/src/stats/benchmarks.ts index 284cdadd48f..37c09f40727 100644 --- a/yarn-project/circuit-types/src/stats/benchmarks.ts +++ b/yarn-project/circuit-types/src/stats/benchmarks.ts @@ -1,4 +1,4 @@ -import { MetricName } from './metrics.js'; +import { type MetricName } from './metrics.js'; /** Aggregated benchmark results. */ export type BenchmarkResults = Partial>; diff --git a/yarn-project/circuit-types/src/stats/metrics.ts b/yarn-project/circuit-types/src/stats/metrics.ts index 084fc058435..4ee8ea7e04c 100644 --- a/yarn-project/circuit-types/src/stats/metrics.ts +++ b/yarn-project/circuit-types/src/stats/metrics.ts @@ -1,4 +1,4 @@ -import { StatsEventName } from './stats.js'; +import { type StatsEventName } from './stats.js'; /** How a metric is grouped in benchmarks: by block size, by length of chain processed, or by circuit name. */ export type MetricGroupBy = diff --git a/yarn-project/circuit-types/src/tx/processed_tx.ts b/yarn-project/circuit-types/src/tx/processed_tx.ts index c67cd819bb2..b59642ab3b1 100644 --- a/yarn-project/circuit-types/src/tx/processed_tx.ts +++ b/yarn-project/circuit-types/src/tx/processed_tx.ts @@ -1,8 +1,8 @@ import { EncryptedTxL2Logs, PublicDataWrite, - SimulationError, - Tx, + type SimulationError, + type Tx, TxEffect, TxHash, UnencryptedTxL2Logs, diff --git a/yarn-project/circuit-types/src/tx/tx.ts b/yarn-project/circuit-types/src/tx/tx.ts index 5d6c2023ac6..bfa009872fc 100644 --- a/yarn-project/circuit-types/src/tx/tx.ts +++ b/yarn-project/circuit-types/src/tx/tx.ts @@ -6,10 +6,10 @@ import { } from '@aztec/circuits.js'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { GetUnencryptedLogsResponse } from '../logs/get_unencrypted_logs_response.js'; -import { L2LogsSource } from '../logs/l2_logs_source.js'; +import { type GetUnencryptedLogsResponse } from '../logs/get_unencrypted_logs_response.js'; +import { type L2LogsSource } from '../logs/l2_logs_source.js'; import { EncryptedTxL2Logs, UnencryptedTxL2Logs } from '../logs/tx_l2_logs.js'; -import { TxStats } from '../stats/stats.js'; +import { type TxStats } from '../stats/stats.js'; import { TxHash } from './tx_hash.js'; /** diff --git a/yarn-project/circuit-types/src/tx/tx_receipt.ts b/yarn-project/circuit-types/src/tx/tx_receipt.ts index 997e1b5ef7e..1cf7ef0797c 100644 --- a/yarn-project/circuit-types/src/tx/tx_receipt.ts +++ b/yarn-project/circuit-types/src/tx/tx_receipt.ts @@ -1,7 +1,7 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; -import { ExtendedNote } from '../notes/extended_note.js'; -import { PublicDataWrite } from '../public_data_write.js'; +import { type ExtendedNote } from '../notes/extended_note.js'; +import { type PublicDataWrite } from '../public_data_write.js'; import { TxHash } from './tx_hash.js'; /** diff --git a/yarn-project/circuit-types/src/tx_execution_request.ts b/yarn-project/circuit-types/src/tx_execution_request.ts index 9f68f8fc6eb..479cbf0d764 100644 --- a/yarn-project/circuit-types/src/tx_execution_request.ts +++ b/yarn-project/circuit-types/src/tx_execution_request.ts @@ -1,6 +1,6 @@ import { AztecAddress, Fr, FunctionData, TxContext, TxRequest, Vector } from '@aztec/circuits.js'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { AuthWitness } from './auth_witness.js'; import { PackedArguments } from './packed_arguments.js'; diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/ecdsa/signature.ts b/yarn-project/circuits.js/src/barretenberg/crypto/ecdsa/signature.ts index 255f2292acb..a0d88a67ab5 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/ecdsa/signature.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/ecdsa/signature.ts @@ -3,7 +3,7 @@ import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { mapTuple } from '@aztec/foundation/serialize'; -import { Signature } from '../signature/index.js'; +import { type Signature } from '../signature/index.js'; /** * ECDSA signature used for transactions. diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.test.ts b/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.test.ts index 154ab39075f..da7ec63df6d 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.test.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.test.ts @@ -1,6 +1,6 @@ import { createDebugLogger } from '@aztec/foundation/log'; -import { GrumpkinScalar, Point } from '../../../index.js'; +import { GrumpkinScalar, type Point } from '../../../index.js'; import { Grumpkin } from './index.js'; const debug = createDebugLogger('bb:grumpkin_test'); diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.ts b/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.ts index 3abf74fd20a..b9ea7e72325 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/grumpkin/index.ts @@ -1,5 +1,5 @@ import { BarretenbergSync } from '@aztec/bb.js'; -import { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields'; +import { Fr, type GrumpkinScalar, Point } from '@aztec/foundation/fields'; /** * Grumpkin elliptic curve operations. diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/index.ts b/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/index.ts index e6c7cd56183..c0a3ccd0c3e 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/index.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/index.ts @@ -2,8 +2,8 @@ import { BarretenbergSync } from '@aztec/bb.js'; import { Point } from '@aztec/foundation/fields'; import { numToUInt32BE } from '@aztec/foundation/serialize'; -import { GrumpkinPrivateKey } from '../../../types/grumpkin_private_key.js'; -import { PublicKey } from '../../../types/public_key.js'; +import { type GrumpkinPrivateKey } from '../../../types/grumpkin_private_key.js'; +import { type PublicKey } from '../../../types/public_key.js'; import { SchnorrSignature } from './signature.js'; export * from './signature.js'; diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/signature.ts b/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/signature.ts index 4ed9af1f607..16b200fcd89 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/signature.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/schnorr/signature.ts @@ -2,7 +2,7 @@ import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, mapTuple } from '@aztec/foundation/serialize'; -import { Signature } from '../signature/index.js'; +import { type Signature } from '../signature/index.js'; /** * Schnorr signature used for transactions. diff --git a/yarn-project/circuits.js/src/barretenberg/crypto/signature/index.ts b/yarn-project/circuits.js/src/barretenberg/crypto/signature/index.ts index 1d76139464e..d451121d9c0 100644 --- a/yarn-project/circuits.js/src/barretenberg/crypto/signature/index.ts +++ b/yarn-project/circuits.js/src/barretenberg/crypto/signature/index.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * Interface to represent a signature. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 646e313092c..0e91499c822 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcbn; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index d24a449c845..d279fd47428 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x1bf24d2106579f84afb2c55647aa66d0c37401e82952577ada09044c02220f81"`, + `"0x12ee05255924ea5eed79c7fe41f57a5309e40d6c9861efac8a8986dac6145a63"`, ); }); }); diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index 3fb825af1f6..e590084a51e 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -1,10 +1,10 @@ -import { ContractArtifact, FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { sha256 } from '@aztec/foundation/crypto'; import { Fr, reduceFn } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { numToUInt8 } from '@aztec/foundation/serialize'; -import { MerkleTree } from '../merkle/merkle_tree.js'; +import { type MerkleTree } from '../merkle/merkle_tree.js'; import { MerkleTreeCalculator } from '../merkle/merkle_tree_calculator.js'; const VERSION = 1; @@ -60,7 +60,7 @@ export function computeArtifactHashPreimage(artifact: ContractArtifact) { export function computeArtifactMetadataHash(artifact: ContractArtifact) { // TODO(@spalladino): Should we use the sorted event selectors instead? They'd need to be unique for that. - const metadata = { name: artifact.name, outputs: artifact.outputs }; + const metadata = { name: artifact.name, events: artifact.events }; return sha256Fr(Buffer.from(JSON.stringify(metadata), 'utf-8')); } diff --git a/yarn-project/circuits.js/src/contract/contract_address.test.ts b/yarn-project/circuits.js/src/contract/contract_address.test.ts index 46d6965291e..47a98c80071 100644 --- a/yarn-project/circuits.js/src/contract/contract_address.test.ts +++ b/yarn-project/circuits.js/src/contract/contract_address.test.ts @@ -1,4 +1,4 @@ -import { ABIParameterVisibility, FunctionAbi, FunctionType } from '@aztec/foundation/abi'; +import { ABIParameterVisibility, type FunctionAbi, FunctionType } from '@aztec/foundation/abi'; import { Fr, Point } from '@aztec/foundation/fields'; import { setupCustomSnapshotSerializers, updateInlineTestData } from '@aztec/foundation/testing'; diff --git a/yarn-project/circuits.js/src/contract/contract_address.ts b/yarn-project/circuits.js/src/contract/contract_address.ts index 68802e622cf..96196f01971 100644 --- a/yarn-project/circuits.js/src/contract/contract_address.ts +++ b/yarn-project/circuits.js/src/contract/contract_address.ts @@ -1,12 +1,12 @@ -import { FunctionAbi, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; +import { type FunctionAbi, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { ContractInstance } from '@aztec/types/contracts'; +import { type ContractInstance } from '@aztec/types/contracts'; import { GeneratorIndex } from '../constants.gen.js'; import { computeVarArgsHash } from '../hash/hash.js'; -import { PublicKey } from '../types/public_key.js'; +import { type PublicKey } from '../types/public_key.js'; // TODO(@spalladino): Review all generator indices in this file diff --git a/yarn-project/circuits.js/src/contract/contract_class.ts b/yarn-project/circuits.js/src/contract/contract_class.ts index 8f270051f87..b4834dc8673 100644 --- a/yarn-project/circuits.js/src/contract/contract_class.ts +++ b/yarn-project/circuits.js/src/contract/contract_class.ts @@ -1,9 +1,9 @@ -import { ContractArtifact, FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { ContractClass, ContractClassWithId } from '@aztec/types/contracts'; +import { type ContractClass, type ContractClassWithId } from '@aztec/types/contracts'; import { computeArtifactHash } from './artifact_hash.js'; -import { ContractClassIdPreimage, computeContractClassIdWithPreimage } from './contract_class_id.js'; +import { type ContractClassIdPreimage, computeContractClassIdWithPreimage } from './contract_class_id.js'; import { packBytecode } from './public_bytecode.js'; /** Contract artifact including its artifact hash */ diff --git a/yarn-project/circuits.js/src/contract/contract_class_id.test.ts b/yarn-project/circuits.js/src/contract/contract_class_id.test.ts index 2700c248159..7f40b3029a0 100644 --- a/yarn-project/circuits.js/src/contract/contract_class_id.test.ts +++ b/yarn-project/circuits.js/src/contract/contract_class_id.test.ts @@ -1,5 +1,5 @@ import { Fr } from '@aztec/foundation/fields'; -import { ContractClass } from '@aztec/types/contracts'; +import { type ContractClass } from '@aztec/types/contracts'; import { FunctionSelector, computeContractClassId } from '../index.js'; diff --git a/yarn-project/circuits.js/src/contract/contract_class_id.ts b/yarn-project/circuits.js/src/contract/contract_class_id.ts index b82aac66f21..86020074ed6 100644 --- a/yarn-project/circuits.js/src/contract/contract_class_id.ts +++ b/yarn-project/circuits.js/src/contract/contract_class_id.ts @@ -1,6 +1,6 @@ import { pedersenHash, sha256 } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { ContractClass } from '@aztec/types/contracts'; +import { type ContractClass } from '@aztec/types/contracts'; import { GeneratorIndex } from '../constants.gen.js'; import { computePrivateFunctionsRoot } from './private_function.js'; diff --git a/yarn-project/circuits.js/src/contract/contract_instance.ts b/yarn-project/circuits.js/src/contract/contract_instance.ts index dd96ec19491..4b3e135b3e7 100644 --- a/yarn-project/circuits.js/src/contract/contract_instance.ts +++ b/yarn-project/circuits.js/src/contract/contract_instance.ts @@ -1,12 +1,12 @@ -import { ContractArtifact, FunctionArtifact, getDefaultInitializer } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionArtifact, getDefaultInitializer } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr, Point } from '@aztec/foundation/fields'; -import { ContractInstance, ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractInstance, type ContractInstanceWithAddress } from '@aztec/types/contracts'; import { getContractClassFromArtifact } from '../contract/contract_class.js'; import { computeContractClassId } from '../contract/contract_class_id.js'; -import { PublicKey } from '../types/public_key.js'; +import { type PublicKey } from '../types/public_key.js'; import { computeContractAddressFromInstance, computeInitializationHash, diff --git a/yarn-project/circuits.js/src/contract/events/contract_class_registered_event.ts b/yarn-project/circuits.js/src/contract/events/contract_class_registered_event.ts index 016dd1cbfb4..418cc304696 100644 --- a/yarn-project/circuits.js/src/contract/events/contract_class_registered_event.ts +++ b/yarn-project/circuits.js/src/contract/events/contract_class_registered_event.ts @@ -1,9 +1,9 @@ import { bufferFromFields } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader } from '@aztec/foundation/serialize'; -import { ContractClassPublic } from '@aztec/types/contracts'; +import { type ContractClassPublic } from '@aztec/types/contracts'; import chunk from 'lodash.chunk'; diff --git a/yarn-project/circuits.js/src/contract/events/contract_instance_deployed_event.ts b/yarn-project/circuits.js/src/contract/events/contract_instance_deployed_event.ts index b307070424e..19de6205fc6 100644 --- a/yarn-project/circuits.js/src/contract/events/contract_instance_deployed_event.ts +++ b/yarn-project/circuits.js/src/contract/events/contract_instance_deployed_event.ts @@ -3,7 +3,7 @@ import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader } from '@aztec/foundation/serialize'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; import { DEPLOYER_CONTRACT_ADDRESS, DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE } from '../../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/contract/events/private_function_broadcasted_event.ts b/yarn-project/circuits.js/src/contract/events/private_function_broadcasted_event.ts index a11c23de56d..ae579a2fac2 100644 --- a/yarn-project/circuits.js/src/contract/events/private_function_broadcasted_event.ts +++ b/yarn-project/circuits.js/src/contract/events/private_function_broadcasted_event.ts @@ -1,9 +1,9 @@ import { FunctionSelector, bufferFromFields } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple } from '@aztec/foundation/serialize'; -import { ExecutablePrivateFunctionWithMembershipProof, PrivateFunction } from '@aztec/types/contracts'; +import { BufferReader, type Tuple } from '@aztec/foundation/serialize'; +import { type ExecutablePrivateFunctionWithMembershipProof, type PrivateFunction } from '@aztec/types/contracts'; import chunk from 'lodash.chunk'; diff --git a/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.test.ts b/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.test.ts index 995f70d873e..d331a41b1cf 100644 --- a/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.test.ts +++ b/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.test.ts @@ -1,7 +1,7 @@ import { FunctionSelector } from '@aztec/foundation/abi'; import { randomBytes } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { getSampleUnconstrainedFunctionBroadcastedEventPayload } from '../../tests/fixtures.js'; diff --git a/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.ts b/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.ts index 0ac0fe0d58f..32556036e77 100644 --- a/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.ts +++ b/yarn-project/circuits.js/src/contract/events/unconstrained_function_broadcasted_event.ts @@ -1,10 +1,10 @@ import { FunctionSelector, bufferFromFields } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { removeArrayPaddingEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple } from '@aztec/foundation/serialize'; -import { UnconstrainedFunction, UnconstrainedFunctionWithMembershipProof } from '@aztec/types/contracts'; +import { BufferReader, type Tuple } from '@aztec/foundation/serialize'; +import { type UnconstrainedFunction, type UnconstrainedFunctionWithMembershipProof } from '@aztec/types/contracts'; import chunk from 'lodash.chunk'; diff --git a/yarn-project/circuits.js/src/contract/private_function.test.ts b/yarn-project/circuits.js/src/contract/private_function.test.ts index e39d828bf3b..c4bbb377b01 100644 --- a/yarn-project/circuits.js/src/contract/private_function.test.ts +++ b/yarn-project/circuits.js/src/contract/private_function.test.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; -import { PrivateFunction } from '@aztec/types/contracts'; +import { type PrivateFunction } from '@aztec/types/contracts'; import { fr, makeSelector } from '../tests/factories.js'; import { computePrivateFunctionsRoot, computePrivateFunctionsTree } from './private_function.js'; diff --git a/yarn-project/circuits.js/src/contract/private_function.ts b/yarn-project/circuits.js/src/contract/private_function.ts index a6670b03c51..ea244b9d94a 100644 --- a/yarn-project/circuits.js/src/contract/private_function.ts +++ b/yarn-project/circuits.js/src/contract/private_function.ts @@ -1,9 +1,9 @@ import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { PrivateFunction } from '@aztec/types/contracts'; +import { type PrivateFunction } from '@aztec/types/contracts'; import { FUNCTION_TREE_HEIGHT, GeneratorIndex } from '../constants.gen.js'; -import { MerkleTree, MerkleTreeCalculator } from '../merkle/index.js'; +import { type MerkleTree, MerkleTreeCalculator } from '../merkle/index.js'; // Memoize the merkle tree calculators to avoid re-computing the zero-hash for each level in each call let privateFunctionTreeCalculator: MerkleTreeCalculator | undefined; diff --git a/yarn-project/circuits.js/src/contract/private_function_membership_proof.test.ts b/yarn-project/circuits.js/src/contract/private_function_membership_proof.test.ts index e50b2332d67..19b85857f26 100644 --- a/yarn-project/circuits.js/src/contract/private_function_membership_proof.test.ts +++ b/yarn-project/circuits.js/src/contract/private_function_membership_proof.test.ts @@ -1,10 +1,10 @@ -import { ContractArtifact, FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { ContractClass } from '@aztec/types/contracts'; +import { type ContractClass } from '@aztec/types/contracts'; import { getBenchmarkContractArtifact } from '../tests/fixtures.js'; import { computeVerificationKeyHash, getContractClassFromArtifact } from './contract_class.js'; -import { ContractClassIdPreimage } from './contract_class_id.js'; +import { type ContractClassIdPreimage } from './contract_class_id.js'; import { createPrivateFunctionMembershipProof, isValidPrivateFunctionMembershipProof, diff --git a/yarn-project/circuits.js/src/contract/private_function_membership_proof.ts b/yarn-project/circuits.js/src/contract/private_function_membership_proof.ts index bd11a3a9867..81e4f08f95d 100644 --- a/yarn-project/circuits.js/src/contract/private_function_membership_proof.ts +++ b/yarn-project/circuits.js/src/contract/private_function_membership_proof.ts @@ -1,10 +1,10 @@ -import { ContractArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { - ContractClassPublic, - ExecutablePrivateFunctionWithMembershipProof, - PrivateFunctionMembershipProof, + type ContractClassPublic, + type ExecutablePrivateFunctionWithMembershipProof, + type PrivateFunctionMembershipProof, } from '@aztec/types/contracts'; import { computeRootFromSiblingPath } from '../merkle/index.js'; diff --git a/yarn-project/circuits.js/src/contract/public_bytecode.test.ts b/yarn-project/circuits.js/src/contract/public_bytecode.test.ts index 8e4bd7887f4..86ed8beb1a7 100644 --- a/yarn-project/circuits.js/src/contract/public_bytecode.test.ts +++ b/yarn-project/circuits.js/src/contract/public_bytecode.test.ts @@ -1,4 +1,4 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { getBenchmarkContractArtifact } from '../tests/fixtures.js'; import { getContractClassFromArtifact } from './contract_class.js'; diff --git a/yarn-project/circuits.js/src/contract/public_bytecode.ts b/yarn-project/circuits.js/src/contract/public_bytecode.ts index 0292fd55b9d..66904656074 100644 --- a/yarn-project/circuits.js/src/contract/public_bytecode.ts +++ b/yarn-project/circuits.js/src/contract/public_bytecode.ts @@ -5,7 +5,7 @@ import { serializeArrayOfBufferableToVector, serializeToBuffer, } from '@aztec/foundation/serialize'; -import { ContractClass } from '@aztec/types/contracts'; +import { type ContractClass } from '@aztec/types/contracts'; import { FUNCTION_SELECTOR_NUM_BYTES } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.test.ts b/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.test.ts index c7b1a4eddea..35b983e08e2 100644 --- a/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.test.ts +++ b/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.test.ts @@ -1,10 +1,10 @@ -import { ContractArtifact, FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { ContractClass } from '@aztec/types/contracts'; +import { type ContractClass } from '@aztec/types/contracts'; import { getTestContractArtifact } from '../tests/fixtures.js'; import { getContractClassFromArtifact } from './contract_class.js'; -import { ContractClassIdPreimage } from './contract_class_id.js'; +import { type ContractClassIdPreimage } from './contract_class_id.js'; import { createUnconstrainedFunctionMembershipProof, isValidUnconstrainedFunctionMembershipProof, diff --git a/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.ts b/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.ts index 144e11ed81d..06cc292b68d 100644 --- a/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.ts +++ b/yarn-project/circuits.js/src/contract/unconstrained_function_membership_proof.ts @@ -1,10 +1,10 @@ -import { ContractArtifact, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type ContractArtifact, type FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { - ContractClassPublic, - UnconstrainedFunctionMembershipProof, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type UnconstrainedFunctionMembershipProof, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; import { computeRootFromSiblingPath } from '../merkle/index.js'; diff --git a/yarn-project/circuits.js/src/hash/hash.ts b/yarn-project/circuits.js/src/hash/hash.ts index 60440f4205e..b5f4f1c0a63 100644 --- a/yarn-project/circuits.js/src/hash/hash.ts +++ b/yarn-project/circuits.js/src/hash/hash.ts @@ -1,4 +1,4 @@ -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { padArrayEnd } from '@aztec/foundation/collection'; import { pedersenHash, pedersenHashBuffer } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; diff --git a/yarn-project/circuits.js/src/hints/build_hints.test.ts b/yarn-project/circuits.js/src/hints/build_hints.test.ts index 9db861afe55..7ac9ee39a52 100644 --- a/yarn-project/circuits.js/src/hints/build_hints.test.ts +++ b/yarn-project/circuits.js/src/hints/build_hints.test.ts @@ -2,13 +2,13 @@ import { makeTuple } from '@aztec/foundation/array'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; import { MAX_NEW_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX } from '../constants.gen.js'; import { siloNullifier } from '../hash/index.js'; import { NullifierNonExistentReadRequestHintsBuilder, - NullifierReadRequestHints, + type NullifierReadRequestHints, NullifierReadRequestHintsBuilder, PendingReadHint, ReadRequestContext, diff --git a/yarn-project/circuits.js/src/hints/build_hints.ts b/yarn-project/circuits.js/src/hints/build_hints.ts index 429286a5dc7..1266082c2d0 100644 --- a/yarn-project/circuits.js/src/hints/build_hints.ts +++ b/yarn-project/circuits.js/src/hints/build_hints.ts @@ -1,18 +1,18 @@ import { padArrayEnd } from '@aztec/foundation/collection'; -import { Fr } from '@aztec/foundation/fields'; -import { Tuple } from '@aztec/foundation/serialize'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type Fr } from '@aztec/foundation/fields'; +import { type Tuple } from '@aztec/foundation/serialize'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; import { MAX_NEW_NULLIFIERS_PER_TX, - MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, - MAX_NULLIFIER_READ_REQUESTS_PER_TX, - NULLIFIER_TREE_HEIGHT, + type MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, + type MAX_NULLIFIER_READ_REQUESTS_PER_TX, + type NULLIFIER_TREE_HEIGHT, } from '../constants.gen.js'; import { siloNullifier } from '../hash/index.js'; -import { MembershipWitness } from '../structs/membership_witness.js'; +import { type MembershipWitness } from '../structs/membership_witness.js'; import { NullifierNonExistentReadRequestHintsBuilder } from '../structs/non_existent_read_request_hints.js'; -import { ReadRequestContext } from '../structs/read_request.js'; +import { type ReadRequestContext } from '../structs/read_request.js'; import { NullifierReadRequestHintsBuilder } from '../structs/read_request_hints.js'; import { SideEffectLinkedToNoteHash } from '../structs/side_effects.js'; import { countAccumulatedItems } from '../utils/index.js'; diff --git a/yarn-project/circuits.js/src/keys/index.ts b/yarn-project/circuits.js/src/keys/index.ts index aa30deb8f8e..9d48a2a2783 100644 --- a/yarn-project/circuits.js/src/keys/index.ts +++ b/yarn-project/circuits.js/src/keys/index.ts @@ -1,9 +1,9 @@ -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr, GrumpkinScalar } from '@aztec/foundation/fields'; import { Grumpkin } from '../barretenberg/crypto/grumpkin/index.js'; -import { GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; +import { type GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; /** * Derives the public key of a secret key. diff --git a/yarn-project/circuits.js/src/merkle/sibling_path.test.ts b/yarn-project/circuits.js/src/merkle/sibling_path.test.ts index 6b59138a476..7b2852570d0 100644 --- a/yarn-project/circuits.js/src/merkle/sibling_path.test.ts +++ b/yarn-project/circuits.js/src/merkle/sibling_path.test.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; -import { MerkleTree } from './merkle_tree.js'; +import { type MerkleTree } from './merkle_tree.js'; import { MerkleTreeCalculator } from './merkle_tree_calculator.js'; import { computeRootFromSiblingPath } from './sibling_path.js'; diff --git a/yarn-project/circuits.js/src/structs/aggregation_object.ts b/yarn-project/circuits.js/src/structs/aggregation_object.ts index 3cc56b45391..3056df1797b 100644 --- a/yarn-project/circuits.js/src/structs/aggregation_object.ts +++ b/yarn-project/circuits.js/src/structs/aggregation_object.ts @@ -2,7 +2,7 @@ import { times } from '@aztec/foundation/collection'; import { Fq, Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { UInt32, Vector } from './shared.js'; +import { type UInt32, Vector } from './shared.js'; import { G1AffineElement } from './verification_key.js'; /** diff --git a/yarn-project/circuits.js/src/structs/call_context.ts b/yarn-project/circuits.js/src/structs/call_context.ts index 17438a431a7..68aaaa99c1a 100644 --- a/yarn-project/circuits.js/src/structs/call_context.ts +++ b/yarn-project/circuits.js/src/structs/call_context.ts @@ -3,7 +3,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { CALL_CONTEXT_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/call_request.ts b/yarn-project/circuits.js/src/structs/call_request.ts index 353cce504f4..89fef28fcb7 100644 --- a/yarn-project/circuits.js/src/structs/call_request.ts +++ b/yarn-project/circuits.js/src/structs/call_request.ts @@ -1,7 +1,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; /** * Caller context. diff --git a/yarn-project/circuits.js/src/structs/complete_address.ts b/yarn-project/circuits.js/src/structs/complete_address.ts index da3d0be17b1..40794fbe5d4 100644 --- a/yarn-project/circuits.js/src/structs/complete_address.ts +++ b/yarn-project/circuits.js/src/structs/complete_address.ts @@ -4,9 +4,9 @@ import { BufferReader } from '@aztec/foundation/serialize'; import { Grumpkin } from '../barretenberg/index.js'; import { computeContractAddressFromPartial, computePartialAddress } from '../contract/contract_address.js'; -import { GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; -import { PartialAddress } from '../types/partial_address.js'; -import { PublicKey } from '../types/public_key.js'; +import { type GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; +import { type PartialAddress } from '../types/partial_address.js'; +import { type PublicKey } from '../types/public_key.js'; /** * A complete address is a combination of an Aztec address, a public key and a partial address. diff --git a/yarn-project/circuits.js/src/structs/contract_storage_update_request.ts b/yarn-project/circuits.js/src/structs/contract_storage_update_request.ts index 37f9a678717..8508fa8c7b8 100644 --- a/yarn-project/circuits.js/src/structs/contract_storage_update_request.ts +++ b/yarn-project/circuits.js/src/structs/contract_storage_update_request.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/function_data.ts b/yarn-project/circuits.js/src/structs/function_data.ts index 4d44bad5b73..66be3fd069b 100644 --- a/yarn-project/circuits.js/src/structs/function_data.ts +++ b/yarn-project/circuits.js/src/structs/function_data.ts @@ -1,10 +1,10 @@ -import { FunctionAbi, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; +import { type FunctionAbi, FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { FUNCTION_DATA_LENGTH, GeneratorIndex } from '../constants.gen.js'; -import { ContractFunctionDao } from '../types/contract_function_dao.js'; +import { type ContractFunctionDao } from '../types/contract_function_dao.js'; /** Function description for circuit. */ export class FunctionData { diff --git a/yarn-project/circuits.js/src/structs/global_variables.ts b/yarn-project/circuits.js/src/structs/global_variables.ts index 05c90e8b0e3..d3f762785c4 100644 --- a/yarn-project/circuits.js/src/structs/global_variables.ts +++ b/yarn-project/circuits.js/src/structs/global_variables.ts @@ -2,7 +2,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GLOBAL_VARIABLES_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/header.ts b/yarn-project/circuits.js/src/structs/header.ts index 782486a1fb6..0a5413fa5a7 100644 --- a/yarn-project/circuits.js/src/structs/header.ts +++ b/yarn-project/circuits.js/src/structs/header.ts @@ -1,5 +1,5 @@ import { pedersenHash } from '@aztec/foundation/crypto'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { GeneratorIndex, HEADER_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts index bcee912e62d..66be5891125 100644 --- a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts @@ -3,7 +3,7 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { - MAX_NEW_L2_TO_L1_MSGS_PER_CALL, + type MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_TX, MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, diff --git a/yarn-project/circuits.js/src/structs/kernel/kernel_data.ts b/yarn-project/circuits.js/src/structs/kernel/kernel_data.ts index 1165bfcb723..b12cdd0e8dc 100644 --- a/yarn-project/circuits.js/src/structs/kernel/kernel_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/kernel_data.ts @@ -1,10 +1,10 @@ import { makeTuple } from '@aztec/foundation/array'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { VK_TREE_HEIGHT } from '../../constants.gen.js'; import { Proof, makeEmptyProof } from '../proof.js'; -import { UInt32 } from '../shared.js'; +import { type UInt32 } from '../shared.js'; import { VerificationKey } from '../verification_key.js'; import { KernelCircuitPublicInputs } from './kernel_circuit_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/private_call_data.ts b/yarn-project/circuits.js/src/structs/kernel/private_call_data.ts index eba16946eea..7026461a997 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_call_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_call_data.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { FUNCTION_TREE_HEIGHT, diff --git a/yarn-project/circuits.js/src/structs/kernel/private_kernel_data.ts b/yarn-project/circuits.js/src/structs/kernel/private_kernel_data.ts index 5f5d52b31dd..d7310402ee4 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_kernel_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_kernel_data.ts @@ -1,10 +1,10 @@ import { makeTuple } from '@aztec/foundation/array'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { VK_TREE_HEIGHT } from '../../constants.gen.js'; import { Proof, makeEmptyProof } from '../proof.js'; -import { UInt32 } from '../shared.js'; +import { type UInt32 } from '../shared.js'; import { VerificationKey } from '../verification_key.js'; import { PrivateKernelCircuitPublicInputs } from './private_kernel_circuit_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/public_call_data.ts b/yarn-project/circuits.js/src/structs/kernel/public_call_data.ts index c73427c651c..5d53b9a49a7 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_call_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_call_data.ts @@ -1,10 +1,10 @@ -import { Fr } from '@aztec/foundation/fields'; -import { Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type Fr } from '@aztec/foundation/fields'; +import { type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL } from '../../constants.gen.js'; -import { CallRequest } from '../call_request.js'; -import { Proof } from '../proof.js'; -import { PublicCallStackItem } from '../public_call_stack_item.js'; +import { type MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL } from '../../constants.gen.js'; +import { type CallRequest } from '../call_request.js'; +import { type Proof } from '../proof.js'; +import { type PublicCallStackItem } from '../public_call_stack_item.js'; /** * Public calldata assembled from the kernel execution result and proof. diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts index b8b244d2435..86530dc0f4d 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_circuit_private_inputs.ts @@ -1,7 +1,7 @@ import { serializeToBuffer } from '@aztec/foundation/serialize'; -import { PublicCallData } from './public_call_data.js'; -import { PublicKernelData } from './public_kernel_data.js'; +import { type PublicCallData } from './public_call_data.js'; +import { type PublicKernelData } from './public_kernel_data.js'; /** * Inputs to the public kernel circuit. diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_data.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_data.ts index 2dfcb7fe992..c558b5aad57 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_kernel_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_data.ts @@ -1,10 +1,10 @@ import { makeTuple } from '@aztec/foundation/array'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { VK_TREE_HEIGHT } from '../../constants.gen.js'; import { Proof, makeEmptyProof } from '../proof.js'; -import { UInt32 } from '../shared.js'; +import { type UInt32 } from '../shared.js'; import { VerificationKey } from '../verification_key.js'; import { PublicKernelCircuitPublicInputs } from './public_kernel_circuit_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/kernel/public_kernel_tail_circuit_private_inputs.ts b/yarn-project/circuits.js/src/structs/kernel/public_kernel_tail_circuit_private_inputs.ts index 77f3bc4cf11..073c0598861 100644 --- a/yarn-project/circuits.js/src/structs/kernel/public_kernel_tail_circuit_private_inputs.ts +++ b/yarn-project/circuits.js/src/structs/kernel/public_kernel_tail_circuit_private_inputs.ts @@ -1,8 +1,8 @@ import { serializeToBuffer } from '@aztec/foundation/serialize'; -import { NullifierNonExistentReadRequestHints } from '../non_existent_read_request_hints.js'; -import { NullifierReadRequestHints } from '../read_request_hints.js'; -import { PublicKernelData } from './public_kernel_data.js'; +import { type NullifierNonExistentReadRequestHints } from '../non_existent_read_request_hints.js'; +import { type NullifierReadRequestHints } from '../read_request_hints.js'; +import { type PublicKernelData } from './public_kernel_data.js'; /** * Inputs to the public kernel circuit. diff --git a/yarn-project/circuits.js/src/structs/max_block_number.ts b/yarn-project/circuits.js/src/structs/max_block_number.ts index cc124de2e26..998fdd4a1a4 100644 --- a/yarn-project/circuits.js/src/structs/max_block_number.ts +++ b/yarn-project/circuits.js/src/structs/max_block_number.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { MAX_BLOCK_NUMBER_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/membership_witness.ts b/yarn-project/circuits.js/src/structs/membership_witness.ts index b2d9211c58b..db0457ef394 100644 --- a/yarn-project/circuits.js/src/structs/membership_witness.ts +++ b/yarn-project/circuits.js/src/structs/membership_witness.ts @@ -1,7 +1,7 @@ import { assertMemberLength } from '@aztec/foundation/array'; import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; /** * Contains information which can be used to prove that a leaf is a member of a Merkle tree. diff --git a/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts b/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts index 9cd254bc0b9..a459be8be34 100644 --- a/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts +++ b/yarn-project/circuits.js/src/structs/non_existent_read_request_hints.ts @@ -1,6 +1,6 @@ import { makeTuple } from '@aztec/foundation/array'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; import { MAX_NEW_NULLIFIERS_PER_TX, @@ -9,7 +9,7 @@ import { } from '../constants.gen.js'; import { MembershipWitness } from './membership_witness.js'; import { NullifierLeafPreimage } from './rollup/nullifier_leaf/index.js'; -import { SideEffectLinkedToNoteHash, SideEffectType } from './side_effects.js'; +import { SideEffectLinkedToNoteHash, type SideEffectType } from './side_effects.js'; export class NonMembershipHint { constructor(public membershipWitness: MembershipWitness, public leafPreimage: LEAF_PREIMAGE) {} diff --git a/yarn-project/circuits.js/src/structs/note_hash_read_request_membership_witness.ts b/yarn-project/circuits.js/src/structs/note_hash_read_request_membership_witness.ts index d9bb37c0c09..989b177ae2a 100644 --- a/yarn-project/circuits.js/src/structs/note_hash_read_request_membership_witness.ts +++ b/yarn-project/circuits.js/src/structs/note_hash_read_request_membership_witness.ts @@ -1,10 +1,10 @@ import { makeTuple, range } from '@aztec/foundation/array'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { MAX_NEW_NOTE_HASHES_PER_CALL, NOTE_HASH_TREE_HEIGHT } from '../constants.gen.js'; -import { MembershipWitness } from './membership_witness.js'; +import { type MembershipWitness } from './membership_witness.js'; /** * A ReadRequestMembershipWitness is similar to a MembershipWitness but includes diff --git a/yarn-project/circuits.js/src/structs/nullifier_key_validation_request.ts b/yarn-project/circuits.js/src/structs/nullifier_key_validation_request.ts index 37f2a6ad9ea..93844400528 100644 --- a/yarn-project/circuits.js/src/structs/nullifier_key_validation_request.ts +++ b/yarn-project/circuits.js/src/structs/nullifier_key_validation_request.ts @@ -1,12 +1,12 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields'; +import { type Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH, NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH, } from '../constants.gen.js'; -import { GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; +import { type GrumpkinPrivateKey } from '../types/grumpkin_private_key.js'; /** * Request for validating a nullifier key pair used in the app. diff --git a/yarn-project/circuits.js/src/structs/parity/base_parity_inputs.ts b/yarn-project/circuits.js/src/structs/parity/base_parity_inputs.ts index c369424cdc0..bb2e704dc04 100644 --- a/yarn-project/circuits.js/src/structs/parity/base_parity_inputs.ts +++ b/yarn-project/circuits.js/src/structs/parity/base_parity_inputs.ts @@ -1,7 +1,7 @@ import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_MSGS_PER_BASE_PARITY } from '../../constants.gen.js'; +import { type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_MSGS_PER_BASE_PARITY } from '../../constants.gen.js'; export class BaseParityInputs { constructor( diff --git a/yarn-project/circuits.js/src/structs/parity/parity_public_inputs.ts b/yarn-project/circuits.js/src/structs/parity/parity_public_inputs.ts index 3edf7909091..d1d82b601e4 100644 --- a/yarn-project/circuits.js/src/structs/parity/parity_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/parity/parity_public_inputs.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { AggregationObject } from '../aggregation_object.js'; diff --git a/yarn-project/circuits.js/src/structs/parity/root_parity_input.ts b/yarn-project/circuits.js/src/structs/parity/root_parity_input.ts index 1c55e5c83bb..cab611415d6 100644 --- a/yarn-project/circuits.js/src/structs/parity/root_parity_input.ts +++ b/yarn-project/circuits.js/src/structs/parity/root_parity_input.ts @@ -1,5 +1,5 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { Proof } from '../proof.js'; import { ParityPublicInputs } from './parity_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/parity/root_parity_inputs.ts b/yarn-project/circuits.js/src/structs/parity/root_parity_inputs.ts index 4a73162a6af..0556b9d172d 100644 --- a/yarn-project/circuits.js/src/structs/parity/root_parity_inputs.ts +++ b/yarn-project/circuits.js/src/structs/parity/root_parity_inputs.ts @@ -1,4 +1,4 @@ -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { NUM_BASE_PARITY_PER_ROOT_PARITY } from '../../constants.gen.js'; import { RootParityInput } from './root_parity_input.js'; diff --git a/yarn-project/circuits.js/src/structs/partial_state_reference.ts b/yarn-project/circuits.js/src/structs/partial_state_reference.ts index 0ca6b790f38..4ccac8d2318 100644 --- a/yarn-project/circuits.js/src/structs/partial_state_reference.ts +++ b/yarn-project/circuits.js/src/structs/partial_state_reference.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { PARTIAL_STATE_REFERENCE_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/private_call_stack_item.ts b/yarn-project/circuits.js/src/structs/private_call_stack_item.ts index 700cd968d17..23f9060c372 100644 --- a/yarn-project/circuits.js/src/structs/private_call_stack_item.ts +++ b/yarn-project/circuits.js/src/structs/private_call_stack_item.ts @@ -2,10 +2,10 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex, PRIVATE_CALL_STACK_ITEM_LENGTH } from '../constants.gen.js'; -import { CallContext } from './call_context.js'; +import { type CallContext } from './call_context.js'; import { CallRequest, CallerContext } from './call_request.js'; import { FunctionData } from './function_data.js'; import { PrivateCircuitPublicInputs } from './private_circuit_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts index 67e9347eba0..b591cd52404 100644 --- a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts @@ -2,8 +2,14 @@ import { makeTuple } from '@aztec/foundation/array'; import { isArrayEmpty } from '@aztec/foundation/collection'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, FieldReader, Tuple, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { + BufferReader, + FieldReader, + type Tuple, + serializeToBuffer, + serializeToFields, +} from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex, diff --git a/yarn-project/circuits.js/src/structs/public_call_request.ts b/yarn-project/circuits.js/src/structs/public_call_request.ts index 30f4faf8f8b..6b586045abb 100644 --- a/yarn-project/circuits.js/src/structs/public_call_request.ts +++ b/yarn-project/circuits.js/src/structs/public_call_request.ts @@ -1,7 +1,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { computeVarArgsHash } from '../hash/hash.js'; import { CallContext } from './call_context.js'; diff --git a/yarn-project/circuits.js/src/structs/public_call_stack_item.ts b/yarn-project/circuits.js/src/structs/public_call_stack_item.ts index 454b695de62..0d53df6b95c 100644 --- a/yarn-project/circuits.js/src/structs/public_call_stack_item.ts +++ b/yarn-project/circuits.js/src/structs/public_call_stack_item.ts @@ -2,10 +2,10 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex } from '../constants.gen.js'; -import { CallContext } from './call_context.js'; +import { type CallContext } from './call_context.js'; import { CallRequest, CallerContext } from './call_request.js'; import { FunctionData } from './function_data.js'; import { PublicCircuitPublicInputs } from './public_circuit_public_inputs.js'; diff --git a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts index 8ba49eb659a..18f779c6ad3 100644 --- a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts @@ -3,8 +3,14 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { isArrayEmpty } from '@aztec/foundation/collection'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, FieldReader, Tuple, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { + BufferReader, + FieldReader, + type Tuple, + serializeToBuffer, + serializeToFields, +} from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex, diff --git a/yarn-project/circuits.js/src/structs/read_request_hints.ts b/yarn-project/circuits.js/src/structs/read_request_hints.ts index 880b71a4467..6e6439ec426 100644 --- a/yarn-project/circuits.js/src/structs/read_request_hints.ts +++ b/yarn-project/circuits.js/src/structs/read_request_hints.ts @@ -1,6 +1,6 @@ import { makeTuple } from '@aztec/foundation/array'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { TreeLeafPreimage } from '@aztec/foundation/trees'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type TreeLeafPreimage } from '@aztec/foundation/trees'; import { MAX_NULLIFIER_READ_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT } from '../constants.gen.js'; import { MembershipWitness } from './membership_witness.js'; diff --git a/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts b/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts index 6f39790a162..6929e58b412 100644 --- a/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts +++ b/yarn-project/circuits.js/src/structs/rollup/append_only_tree_snapshot.ts @@ -1,7 +1,7 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { STRING_ENCODING, UInt32 } from '../shared.js'; +import { STRING_ENCODING, type UInt32 } from '../shared.js'; /** * Snapshot of an append only tree. diff --git a/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts b/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts index 87658904f2e..598e246a104 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_or_merge_rollup_public_inputs.ts @@ -3,7 +3,7 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { AggregationObject } from '../aggregation_object.js'; import { PartialStateReference } from '../partial_state_reference.js'; -import { RollupTypes } from '../shared.js'; +import { type RollupTypes } from '../shared.js'; import { ConstantRollupData } from './base_rollup.js'; /** diff --git a/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts b/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts index d066483fb97..355900afe9e 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { type ARCHIVE_HEIGHT, @@ -15,7 +15,7 @@ import { type UInt32 } from '../shared.js'; import { AppendOnlyTreeSnapshot } from './append_only_tree_snapshot.js'; import { NullifierLeaf, NullifierLeafPreimage } from './nullifier_leaf/index.js'; import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from './public_data_leaf/index.js'; -import { StateDiffHints } from './state_diff_hints.js'; +import { type StateDiffHints } from './state_diff_hints.js'; export { NullifierLeaf, NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage }; diff --git a/yarn-project/circuits.js/src/structs/rollup/merge_rollup.ts b/yarn-project/circuits.js/src/structs/rollup/merge_rollup.ts index 5c5f5f380d1..96d8bbd0bf8 100644 --- a/yarn-project/circuits.js/src/structs/rollup/merge_rollup.ts +++ b/yarn-project/circuits.js/src/structs/rollup/merge_rollup.ts @@ -1,6 +1,6 @@ import { serializeToBuffer } from '@aztec/foundation/serialize'; -import { PreviousRollupData } from './previous_rollup_data.js'; +import { type PreviousRollupData } from './previous_rollup_data.js'; /** * Represents inputs of the merge rollup circuit. diff --git a/yarn-project/circuits.js/src/structs/rollup/nullifier_leaf/index.ts b/yarn-project/circuits.js/src/structs/rollup/nullifier_leaf/index.ts index 149ab6c0014..42160877895 100644 --- a/yarn-project/circuits.js/src/structs/rollup/nullifier_leaf/index.ts +++ b/yarn-project/circuits.js/src/structs/rollup/nullifier_leaf/index.ts @@ -1,7 +1,7 @@ import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader } from '@aztec/foundation/serialize'; -import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type IndexedTreeLeaf, type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; /** * Class containing the data of a preimage of a single leaf in the nullifier tree. diff --git a/yarn-project/circuits.js/src/structs/rollup/previous_rollup_data.ts b/yarn-project/circuits.js/src/structs/rollup/previous_rollup_data.ts index e5154b7a954..c457f6cd159 100644 --- a/yarn-project/circuits.js/src/structs/rollup/previous_rollup_data.ts +++ b/yarn-project/circuits.js/src/structs/rollup/previous_rollup_data.ts @@ -1,11 +1,11 @@ import { serializeToBuffer } from '@aztec/foundation/serialize'; -import { ROLLUP_VK_TREE_HEIGHT } from '../../constants.gen.js'; -import { MembershipWitness } from '../membership_witness.js'; -import { Proof } from '../proof.js'; -import { UInt32 } from '../shared.js'; -import { VerificationKey } from '../verification_key.js'; -import { BaseOrMergeRollupPublicInputs } from './base_or_merge_rollup_public_inputs.js'; +import { type ROLLUP_VK_TREE_HEIGHT } from '../../constants.gen.js'; +import { type MembershipWitness } from '../membership_witness.js'; +import { type Proof } from '../proof.js'; +import { type UInt32 } from '../shared.js'; +import { type VerificationKey } from '../verification_key.js'; +import { type BaseOrMergeRollupPublicInputs } from './base_or_merge_rollup_public_inputs.js'; /** * Represents the data of a previous merge or base rollup circuit. diff --git a/yarn-project/circuits.js/src/structs/rollup/public_data_leaf/index.ts b/yarn-project/circuits.js/src/structs/rollup/public_data_leaf/index.ts index 5724f220e02..96a3eac57b9 100644 --- a/yarn-project/circuits.js/src/structs/rollup/public_data_leaf/index.ts +++ b/yarn-project/circuits.js/src/structs/rollup/public_data_leaf/index.ts @@ -1,7 +1,7 @@ import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type IndexedTreeLeaf, type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; /** * Class containing the data of a preimage of a single leaf in the public data tree. diff --git a/yarn-project/circuits.js/src/structs/rollup/root_rollup.ts b/yarn-project/circuits.js/src/structs/rollup/root_rollup.ts index e3fce3863c1..58ee9985c14 100644 --- a/yarn-project/circuits.js/src/structs/rollup/root_rollup.ts +++ b/yarn-project/circuits.js/src/structs/rollup/root_rollup.ts @@ -1,17 +1,17 @@ -import { Fr } from '@aztec/foundation/fields'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type Fr } from '@aztec/foundation/fields'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { - ARCHIVE_HEIGHT, - L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, - NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + type ARCHIVE_HEIGHT, + type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, + type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '../../constants.gen.js'; import { AggregationObject } from '../aggregation_object.js'; import { Header } from '../header.js'; -import { RootParityInput } from '../parity/root_parity_input.js'; +import { type RootParityInput } from '../parity/root_parity_input.js'; import { AppendOnlyTreeSnapshot } from './append_only_tree_snapshot.js'; -import { PreviousRollupData } from './previous_rollup_data.js'; +import { type PreviousRollupData } from './previous_rollup_data.js'; /** * Represents inputs of the root rollup circuit. diff --git a/yarn-project/circuits.js/src/structs/rollup/state_diff_hints.ts b/yarn-project/circuits.js/src/structs/rollup/state_diff_hints.ts index 1a812819433..eb921135822 100644 --- a/yarn-project/circuits.js/src/structs/rollup/state_diff_hints.ts +++ b/yarn-project/circuits.js/src/structs/rollup/state_diff_hints.ts @@ -1,16 +1,16 @@ -import { Fr } from '@aztec/foundation/fields'; -import { Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type Fr } from '@aztec/foundation/fields'; +import { type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type FieldsOf } from '@aztec/foundation/types'; import { - MAX_NEW_NULLIFIERS_PER_TX, - NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, - NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, - NULLIFIER_TREE_HEIGHT, - PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, + type MAX_NEW_NULLIFIERS_PER_TX, + type NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, + type NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, + type NULLIFIER_TREE_HEIGHT, + type PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, } from '../../constants.gen.js'; -import { MembershipWitness } from '../membership_witness.js'; -import { NullifierLeafPreimage } from './nullifier_leaf/index.js'; +import { type MembershipWitness } from '../membership_witness.js'; +import { type NullifierLeafPreimage } from './nullifier_leaf/index.js'; /** * Hints used while proving state diff validity. diff --git a/yarn-project/circuits.js/src/structs/shared.ts b/yarn-project/circuits.js/src/structs/shared.ts index 9b51ce8e1dd..c8cce1576fe 100644 --- a/yarn-project/circuits.js/src/structs/shared.ts +++ b/yarn-project/circuits.js/src/structs/shared.ts @@ -1,4 +1,4 @@ -import { Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; /** * Implementation of a vector. Matches how we are serializing and deserializing vectors in cpp (length in the first position, followed by the items). diff --git a/yarn-project/circuits.js/src/structs/state_reference.ts b/yarn-project/circuits.js/src/structs/state_reference.ts index 8d05ec2b974..f3a78608ad9 100644 --- a/yarn-project/circuits.js/src/structs/state_reference.ts +++ b/yarn-project/circuits.js/src/structs/state_reference.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize'; import { STATE_REFERENCE_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/tx_context.ts b/yarn-project/circuits.js/src/structs/tx_context.ts index 0eae14c831d..73d484e54af 100644 --- a/yarn-project/circuits.js/src/structs/tx_context.ts +++ b/yarn-project/circuits.js/src/structs/tx_context.ts @@ -1,7 +1,7 @@ import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex, TX_CONTEXT_DATA_LENGTH } from '../constants.gen.js'; diff --git a/yarn-project/circuits.js/src/structs/tx_request.ts b/yarn-project/circuits.js/src/structs/tx_request.ts index 6113bbb279a..6a3812692a7 100644 --- a/yarn-project/circuits.js/src/structs/tx_request.ts +++ b/yarn-project/circuits.js/src/structs/tx_request.ts @@ -2,7 +2,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; import { GeneratorIndex, TX_REQUEST_LENGTH } from '../constants.gen.js'; import { FunctionData } from './function_data.js'; diff --git a/yarn-project/circuits.js/src/structs/validation_requests.ts b/yarn-project/circuits.js/src/structs/validation_requests.ts index fbcbe3d2b35..faff930709e 100644 --- a/yarn-project/circuits.js/src/structs/validation_requests.ts +++ b/yarn-project/circuits.js/src/structs/validation_requests.ts @@ -1,5 +1,5 @@ import { makeTuple } from '@aztec/foundation/array'; -import { BufferReader, Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; +import { BufferReader, type Tuple, serializeToBuffer } from '@aztec/foundation/serialize'; import { MAX_NOTE_HASH_READ_REQUESTS_PER_TX, diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index a8673508506..ea651678f24 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -4,11 +4,11 @@ import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { EthAddress } from '@aztec/foundation/eth-address'; import { numToUInt32BE } from '@aztec/foundation/serialize'; import { - ContractClassPublic, - ExecutablePrivateFunctionWithMembershipProof, - PrivateFunction, - PublicFunction, - UnconstrainedFunctionWithMembershipProof, + type ContractClassPublic, + type ExecutablePrivateFunctionWithMembershipProof, + type PrivateFunction, + type PublicFunction, + type UnconstrainedFunctionWithMembershipProof, } from '@aztec/types/contracts'; import { SchnorrSignature } from '../barretenberg/index.js'; @@ -35,7 +35,7 @@ import { FunctionData, FunctionSelector, G1AffineElement, - GrumpkinPrivateKey, + type GrumpkinPrivateKey, GrumpkinScalar, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, L2ToL1Message, diff --git a/yarn-project/circuits.js/src/tests/fixtures.ts b/yarn-project/circuits.js/src/tests/fixtures.ts index d3d68199d89..1d45e9f834c 100644 --- a/yarn-project/circuits.js/src/tests/fixtures.ts +++ b/yarn-project/circuits.js/src/tests/fixtures.ts @@ -1,6 +1,6 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { loadContractArtifact } from '@aztec/types/abi'; -import { NoirCompiledContract } from '@aztec/types/noir'; +import { type NoirCompiledContract } from '@aztec/types/noir'; import { readFileSync } from 'fs'; import { dirname, resolve } from 'path'; diff --git a/yarn-project/circuits.js/src/types/contract_function_dao.ts b/yarn-project/circuits.js/src/types/contract_function_dao.ts index 7d97ccda986..db0688ab873 100644 --- a/yarn-project/circuits.js/src/types/contract_function_dao.ts +++ b/yarn-project/circuits.js/src/types/contract_function_dao.ts @@ -1,4 +1,4 @@ -import { FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; +import { type FunctionArtifact, type FunctionSelector } from '@aztec/foundation/abi'; /** * A contract function Data Access Object (DAO). diff --git a/yarn-project/circuits.js/src/types/deployment_info.ts b/yarn-project/circuits.js/src/types/deployment_info.ts index 637bab821b9..484fb84b248 100644 --- a/yarn-project/circuits.js/src/types/deployment_info.ts +++ b/yarn-project/circuits.js/src/types/deployment_info.ts @@ -1,6 +1,6 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; -import { CompleteAddress } from '../structs/complete_address.js'; +import { type CompleteAddress } from '../structs/complete_address.js'; /** * Represents the data generated as part of contract deployment. diff --git a/yarn-project/circuits.js/src/types/grumpkin_private_key.ts b/yarn-project/circuits.js/src/types/grumpkin_private_key.ts index 16ed3679587..cb96ce1cd8c 100644 --- a/yarn-project/circuits.js/src/types/grumpkin_private_key.ts +++ b/yarn-project/circuits.js/src/types/grumpkin_private_key.ts @@ -1,4 +1,4 @@ -import { GrumpkinScalar } from '@aztec/foundation/fields'; +import { type GrumpkinScalar } from '@aztec/foundation/fields'; /** A type alias for private key which belongs to the scalar field of Grumpkin curve. */ export type GrumpkinPrivateKey = GrumpkinScalar; diff --git a/yarn-project/circuits.js/src/types/partial_address.ts b/yarn-project/circuits.js/src/types/partial_address.ts index 21877f72e88..29b2a8793de 100644 --- a/yarn-project/circuits.js/src/types/partial_address.ts +++ b/yarn-project/circuits.js/src/types/partial_address.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * A type which along with public key forms a preimage of a contract address. See the link below for more details diff --git a/yarn-project/circuits.js/src/types/public_key.ts b/yarn-project/circuits.js/src/types/public_key.ts index 1a985a9a6a2..0109de4c8ea 100644 --- a/yarn-project/circuits.js/src/types/public_key.ts +++ b/yarn-project/circuits.js/src/types/public_key.ts @@ -1,4 +1,4 @@ -import { Point } from '@aztec/foundation/fields'; +import { type Point } from '@aztec/foundation/fields'; /** Represents a user public key. */ export type PublicKey = Point; diff --git a/yarn-project/cli/src/client.test.ts b/yarn-project/cli/src/client.test.ts index 8e879f762ba..ad21f399256 100644 --- a/yarn-project/cli/src/client.test.ts +++ b/yarn-project/cli/src/client.test.ts @@ -1,7 +1,7 @@ -import { NodeInfo } from '@aztec/aztec.js'; -import { PXE } from '@aztec/circuit-types'; +import { type NodeInfo } from '@aztec/aztec.js'; +import { type PXE } from '@aztec/circuit-types'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { checkServerVersion } from './client.js'; diff --git a/yarn-project/cli/src/client.ts b/yarn-project/cli/src/client.ts index 18ea8bd2d5e..8b3d55c37d9 100644 --- a/yarn-project/cli/src/client.ts +++ b/yarn-project/cli/src/client.ts @@ -1,5 +1,5 @@ -import { PXE, createPXEClient } from '@aztec/aztec.js'; -import { DebugLogger } from '@aztec/foundation/log'; +import { type PXE, createPXEClient } from '@aztec/aztec.js'; +import { type DebugLogger } from '@aztec/foundation/log'; import { fileURLToPath } from '@aztec/foundation/url'; import { readFileSync } from 'fs'; diff --git a/yarn-project/cli/src/cmds/add_contract.ts b/yarn-project/cli/src/cmds/add_contract.ts index b09e87d6eb7..c77283083c8 100644 --- a/yarn-project/cli/src/cmds/add_contract.ts +++ b/yarn-project/cli/src/cmds/add_contract.ts @@ -1,13 +1,13 @@ import { AztecAddress, - ContractInstanceWithAddress, + type ContractInstanceWithAddress, EthAddress, - Fr, - Point, + type Fr, + type Point, getContractClassFromArtifact, } from '@aztec/aztec.js'; import { computeContractAddressFromInstance, computePublicKeysHash } from '@aztec/circuits.js/contract'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; import { getContractArtifact } from '../utils.js'; diff --git a/yarn-project/cli/src/cmds/add_note.ts b/yarn-project/cli/src/cmds/add_note.ts index 988c2a45c12..f6359bd5c1c 100644 --- a/yarn-project/cli/src/cmds/add_note.ts +++ b/yarn-project/cli/src/cmds/add_note.ts @@ -1,6 +1,6 @@ -import { AztecAddress, Fr } from '@aztec/aztec.js'; -import { ExtendedNote, Note, TxHash } from '@aztec/circuit-types'; -import { DebugLogger } from '@aztec/foundation/log'; +import { type AztecAddress, type Fr } from '@aztec/aztec.js'; +import { ExtendedNote, Note, type TxHash } from '@aztec/circuit-types'; +import { type DebugLogger } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; import { parseFields } from '../parse_args.js'; diff --git a/yarn-project/cli/src/cmds/block_number.ts b/yarn-project/cli/src/cmds/block_number.ts index c5aed126443..5b6ca472d6b 100644 --- a/yarn-project/cli/src/cmds/block_number.ts +++ b/yarn-project/cli/src/cmds/block_number.ts @@ -1,4 +1,4 @@ -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/call.ts b/yarn-project/cli/src/cmds/call.ts index cab98e2dd42..2864e8985ac 100644 --- a/yarn-project/cli/src/cmds/call.ts +++ b/yarn-project/cli/src/cmds/call.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { format } from 'util'; diff --git a/yarn-project/cli/src/cmds/check_deploy.ts b/yarn-project/cli/src/cmds/check_deploy.ts index c9777522e10..4a00c72a518 100644 --- a/yarn-project/cli/src/cmds/check_deploy.ts +++ b/yarn-project/cli/src/cmds/check_deploy.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/compute_selector.ts b/yarn-project/cli/src/cmds/compute_selector.ts index 074be33597a..9d299a64eff 100644 --- a/yarn-project/cli/src/cmds/compute_selector.ts +++ b/yarn-project/cli/src/cmds/compute_selector.ts @@ -1,5 +1,5 @@ import { FunctionSelector } from '@aztec/foundation/abi'; -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; export function computeSelector(functionSignature: string, log: LogFn) { const selector = FunctionSelector.fromSignature(functionSignature); diff --git a/yarn-project/cli/src/cmds/create_account.ts b/yarn-project/cli/src/cmds/create_account.ts index 2ad6a5d92d6..09cdadc361a 100644 --- a/yarn-project/cli/src/cmds/create_account.ts +++ b/yarn-project/cli/src/cmds/create_account.ts @@ -1,7 +1,7 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; import { GrumpkinScalar } from '@aztec/aztec.js'; -import { Fq, Fr } from '@aztec/foundation/fields'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type Fq, Fr } from '@aztec/foundation/fields'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/deploy.ts b/yarn-project/cli/src/cmds/deploy.ts index a9fbda80527..94cc35e5f27 100644 --- a/yarn-project/cli/src/cmds/deploy.ts +++ b/yarn-project/cli/src/cmds/deploy.ts @@ -1,7 +1,7 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; -import { ContractDeployer, EthAddress, Fq, Fr, Point } from '@aztec/aztec.js'; +import { ContractDeployer, type EthAddress, type Fq, Fr, type Point } from '@aztec/aztec.js'; import { getInitializer } from '@aztec/foundation/abi'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; import { encodeArgs } from '../encoding.js'; diff --git a/yarn-project/cli/src/cmds/deploy_l1_contracts.ts b/yarn-project/cli/src/cmds/deploy_l1_contracts.ts index 16b5c1f6e38..49c6f5decb6 100644 --- a/yarn-project/cli/src/cmds/deploy_l1_contracts.ts +++ b/yarn-project/cli/src/cmds/deploy_l1_contracts.ts @@ -1,4 +1,4 @@ -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { deployAztecContracts } from '../utils.js'; diff --git a/yarn-project/cli/src/cmds/example_contracts.ts b/yarn-project/cli/src/cmds/example_contracts.ts index c7ee019eccc..94c7437262b 100644 --- a/yarn-project/cli/src/cmds/example_contracts.ts +++ b/yarn-project/cli/src/cmds/example_contracts.ts @@ -1,4 +1,4 @@ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { getExampleContractArtifacts } from '../utils.js'; diff --git a/yarn-project/cli/src/cmds/generate_p2p_private_key.ts b/yarn-project/cli/src/cmds/generate_p2p_private_key.ts index 928e61974ba..f62617ae6ea 100644 --- a/yarn-project/cli/src/cmds/generate_p2p_private_key.ts +++ b/yarn-project/cli/src/cmds/generate_p2p_private_key.ts @@ -1,4 +1,4 @@ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { createSecp256k1PeerId } from '@libp2p/peer-id-factory'; diff --git a/yarn-project/cli/src/cmds/generate_private_key.ts b/yarn-project/cli/src/cmds/generate_private_key.ts index b447cdcc738..f7504de90de 100644 --- a/yarn-project/cli/src/cmds/generate_private_key.ts +++ b/yarn-project/cli/src/cmds/generate_private_key.ts @@ -1,5 +1,5 @@ import { GrumpkinScalar, generatePublicKey } from '@aztec/aztec.js'; -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { mnemonicToAccount } from 'viem/accounts'; diff --git a/yarn-project/cli/src/cmds/get_account.ts b/yarn-project/cli/src/cmds/get_account.ts index 8b3e9359d5f..c672c85fb85 100644 --- a/yarn-project/cli/src/cmds/get_account.ts +++ b/yarn-project/cli/src/cmds/get_account.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_accounts.ts b/yarn-project/cli/src/cmds/get_accounts.ts index 1e36475f3a8..9d84cc581ed 100644 --- a/yarn-project/cli/src/cmds/get_accounts.ts +++ b/yarn-project/cli/src/cmds/get_accounts.ts @@ -1,4 +1,4 @@ -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_contract_data.ts b/yarn-project/cli/src/cmds/get_contract_data.ts index d11180f7e4b..592358a9fd3 100644 --- a/yarn-project/cli/src/cmds/get_contract_data.ts +++ b/yarn-project/cli/src/cmds/get_contract_data.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_logs.ts b/yarn-project/cli/src/cmds/get_logs.ts index 76c27c76726..29afb7bbc6f 100644 --- a/yarn-project/cli/src/cmds/get_logs.ts +++ b/yarn-project/cli/src/cmds/get_logs.ts @@ -1,6 +1,6 @@ -import { AztecAddress, LogFilter, LogId, TxHash } from '@aztec/aztec.js'; -import { EventSelector } from '@aztec/foundation/abi'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress, type LogFilter, type LogId, type TxHash } from '@aztec/aztec.js'; +import { type EventSelector } from '@aztec/foundation/abi'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { sleep } from '@aztec/foundation/sleep'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_node_info.ts b/yarn-project/cli/src/cmds/get_node_info.ts index b775c08aa0d..b66df822532 100644 --- a/yarn-project/cli/src/cmds/get_node_info.ts +++ b/yarn-project/cli/src/cmds/get_node_info.ts @@ -1,4 +1,4 @@ -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_recipient.ts b/yarn-project/cli/src/cmds/get_recipient.ts index 270bbad9ac2..4ae6baac896 100644 --- a/yarn-project/cli/src/cmds/get_recipient.ts +++ b/yarn-project/cli/src/cmds/get_recipient.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_recipients.ts b/yarn-project/cli/src/cmds/get_recipients.ts index 875b84b6038..bc091bc5dd6 100644 --- a/yarn-project/cli/src/cmds/get_recipients.ts +++ b/yarn-project/cli/src/cmds/get_recipients.ts @@ -1,4 +1,4 @@ -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/get_tx_receipt.ts b/yarn-project/cli/src/cmds/get_tx_receipt.ts index beaa53e2f9b..6119f035aac 100644 --- a/yarn-project/cli/src/cmds/get_tx_receipt.ts +++ b/yarn-project/cli/src/cmds/get_tx_receipt.ts @@ -1,6 +1,6 @@ -import { TxHash } from '@aztec/aztec.js'; +import { type TxHash } from '@aztec/aztec.js'; import { JsonStringify } from '@aztec/foundation/json-rpc'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/inspect_contract.ts b/yarn-project/cli/src/cmds/inspect_contract.ts index 4728de02fd0..00823d21895 100644 --- a/yarn-project/cli/src/cmds/inspect_contract.ts +++ b/yarn-project/cli/src/cmds/inspect_contract.ts @@ -1,12 +1,12 @@ import { getContractClassFromArtifact } from '@aztec/circuits.js'; import { - FunctionArtifact, + type FunctionArtifact, FunctionSelector, decodeFunctionSignature, decodeFunctionSignatureWithParameterNames, } from '@aztec/foundation/abi'; import { sha256 } from '@aztec/foundation/crypto'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { getContractArtifact } from '../utils.js'; diff --git a/yarn-project/cli/src/cmds/parse_parameter_struct.ts b/yarn-project/cli/src/cmds/parse_parameter_struct.ts index d8b29211d3a..15bc057ede9 100644 --- a/yarn-project/cli/src/cmds/parse_parameter_struct.ts +++ b/yarn-project/cli/src/cmds/parse_parameter_struct.ts @@ -1,6 +1,6 @@ -import { StructType } from '@aztec/foundation/abi'; +import { type StructType } from '@aztec/foundation/abi'; import { JsonStringify } from '@aztec/foundation/json-rpc'; -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { parseStructString } from '../encoding.js'; import { getContractArtifact } from '../utils.js'; diff --git a/yarn-project/cli/src/cmds/register_account.ts b/yarn-project/cli/src/cmds/register_account.ts index b6949cee4fa..cf5dc168cb9 100644 --- a/yarn-project/cli/src/cmds/register_account.ts +++ b/yarn-project/cli/src/cmds/register_account.ts @@ -1,5 +1,5 @@ -import { Fq, Fr } from '@aztec/foundation/fields'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type Fq, type Fr } from '@aztec/foundation/fields'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/register_recipient.ts b/yarn-project/cli/src/cmds/register_recipient.ts index 6458143c542..7e9cf877f04 100644 --- a/yarn-project/cli/src/cmds/register_recipient.ts +++ b/yarn-project/cli/src/cmds/register_recipient.ts @@ -1,6 +1,6 @@ -import { AztecAddress, Fr, Point } from '@aztec/aztec.js'; +import { type AztecAddress, type Fr, type Point } from '@aztec/aztec.js'; import { CompleteAddress } from '@aztec/circuit-types'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; diff --git a/yarn-project/cli/src/cmds/send.ts b/yarn-project/cli/src/cmds/send.ts index 8513fe1392e..c5195057e74 100644 --- a/yarn-project/cli/src/cmds/send.ts +++ b/yarn-project/cli/src/cmds/send.ts @@ -1,6 +1,6 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; -import { AztecAddress, Contract, Fq, Fr } from '@aztec/aztec.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type AztecAddress, Contract, type Fq, Fr } from '@aztec/aztec.js'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { createCompatibleClient } from '../client.js'; import { prepTx } from '../utils.js'; diff --git a/yarn-project/cli/src/encoding.ts b/yarn-project/cli/src/encoding.ts index e10f843814d..b06c9301b6e 100644 --- a/yarn-project/cli/src/encoding.ts +++ b/yarn-project/cli/src/encoding.ts @@ -1,4 +1,4 @@ -import { type ABIParameter, type AbiType, type StructType } from '@aztec/foundation/abi'; +import { type ABIParameter, type ABIType, type StructType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; /** @@ -29,7 +29,7 @@ export function parseStructString(str: string, abiType: StructType) { * @param abiType - The type as described by the contract's ABI. * @returns The encoded argument. */ -function encodeArg(arg: string, abiType: AbiType, name: string): any { +function encodeArg(arg: string, abiType: ABIType, name: string): any { const { kind } = abiType; if (kind === 'field' || kind === 'integer') { let res: bigint; diff --git a/yarn-project/cli/src/index.ts b/yarn-project/cli/src/index.ts index 16e5b15747a..13c56ba0001 100644 --- a/yarn-project/cli/src/index.ts +++ b/yarn-project/cli/src/index.ts @@ -1,5 +1,5 @@ import { Fr } from '@aztec/circuits.js'; -import { DebugLogger, LogFn } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { fileURLToPath } from '@aztec/foundation/url'; import { addCodegenCommanderAction } from '@aztec/noir-compiler/cli'; diff --git a/yarn-project/cli/src/test/mocks.ts b/yarn-project/cli/src/test/mocks.ts index 646b5a045c1..1ca54bbee68 100644 --- a/yarn-project/cli/src/test/mocks.ts +++ b/yarn-project/cli/src/test/mocks.ts @@ -1,4 +1,4 @@ -import { ABIParameterVisibility, ContractArtifact, FunctionType } from '@aztec/foundation/abi'; +import { ABIParameterVisibility, type ContractArtifact, FunctionType } from '@aztec/foundation/abi'; export const mockContractArtifact: ContractArtifact = { name: 'MockContract', @@ -65,9 +65,6 @@ export const mockContractArtifact: ContractArtifact = { debugSymbols: '', }, ], - outputs: { - structs: {}, - globals: {}, - }, + events: [], fileMap: {}, }; diff --git a/yarn-project/cli/src/test/utils.test.ts b/yarn-project/cli/src/test/utils.test.ts index e43d32d207a..56f3e109d91 100644 --- a/yarn-project/cli/src/test/utils.test.ts +++ b/yarn-project/cli/src/test/utils.test.ts @@ -1,8 +1,8 @@ import { AztecAddress, Fr } from '@aztec/aztec.js'; -import { CompleteAddress, PXE } from '@aztec/circuit-types'; +import { CompleteAddress, type PXE } from '@aztec/circuit-types'; import { InvalidArgumentError } from 'commander'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { encodeArgs } from '../encoding.js'; import { parseFieldFromHexString } from '../parse_args.js'; diff --git a/yarn-project/cli/src/update/noir.ts b/yarn-project/cli/src/update/noir.ts index 0864293f4da..b18c38284b6 100644 --- a/yarn-project/cli/src/update/noir.ts +++ b/yarn-project/cli/src/update/noir.ts @@ -1,4 +1,4 @@ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { parseNoirPackageConfig } from '@aztec/foundation/noir'; import TOML from '@iarna/toml'; @@ -6,7 +6,7 @@ import { readFile } from 'fs/promises'; import { join, relative, resolve } from 'path'; import { atomicUpdateFile, prettyPrintNargoToml } from '../utils.js'; -import { DependencyChanges } from './common.js'; +import { type DependencyChanges } from './common.js'; /** * Updates Aztec.nr dependencies diff --git a/yarn-project/cli/src/update/npm.ts b/yarn-project/cli/src/update/npm.ts index ae085e6dfe7..c18716ca474 100644 --- a/yarn-project/cli/src/update/npm.ts +++ b/yarn-project/cli/src/update/npm.ts @@ -1,13 +1,13 @@ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { spawnSync } from 'child_process'; import { existsSync } from 'fs'; import { readFile } from 'fs/promises'; import { join, relative, resolve } from 'path'; -import { SemVer, parse } from 'semver'; +import { type SemVer, parse } from 'semver'; import { atomicUpdateFile } from '../utils.js'; -import { DependencyChanges } from './common.js'; +import { type DependencyChanges } from './common.js'; const deprecatedNpmPackages = new Set(['@aztec/cli', '@aztec/aztec-sandbox']); const npmDeprecationMessage = ` diff --git a/yarn-project/cli/src/update/update.ts b/yarn-project/cli/src/update/update.ts index 5c946f9953d..e2bc90f7947 100644 --- a/yarn-project/cli/src/update/update.ts +++ b/yarn-project/cli/src/update/update.ts @@ -1,11 +1,11 @@ /* eslint-disable jsdoc/require-jsdoc */ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; import { relative, resolve } from 'path'; import { parse } from 'semver'; import { GITHUB_TAG_PREFIX } from '../github.js'; -import { DependencyChanges } from './common.js'; +import { type DependencyChanges } from './common.js'; import { updateAztecNr } from './noir.js'; import { getNewestVersion, updateAztecDeps, updateLockfile } from './npm.js'; diff --git a/yarn-project/end-to-end/Earthfile b/yarn-project/end-to-end/Earthfile index 439580212d2..e5ad686c60e 100644 --- a/yarn-project/end-to-end/Earthfile +++ b/yarn-project/end-to-end/Earthfile @@ -32,10 +32,10 @@ E2E_TEST_FROM_DOCKERHUB: ENV ENABLE_GAS=$enable_gas ENV TEST=$test ENV DEBUG="$debug" - # Locally, we do not use WITH DOCKER as we have had issues with earthly copying big images + # In CI we do not use WITH DOCKER as we have had issues with earthly copying big images RUN docker compose -f $compose_file up --exit-code-from=end-to-end --force-recreate -# run on satellite, used for our few ARM jobs (means github runner doesn't need to be ARM) +# run on satellite and build, used for our few ARM jobs (means github runner doesn't need to be ARM) E2E_TEST_FROM_BUILD: FUNCTION ARG test @@ -61,207 +61,209 @@ E2E_TEST: ARG test ARG compose_file=./scripts/docker-compose.yml ARG enable_gas="" - ARG e2e_build=false + ARG e2e_mode=local ARG debug="aztec:*" LOCALLY - IF [ $e2e_build = true ] - DO +E2E_TEST_FROM_BUILD --test=$test --compose_file=$compose_file --enable_gas=$enable_gas --debug=$debug - ELSE + IF [ $e2e_mode = local ] + DO +E2E_TEST_LOCAL --test=$test --compose_file=$compose_file --enable_gas=$enable_gas --debug=$debug + ELSE IF [ $e2e_mode = cache ] DO +E2E_TEST_FROM_DOCKERHUB --test=$test --compose_file=$compose_file --enable_gas=$enable_gas --debug=$debug + ELSE + DO +E2E_TEST_FROM_BUILD --test=$test --compose_file=$compose_file --enable_gas=$enable_gas --debug=$debug END # Define e2e tests e2e-2-pxes: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_2_pxes.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_2_pxes.test.ts --e2e_mode=$e2e_mode e2e-note-getter: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_note_getter.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_note_getter.test.ts --e2e_mode=$e2e_mode e2e-counter: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_counter_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_counter_contract.test.ts --e2e_mode=$e2e_mode e2e-private-voting: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_private_voting_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_private_voting_contract.test.ts --e2e_mode=$e2e_mode e2e-max-block-number: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_max_block_number.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_max_block_number.test.ts --e2e_mode=$e2e_mode e2e-multiple-accounts-1-enc-key: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_multiple_accounts_1_enc_key.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_multiple_accounts_1_enc_key.test.ts --e2e_mode=$e2e_mode e2e-deploy-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_deploy_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_deploy_contract.test.ts --e2e_mode=$e2e_mode e2e-lending-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_lending_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_lending_contract.test.ts --e2e_mode=$e2e_mode e2e-token-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_token_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_token_contract.test.ts --e2e_mode=$e2e_mode e2e-authwit-test: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_authwit.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_authwit.test.ts --e2e_mode=$e2e_mode e2e-blacklist-token-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_blacklist_token_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_blacklist_token_contract.test.ts --e2e_mode=$e2e_mode # TODO(3458): Investigate intermittent failure # e2e-slow-tree: # DO +E2E_TEST --test=e2e_slow_tree e2e-sandbox-example: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_sandbox_example.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_sandbox_example.test.ts --e2e_mode=$e2e_mode e2e-state-vars: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_state_vars.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_state_vars.test.ts --e2e_mode=$e2e_mode e2e-block-building: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_block_building.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_block_building.test.ts --e2e_mode=$e2e_mode e2e-nested-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_nested_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_nested_contract.test.ts --e2e_mode=$e2e_mode e2e-static-calls: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_static_calls.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_static_calls.test.ts --e2e_mode=$e2e_mode e2e-delegate-calls: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_delegate_calls.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_delegate_calls.test.ts --e2e_mode=$e2e_mode e2e-non-contract-account: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_non_contract_account.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_non_contract_account.test.ts --e2e_mode=$e2e_mode e2e-cross-chain-messaging: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_cross_chain_messaging.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_cross_chain_messaging.test.ts --e2e_mode=$e2e_mode e2e-crowdfunding-and-claim: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_crowdfunding_and_claim.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_crowdfunding_and_claim.test.ts --e2e_mode=$e2e_mode e2e-public-cross-chain-messaging: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_public_cross_chain_messaging.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_public_cross_chain_messaging.test.ts --e2e_mode=$e2e_mode e2e-public-to-private-messaging: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_public_to_private_messaging.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_public_to_private_messaging.test.ts --e2e_mode=$e2e_mode e2e-account-contracts: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_account_contracts.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_account_contracts.test.ts --e2e_mode=$e2e_mode e2e-escrow-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_escrow_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_escrow_contract.test.ts --e2e_mode=$e2e_mode e2e-inclusion-proofs-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_inclusion_proofs_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_inclusion_proofs_contract.test.ts --e2e_mode=$e2e_mode e2e-pending-note-hashes-contract: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_pending_note_hashes_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_pending_note_hashes_contract.test.ts --e2e_mode=$e2e_mode e2e-ordering: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_ordering.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_ordering.test.ts --e2e_mode=$e2e_mode e2e-outbox: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_outbox.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_outbox.test.ts --e2e_mode=$e2e_mode uniswap-trade-on-l1-from-l2: - ARG e2e_build=false - DO +E2E_TEST --test=uniswap_trade_on_l1_from_l2.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=uniswap_trade_on_l1_from_l2.test.ts --e2e_mode=$e2e_mode integration-l1-publisher: - ARG e2e_build=false - DO +E2E_TEST --test=integration_l1_publisher.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=integration_l1_publisher.test.ts --e2e_mode=$e2e_mode e2e-cli: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_cli.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_cli.test.ts --e2e_mode=$e2e_mode e2e-persistence: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_persistence.test.ts --compose_file=./scripts/docker-compose-no-sandbox.yml --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_persistence.test.ts --compose_file=./scripts/docker-compose-no-sandbox.yml --e2e_mode=$e2e_mode e2e-browser: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_aztec_js_browser.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_aztec_js_browser.test.ts --e2e_mode=$e2e_mode e2e-card-game: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_card_game.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_card_game.test.ts --e2e_mode=$e2e_mode e2e-avm-simulator: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_avm_simulator.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_avm_simulator.test.ts --e2e_mode=$e2e_mode e2e-fees: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_fees.test.ts --enable_gas=1 --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_fees.test.ts --enable_gas=1 --e2e_mode=$e2e_mode e2e-dapp-subscription: - ARG e2e_build=false - DO +E2E_TEST --test=e2e_dapp_subscription.test.ts --enable_gas=1 --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=e2e_dapp_subscription.test.ts --enable_gas=1 --e2e_mode=$e2e_mode pxe: - ARG e2e_build=false - DO +E2E_TEST --test=pxe.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=pxe.test.ts --e2e_mode=$e2e_mode cli-docs-sandbox: - ARG e2e_build=false - DO +E2E_TEST --test=cli_docs_sandbox.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=cli_docs_sandbox.test.ts --e2e_mode=$e2e_mode e2e-docs-examples: - ARG e2e_build=false - DO +E2E_TEST --test=docs_examples.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=docs_examples.test.ts --e2e_mode=$e2e_mode guides-writing-an-account-contract: - ARG e2e_build=false - DO +E2E_TEST --test=guides/writing_an_account_contract.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=guides/writing_an_account_contract.test.ts --e2e_mode=$e2e_mode guides-dapp-testing: - ARG e2e_build=false - DO +E2E_TEST --test=guides/dapp_testing.test.ts --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=guides/dapp_testing.test.ts --e2e_mode=$e2e_mode guides-sample-dapp: - ARG e2e_build=false - DO +E2E_TEST --test=sample-dapp --e2e_build=$e2e_build + ARG e2e_mode=local + DO +E2E_TEST --test=sample-dapp --e2e_mode=$e2e_mode # TODO currently hangs for hour+ # guides-up-quick-start: -# ARG e2e_build=false -# DO +E2E_TEST --test=guides/up_quick_start.test.ts --e2e_build=$e2e_build +# ARG e2e_mode=local +# DO +E2E_TEST --test=guides/up_quick_start.test.ts --e2e_mode=$e2e_mode bench-publish-rollup: - ARG e2e_build=false - DO +E2E_TEST --test=benchmarks/bench_publish_rollup.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_build=$e2e_build --compose_file=./scripts/docker-compose-no-sandbox.yml + ARG e2e_mode=local + DO +E2E_TEST --test=benchmarks/bench_publish_rollup.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_mode=$e2e_mode --compose_file=./scripts/docker-compose-no-sandbox.yml # TODO need to investigate why this isn't working # bench-process-history: -# ARG e2e_build=false -# DO +E2E_TEST --test=benchmarks/bench_process_history.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_build=$e2e_build --compose_file=./scripts/docker-compose-no-sandbox.yml +# ARG e2e_mode=local +# DO +E2E_TEST --test=benchmarks/bench_process_history.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_mode=$e2e_mode --compose_file=./scripts/docker-compose-no-sandbox.yml # TODO need to investigate why this isn't working # bench-tx-size: -# ARG e2e_build=false -# DO +E2E_TEST --test=benchmarks/bench_tx_size_fees.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_build=$e2e_build --compose_file=./scripts/docker-compose-no-sandbox.yml +# ARG e2e_mode=local +# DO +E2E_TEST --test=benchmarks/bench_tx_size_fees.test.ts --debug="aztec:benchmarks:*,aztec:sequencer,aztec:sequencer:*,aztec:world_state,aztec:merkle_trees" --e2e_mode=$e2e_mode --compose_file=./scripts/docker-compose-no-sandbox.yml diff --git a/yarn-project/end-to-end/src/benchmarks/bench_process_history.test.ts b/yarn-project/end-to-end/src/benchmarks/bench_process_history.test.ts index 8d0747cf27f..bc8fb1cfbb2 100644 --- a/yarn-project/end-to-end/src/benchmarks/bench_process_history.test.ts +++ b/yarn-project/end-to-end/src/benchmarks/bench_process_history.test.ts @@ -1,14 +1,14 @@ -import { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node'; +import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node'; import { AztecAddress, Fr, GrumpkinScalar, INITIAL_L2_BLOCK_NUM, elapsed, sleep } from '@aztec/aztec.js'; import { BENCHMARK_HISTORY_BLOCK_SIZE, BENCHMARK_HISTORY_CHAIN_LENGTHS, - NodeSyncedChainHistoryStats, + type NodeSyncedChainHistoryStats, } from '@aztec/circuit-types/stats'; -import { BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking'; -import { SequencerClient } from '@aztec/sequencer-client'; +import { type BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking'; +import { type SequencerClient } from '@aztec/sequencer-client'; -import { EndToEndContext } from '../fixtures/utils.js'; +import { type EndToEndContext } from '../fixtures/utils.js'; import { benchmarkSetup, getFolderSize, diff --git a/yarn-project/end-to-end/src/benchmarks/bench_publish_rollup.test.ts b/yarn-project/end-to-end/src/benchmarks/bench_publish_rollup.test.ts index fea4012690b..fbbdcf49f58 100644 --- a/yarn-project/end-to-end/src/benchmarks/bench_publish_rollup.test.ts +++ b/yarn-project/end-to-end/src/benchmarks/bench_publish_rollup.test.ts @@ -1,10 +1,10 @@ import { AztecNodeService } from '@aztec/aztec-node'; import { AztecAddress, Fr, GrumpkinScalar } from '@aztec/aztec.js'; import { BENCHMARK_BLOCK_SIZES } from '@aztec/circuit-types/stats'; -import { BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking'; -import { SequencerClient } from '@aztec/sequencer-client'; +import { type BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking'; +import { type SequencerClient } from '@aztec/sequencer-client'; -import { EndToEndContext } from '../fixtures/utils.js'; +import { type EndToEndContext } from '../fixtures/utils.js'; import { benchmarkSetup, sendTxs, waitNewPXESynced, waitRegisteredAccountSynced } from './utils.js'; describe('benchmarks/publish_rollup', () => { diff --git a/yarn-project/end-to-end/src/benchmarks/bench_tx_size_fees.test.ts b/yarn-project/end-to-end/src/benchmarks/bench_tx_size_fees.test.ts index bfc94261072..a786e4d263a 100644 --- a/yarn-project/end-to-end/src/benchmarks/bench_tx_size_fees.test.ts +++ b/yarn-project/end-to-end/src/benchmarks/bench_tx_size_fees.test.ts @@ -1,7 +1,7 @@ import { - AccountWalletWithPrivateKey, - AztecAddress, - FeePaymentMethod, + type AccountWalletWithPrivateKey, + type AztecAddress, + type FeePaymentMethod, NativeFeePaymentMethod, PrivateFeePaymentMethod, PublicFeePaymentMethod, @@ -13,7 +13,7 @@ import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token import { jest } from '@jest/globals'; -import { EndToEndContext, publicDeployAccounts, setup } from '../fixtures/utils.js'; +import { type EndToEndContext, publicDeployAccounts, setup } from '../fixtures/utils.js'; jest.setTimeout(50_000); diff --git a/yarn-project/end-to-end/src/benchmarks/utils.ts b/yarn-project/end-to-end/src/benchmarks/utils.ts index c5233f817c6..4f2cc4362da 100644 --- a/yarn-project/end-to-end/src/benchmarks/utils.ts +++ b/yarn-project/end-to-end/src/benchmarks/utils.ts @@ -1,25 +1,25 @@ -import { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node'; +import { type AztecNodeConfig, type AztecNodeService } from '@aztec/aztec-node'; import { - AztecNode, + type AztecNode, BatchCall, - GrumpkinScalar, + type GrumpkinScalar, INITIAL_L2_BLOCK_NUM, - PXE, - PartialAddress, - SentTx, + type PXE, + type PartialAddress, + type SentTx, retryUntil, sleep, } from '@aztec/aztec.js'; import { times } from '@aztec/foundation/collection'; import { randomInt } from '@aztec/foundation/crypto'; import { BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking'; -import { PXEService, createPXEService } from '@aztec/pxe'; +import { type PXEService, createPXEService } from '@aztec/pxe'; import { mkdirpSync } from 'fs-extra'; import { globSync } from 'glob'; import { join } from 'path'; -import { EndToEndContext, setup } from '../fixtures/utils.js'; +import { type EndToEndContext, setup } from '../fixtures/utils.js'; /** * Setup for benchmarks. Initializes a remote node with a single account and deploys a benchmark contract. diff --git a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts index 57f4096e3de..2091acb648a 100644 --- a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts +++ b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts @@ -1,15 +1,15 @@ import { getUnsafeSchnorrAccount } from '@aztec/accounts/single_key'; import { - AztecAddress, - AztecNode, - CompleteAddress, - DebugLogger, + type AztecAddress, + type AztecNode, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, GrumpkinScalar, Note, - PXE, - Wallet, + type PXE, + type Wallet, computeMessageSecretHash, retryUntil, } from '@aztec/aztec.js'; @@ -106,15 +106,11 @@ describe('e2e_2_pxes', () => { const receipt = await contract.methods.mint_private(balance, secretHash).send().wait(); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(balance), secretHash]); - const extendedNote = new ExtendedNote( - note, - recipient, - contract.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - receipt.txHash, - ); + const extendedNote = new ExtendedNote(note, recipient, contract.address, storageSlot, noteTypeId, receipt.txHash); await pxe.addNote(extendedNote); await contract.methods.redeem_shield(recipient, balance, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts index 17cdc2d6b94..fc266a36a24 100644 --- a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts +++ b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts @@ -2,15 +2,15 @@ import { EcdsaAccountContract } from '@aztec/accounts/ecdsa'; import { SchnorrAccountContract } from '@aztec/accounts/schnorr'; import { SingleKeyAccountContract } from '@aztec/accounts/single_key'; import { - AccountContract, + type AccountContract, AccountManager, AccountWallet, - CompleteAddress, + type CompleteAddress, Fr, - GrumpkinPrivateKey, + type GrumpkinPrivateKey, GrumpkinScalar, - PXE, - Wallet, + type PXE, + type Wallet, } from '@aztec/aztec.js'; import { randomBytes } from '@aztec/foundation/crypto'; import { ChildContract } from '@aztec/noir-contracts.js/Child'; diff --git a/yarn-project/end-to-end/src/e2e_authwit.test.ts b/yarn-project/end-to-end/src/e2e_authwit.test.ts index 09e4acf53fe..44fb5e83da2 100644 --- a/yarn-project/end-to-end/src/e2e_authwit.test.ts +++ b/yarn-project/end-to-end/src/e2e_authwit.test.ts @@ -1,4 +1,10 @@ -import { AccountWallet, CompleteAddress, Fr, computeInnerAuthWitHash, computeOuterAuthWitHash } from '@aztec/aztec.js'; +import { + type AccountWallet, + type CompleteAddress, + Fr, + computeInnerAuthWitHash, + computeOuterAuthWitHash, +} from '@aztec/aztec.js'; import { SchnorrAccountContract } from '@aztec/noir-contracts.js'; import { jest } from '@jest/globals'; diff --git a/yarn-project/end-to-end/src/e2e_avm_simulator.test.ts b/yarn-project/end-to-end/src/e2e_avm_simulator.test.ts index 257f7b2109b..a9c2df4e411 100644 --- a/yarn-project/end-to-end/src/e2e_avm_simulator.test.ts +++ b/yarn-project/end-to-end/src/e2e_avm_simulator.test.ts @@ -1,4 +1,4 @@ -import { AztecAddress, Wallet } from '@aztec/aztec.js'; +import { AztecAddress, type Wallet } from '@aztec/aztec.js'; import { AvmTestContract } from '@aztec/noir-contracts.js'; import { jest } from '@jest/globals'; diff --git a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts index 9ceeb29ea72..622fb312b72 100644 --- a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts @@ -1,21 +1,21 @@ import { - AccountWallet, + type AccountWallet, AztecAddress, - CheatCodes, - CompleteAddress, - DebugLogger, + type CheatCodes, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, FunctionSelector, Note, - TxHash, - Wallet, + type TxHash, + type Wallet, computeAuthWitMessageHash, computeMessageSecretHash, } from '@aztec/aztec.js'; import { openTmpStore } from '@aztec/kv-store/utils'; import { Pedersen, SparseTree, newTree } from '@aztec/merkle-tree'; -import { SlowTreeContract, TokenBlacklistContract, TokenContract } from '@aztec/noir-contracts.js'; +import { SlowTreeContract, TokenBlacklistContract, type TokenContract } from '@aztec/noir-contracts.js'; import { jest } from '@jest/globals'; @@ -87,13 +87,15 @@ describe('e2e_blacklist_token_contract', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { + const storageSlot = new Fr(4); // The storage slot of `pending_shields` is 4. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - TokenBlacklistContract.storage.pending_shields.slot, - TokenBlacklistContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_block_building.test.ts b/yarn-project/end-to-end/src/e2e_block_building.test.ts index ee3ef443975..bbc877c7557 100644 --- a/yarn-project/end-to-end/src/e2e_block_building.test.ts +++ b/yarn-project/end-to-end/src/e2e_block_building.test.ts @@ -1,16 +1,16 @@ import { - AztecAddress, - AztecNode, + type AztecAddress, + type AztecNode, BatchCall, ContractDeployer, ContractFunctionInteraction, - DebugLogger, + type DebugLogger, Fr, - PXE, - SentTx, - TxReceipt, + type PXE, + type SentTx, + type TxReceipt, TxStatus, - Wallet, + type Wallet, } from '@aztec/aztec.js'; import { times } from '@aztec/foundation/collection'; import { pedersenHash } from '@aztec/foundation/crypto'; diff --git a/yarn-project/end-to-end/src/e2e_card_game.test.ts b/yarn-project/end-to-end/src/e2e_card_game.test.ts index d1045714fbc..e92f0988880 100644 --- a/yarn-project/end-to-end/src/e2e_card_game.test.ts +++ b/yarn-project/end-to-end/src/e2e_card_game.test.ts @@ -1,12 +1,12 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; import { INITIAL_TEST_ENCRYPTION_KEYS } from '@aztec/accounts/testing'; import { - AccountWallet, + type AccountWallet, AztecAddress, - DebugLogger, + type DebugLogger, GrumpkinScalar, - PXE, - Wallet, + type PXE, + type Wallet, generatePublicKey, } from '@aztec/aztec.js'; import { computeNullifierSecretKey, computeSiloedNullifierSecretKey } from '@aztec/circuits.js'; diff --git a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts index 4687a0dca22..f6f5568ec1c 100644 --- a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts +++ b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts @@ -1,18 +1,27 @@ import { - CheatCodes, - CompleteAddress, + type CheatCodes, + type CompleteAddress, EthAddress, ExtendedNote, Fr, Note, - PXE, - Wallet, + type PXE, + type Wallet, computeMessageSecretHash, } from '@aztec/aztec.js'; import { RollupAbi } from '@aztec/l1-artifacts'; import { TestContract, TokenContract } from '@aztec/noir-contracts.js'; -import { Account, Chain, HttpTransport, PublicClient, WalletClient, getAddress, getContract, parseEther } from 'viem'; +import { + type Account, + type Chain, + type HttpTransport, + type PublicClient, + type WalletClient, + getAddress, + getContract, + parseEther, +} from 'viem'; import { setup } from './fixtures/utils.js'; @@ -215,23 +224,21 @@ describe('e2e_cheat_codes', () => { // docs:start:pxe_add_note const note = new Note([new Fr(mintAmount), secretHash]); + const pendingShieldStorageSlot = new Fr(5n); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const extendedNote = new ExtendedNote( note, admin.address, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + pendingShieldStorageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); // docs:end:pxe_add_note // check if note was added to pending shield: - const notes = await cc.aztec.loadPrivate( - admin.address, - token.address, - TokenContract.storage.pending_shields.slot, - ); + const notes = await cc.aztec.loadPrivate(admin.address, token.address, pendingShieldStorageSlot); const values = notes.map(note => note.items[0]); const balance = values.reduce((sum, current) => sum + current.toBigInt(), 0n); expect(balance).toEqual(mintAmount); diff --git a/yarn-project/end-to-end/src/e2e_cli.test.ts b/yarn-project/end-to-end/src/e2e_cli.test.ts index 7fd0884a091..1edf7050eba 100644 --- a/yarn-project/end-to-end/src/e2e_cli.test.ts +++ b/yarn-project/end-to-end/src/e2e_cli.test.ts @@ -1,4 +1,4 @@ -import { PXE, createDebugLogger } from '@aztec/aztec.js'; +import { type PXE, createDebugLogger } from '@aztec/aztec.js'; import { startHttpRpcServer } from '@aztec/foundation/json-rpc/server'; import { createPXERpcServer } from '@aztec/pxe'; diff --git a/yarn-project/end-to-end/src/e2e_counter_contract.test.ts b/yarn-project/end-to-end/src/e2e_counter_contract.test.ts index 35089984643..7677db89e44 100644 --- a/yarn-project/end-to-end/src/e2e_counter_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_counter_contract.test.ts @@ -1,4 +1,4 @@ -import { AccountWallet, AztecAddress, CompleteAddress, DebugLogger } from '@aztec/aztec.js'; +import { type AccountWallet, type AztecAddress, type CompleteAddress, type DebugLogger } from '@aztec/aztec.js'; import { CounterContract } from '@aztec/noir-contracts.js/Counter'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts index c66eb8e272d..e6f45ed8df5 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging.test.ts @@ -1,8 +1,8 @@ import { - AccountWallet, - AztecAddress, - AztecNode, - DebugLogger, + type AccountWallet, + type AztecAddress, + type AztecNode, + type DebugLogger, EthAddress, Fr, L1Actor, @@ -11,7 +11,7 @@ import { computeAuthWitMessageHash, } from '@aztec/aztec.js'; import { sha256ToField } from '@aztec/foundation/crypto'; -import { TokenBridgeContract, TokenContract } from '@aztec/noir-contracts.js'; +import { type TokenBridgeContract, type TokenContract } from '@aztec/noir-contracts.js'; import { toFunctionSelector } from 'viem/utils'; diff --git a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts index 0a8095a4e95..1556d2b40ce 100644 --- a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts +++ b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts @@ -1,14 +1,14 @@ import { - AccountWallet, - AztecAddress, - CheatCodes, - DebugLogger, + type AccountWallet, + type AztecAddress, + type CheatCodes, + type DebugLogger, ExtendedNote, Fr, GrumpkinScalar, Note, - PXE, - TxHash, + type PXE, + type TxHash, computeMessageSecretHash, generatePublicKey, } from '@aztec/aztec.js'; @@ -64,15 +64,10 @@ describe('e2e_crowdfunding_and_claim', () => { txHash: TxHash, address: AztecAddress, ) => { + const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote( - note, - wallet.getAddress(), - address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - txHash, - ); + const extendedNote = new ExtendedNote(note, wallet.getAddress(), address, storageSlot, noteTypeId, txHash); await wallet.addNote(extendedNote); }; diff --git a/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts b/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts index 6691c283cfa..f499b49d88d 100644 --- a/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts +++ b/yarn-project/end-to-end/src/e2e_dapp_subscription.test.ts @@ -1,7 +1,7 @@ import { - AccountWalletWithPrivateKey, - AztecAddress, - FeePaymentMethod, + type AccountWalletWithPrivateKey, + type AztecAddress, + type FeePaymentMethod, Fr, PrivateFeePaymentMethod, PublicFeePaymentMethod, @@ -21,8 +21,8 @@ import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token import { jest } from '@jest/globals'; import { - BalancesFn, - EndToEndContext, + type BalancesFn, + type EndToEndContext, expectMapping, getBalancesFn, publicDeployAccounts, diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts index 4243aa9f164..45fb4a22e1d 100644 --- a/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts +++ b/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts @@ -1,4 +1,4 @@ -import { Wallet } from '@aztec/aztec.js'; +import { type Wallet } from '@aztec/aztec.js'; import { DelegatedOnContract, DelegatorContract } from '@aztec/noir-contracts.js'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_deploy_contract.test.ts b/yarn-project/end-to-end/src/e2e_deploy_contract.test.ts index 1747dc22ec6..efccbdd034c 100644 --- a/yarn-project/end-to-end/src/e2e_deploy_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_deploy_contract.test.ts @@ -1,20 +1,20 @@ import { AztecAddress, - AztecNode, + type AztecNode, BatchCall, CompleteAddress, - ContractArtifact, - ContractBase, - ContractClassWithId, + type ContractArtifact, + type ContractBase, + type ContractClassWithId, ContractDeployer, - ContractInstanceWithAddress, - DebugLogger, + type ContractInstanceWithAddress, + type DebugLogger, EthAddress, Fr, - PXE, + type PXE, SignerlessWallet, TxStatus, - Wallet, + type Wallet, getContractClassFromArtifact, getContractInstanceFromDeployParams, } from '@aztec/aztec.js'; @@ -24,14 +24,14 @@ import { deployInstance, registerContractClass, } from '@aztec/aztec.js/deployment'; -import { ContractClassIdPreimage, Point } from '@aztec/circuits.js'; +import { type ContractClassIdPreimage, Point } from '@aztec/circuits.js'; import { siloNullifier } from '@aztec/circuits.js/hash'; import { FunctionSelector, FunctionType } from '@aztec/foundation/abi'; import { writeTestData } from '@aztec/foundation/testing'; import { CounterContract, StatefulTestContract } from '@aztec/noir-contracts.js'; import { TestContract, TestContractArtifact } from '@aztec/noir-contracts.js/Test'; import { TokenContract, TokenContractArtifact } from '@aztec/noir-contracts.js/Token'; -import { SequencerClient } from '@aztec/sequencer-client'; +import { type SequencerClient } from '@aztec/sequencer-client'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts index fbaf17d86f4..90a6e59a747 100644 --- a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts @@ -1,16 +1,16 @@ import { - AccountWallet, - AztecAddress, + type AccountWallet, + type AztecAddress, BatchCall, - CompleteAddress, - DebugLogger, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, - GrumpkinPrivateKey, + type GrumpkinPrivateKey, GrumpkinScalar, Note, - PXE, - PublicKey, + type PXE, + type PublicKey, computeMessageSecretHash, generatePublicKey, } from '@aztec/aztec.js'; @@ -21,6 +21,9 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { setup } from './fixtures/utils.js'; describe('e2e_escrow_contract', () => { + const pendingShieldsStorageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + let pxe: PXE; let wallet: AccountWallet; let recipientWallet: AccountWallet; @@ -73,8 +76,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + pendingShieldsStorageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -124,8 +127,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + pendingShieldsStorageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_fees.test.ts b/yarn-project/end-to-end/src/e2e_fees.test.ts index 777115e380b..3b11f865776 100644 --- a/yarn-project/end-to-end/src/e2e_fees.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees.test.ts @@ -1,22 +1,22 @@ import { - AztecAddress, + type AztecAddress, BatchCall, - DebugLogger, + type DebugLogger, ExtendedNote, Fr, - FunctionCall, + type FunctionCall, FunctionSelector, Note, PrivateFeePaymentMethod, PublicFeePaymentMethod, - TxHash, + type TxHash, TxStatus, - Wallet, + type Wallet, computeAuthWitMessageHash, computeMessageSecretHash, } from '@aztec/aztec.js'; import { FunctionData, getContractClassFromArtifact } from '@aztec/circuits.js'; -import { ContractArtifact, decodeFunctionSignature } from '@aztec/foundation/abi'; +import { type ContractArtifact, decodeFunctionSignature } from '@aztec/foundation/abi'; import { TokenContract as BananaCoin, FPCContract, @@ -27,14 +27,14 @@ import { import { jest } from '@jest/globals'; import { - BalancesFn, - EndToEndContext, + type BalancesFn, + type EndToEndContext, expectMapping, getBalancesFn, publicDeployAccounts, setup, } from './fixtures/utils.js'; -import { GasPortalTestingHarnessFactory, IGasBridgingTestHarness } from './shared/gas_portal_test_harness.js'; +import { GasPortalTestingHarnessFactory, type IGasBridgingTestHarness } from './shared/gas_portal_test_harness.js'; const TOKEN_NAME = 'BananaCoin'; const TOKEN_SYMBOL = 'BC'; @@ -671,13 +671,16 @@ describe('e2e_fees', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { + const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, e2eContext.accounts[accountIndex].address, bananaCoin.address, - BananaCoin.storage.pending_shields.slot, - BananaCoin.notes.TransparentNote.id, + storageSlot, + noteTypeId, txHash, ); await e2eContext.wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_inclusion_proofs_contract.test.ts b/yarn-project/end-to-end/src/e2e_inclusion_proofs_contract.test.ts index 28b4d035101..21498916e4f 100644 --- a/yarn-project/end-to-end/src/e2e_inclusion_proofs_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_inclusion_proofs_contract.test.ts @@ -1,10 +1,10 @@ import { - AccountWallet, + type AccountWallet, AztecAddress, - CompleteAddress, + type CompleteAddress, Fr, INITIAL_L2_BLOCK_NUM, - PXE, + type PXE, getContractInstanceFromDeployParams, } from '@aztec/aztec.js'; import { deployInstance, registerContractClass } from '@aztec/aztec.js/deployment'; diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index 3a310d60d92..8a5ce3cd3fd 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -1,8 +1,8 @@ import { - AccountWallet, - CheatCodes, - CompleteAddress, - DebugLogger, + type AccountWallet, + type CheatCodes, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, Note, @@ -103,14 +103,17 @@ describe('e2e_lending_contract', () => { const b = asset.methods.mint_private(mintAmount, secretHash).send(); await Promise.all([a, b].map(tx => tx.wait())); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(mintAmount), secretHash]); const txHash = await b.getTxHash(); const extendedNote = new ExtendedNote( note, accounts[0].address, asset.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_max_block_number.test.ts b/yarn-project/end-to-end/src/e2e_max_block_number.test.ts index c54dab89ca0..0b8307f1fb4 100644 --- a/yarn-project/end-to-end/src/e2e_max_block_number.test.ts +++ b/yarn-project/end-to-end/src/e2e_max_block_number.test.ts @@ -1,4 +1,4 @@ -import { PXE, Wallet } from '@aztec/aztec.js'; +import { type PXE, type Wallet } from '@aztec/aztec.js'; import { TestContract } from '@aztec/noir-contracts.js'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index 653d50ea291..921cb5c321b 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -1,15 +1,15 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; import { - AztecAddress, - AztecNode, - CompleteAddress, - DebugLogger, + type AztecAddress, + type AztecNode, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, GrumpkinScalar, Note, - PXE, - Wallet, + type PXE, + type Wallet, computeMessageSecretHash, generatePublicKey, } from '@aztec/aztec.js'; @@ -63,13 +63,16 @@ describe('e2e_multiple_accounts_1_enc_key', () => { const receipt = await token.methods.mint_private(initialBalance, secretHash).send().wait(); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(initialBalance), secretHash]); const extendedNote = new ExtendedNote( note, accounts[0].address, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts index 95273d16961..919b775099f 100644 --- a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts @@ -1,4 +1,4 @@ -import { AztecAddress, BatchCall, DebugLogger, Fr, PXE, Wallet, toBigIntBE } from '@aztec/aztec.js'; +import { type AztecAddress, BatchCall, type DebugLogger, Fr, type PXE, type Wallet, toBigIntBE } from '@aztec/aztec.js'; import { getTestData, isGenerateTestDataEnabled } from '@aztec/foundation/testing'; import { ChildContract, ImportTestContract, ParentContract, TestContract } from '@aztec/noir-contracts.js'; diff --git a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts index 41baec211ec..cc9fb6f70b7 100644 --- a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts +++ b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts @@ -1,4 +1,13 @@ -import { DebugLogger, ExtendedNote, Fr, Note, PXE, SignerlessWallet, Wallet, toBigInt } from '@aztec/aztec.js'; +import { + type DebugLogger, + ExtendedNote, + Fr, + Note, + type PXE, + SignerlessWallet, + type Wallet, + toBigInt, +} from '@aztec/aztec.js'; import { siloNullifier } from '@aztec/circuits.js/hash'; import { TestContract } from '@aztec/noir-contracts.js/Test'; @@ -71,13 +80,15 @@ describe('e2e_non_contract_account', () => { // Add the note const note = new Note([new Fr(value)]); + const storageSlot = new Fr(1); + const noteTypeId = new Fr(7010510110810078111116101n); // FieldNote const extendedNote = new ExtendedNote( note, wallet.getCompleteAddress().address, contract.address, - TestContract.storage.example_constant.slot, - TestContract.notes.FieldNote.id, + storageSlot, + noteTypeId, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_note_getter.test.ts b/yarn-project/end-to-end/src/e2e_note_getter.test.ts index b301abd7383..48320d81ac9 100644 --- a/yarn-project/end-to-end/src/e2e_note_getter.test.ts +++ b/yarn-project/end-to-end/src/e2e_note_getter.test.ts @@ -1,4 +1,4 @@ -import { AztecAddress, Comparator, Fr, Wallet, toBigInt } from '@aztec/aztec.js'; +import { type AztecAddress, Comparator, Fr, type Wallet, toBigInt } from '@aztec/aztec.js'; import { DocsExampleContract, TestContract } from '@aztec/noir-contracts.js'; import { setup } from './fixtures/utils.js'; @@ -159,7 +159,7 @@ describe('e2e_note_getter', () => { const VALUE = 5; // To prevent tests from interacting with one another, we'll have each use a different storage slot. - let storageSlot = TestContract.storage.example_set.slot.toNumber(); + let storageSlot: number = 2; beforeEach(() => { storageSlot += 1; diff --git a/yarn-project/end-to-end/src/e2e_ordering.test.ts b/yarn-project/end-to-end/src/e2e_ordering.test.ts index 1afe8e60b57..e05f09b1d21 100644 --- a/yarn-project/end-to-end/src/e2e_ordering.test.ts +++ b/yarn-project/end-to-end/src/e2e_ordering.test.ts @@ -1,5 +1,5 @@ // Test suite for testing proper ordering of side effects -import { Fr, FunctionSelector, PXE, Wallet, toBigIntBE } from '@aztec/aztec.js'; +import { Fr, type FunctionSelector, type PXE, type Wallet, toBigIntBE } from '@aztec/aztec.js'; import { ChildContract } from '@aztec/noir-contracts.js/Child'; import { ParentContract } from '@aztec/noir-contracts.js/Parent'; diff --git a/yarn-project/end-to-end/src/e2e_outbox.test.ts b/yarn-project/end-to-end/src/e2e_outbox.test.ts index de98030e952..2158f292164 100644 --- a/yarn-project/end-to-end/src/e2e_outbox.test.ts +++ b/yarn-project/end-to-end/src/e2e_outbox.test.ts @@ -1,11 +1,11 @@ import { - AccountWalletWithPrivateKey, - AztecNode, + type AccountWalletWithPrivateKey, + type AztecNode, BatchCall, - DeployL1Contracts, + type DeployL1Contracts, EthAddress, Fr, - SiblingPath, + type SiblingPath, } from '@aztec/aztec.js'; import { sha256ToField } from '@aztec/foundation/crypto'; import { truncateAndPad } from '@aztec/foundation/serialize'; diff --git a/yarn-project/end-to-end/src/e2e_p2p_network.test.ts b/yarn-project/end-to-end/src/e2e_p2p_network.test.ts index 618986c2ab1..3f7cc1c469e 100644 --- a/yarn-project/end-to-end/src/e2e_p2p_network.test.ts +++ b/yarn-project/end-to-end/src/e2e_p2p_network.test.ts @@ -1,17 +1,17 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; -import { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node'; +import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node'; import { - AztecAddress, + type AztecAddress, CompleteAddress, - DebugLogger, + type DebugLogger, Fr, Grumpkin, GrumpkinScalar, - SentTx, + type SentTx, TxStatus, } from '@aztec/aztec.js'; -import { BootstrapNode, P2PConfig, createLibP2PPeerId } from '@aztec/p2p'; -import { ConstantKeyPair, PXEService, createPXEService, getPXEServiceConfig as getRpcConfig } from '@aztec/pxe'; +import { BootstrapNode, type P2PConfig, createLibP2PPeerId } from '@aztec/p2p'; +import { ConstantKeyPair, type PXEService, createPXEService, getPXEServiceConfig as getRpcConfig } from '@aztec/pxe'; import { mnemonicToAccount } from 'viem/accounts'; diff --git a/yarn-project/end-to-end/src/e2e_pending_note_hashes_contract.test.ts b/yarn-project/end-to-end/src/e2e_pending_note_hashes_contract.test.ts index 1e30daec290..5cf47cd3f53 100644 --- a/yarn-project/end-to-end/src/e2e_pending_note_hashes_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_pending_note_hashes_contract.test.ts @@ -1,4 +1,11 @@ -import { AztecAddress, AztecNode, CompleteAddress, DebugLogger, Fr, Wallet } from '@aztec/aztec.js'; +import { + type AztecAddress, + type AztecNode, + type CompleteAddress, + type DebugLogger, + Fr, + type Wallet, +} from '@aztec/aztec.js'; import { PendingNoteHashesContract } from '@aztec/noir-contracts.js/PendingNoteHashes'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_persistence.test.ts b/yarn-project/end-to-end/src/e2e_persistence.test.ts index ea681c9900c..a4a6d216181 100644 --- a/yarn-project/end-to-end/src/e2e_persistence.test.ts +++ b/yarn-project/end-to-end/src/e2e_persistence.test.ts @@ -1,16 +1,16 @@ import { getUnsafeSchnorrAccount, getUnsafeSchnorrWallet } from '@aztec/accounts/single_key'; import { - AccountWallet, - ContractInstanceWithAddress, + type AccountWallet, + type ContractInstanceWithAddress, ExtendedNote, Note, - TxHash, + type TxHash, computeMessageSecretHash, waitForAccountSynch, } from '@aztec/aztec.js'; -import { Salt } from '@aztec/aztec.js/account'; -import { AztecAddress, CompleteAddress, Fq, Fr } from '@aztec/circuits.js'; -import { DeployL1Contracts } from '@aztec/ethereum'; +import { type Salt } from '@aztec/aztec.js/account'; +import { type AztecAddress, type CompleteAddress, Fq, Fr } from '@aztec/circuits.js'; +import { type DeployL1Contracts } from '@aztec/ethereum'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { jest } from '@jest/globals'; @@ -18,7 +18,7 @@ import { mkdtemp } from 'fs/promises'; import { tmpdir } from 'os'; import { join } from 'path'; -import { EndToEndContext, setup } from './fixtures/utils.js'; +import { type EndToEndContext, setup } from './fixtures/utils.js'; jest.setTimeout(60_000); @@ -330,14 +330,12 @@ async function addPendingShieldNoteToPXE( secretHash: Fr, txHash: TxHash, ) { + // The storage slot of `pending_shields` is 5. + // TODO AlexG, this feels brittle + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote( - note, - wallet.getAddress(), - asset, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - txHash, - ); + const extendedNote = new ExtendedNote(note, wallet.getAddress(), asset, storageSlot, noteTypeId, txHash); await wallet.addNote(extendedNote); } diff --git a/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts b/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts index caee9c6866b..4602383f09a 100644 --- a/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_private_voting_contract.test.ts @@ -1,4 +1,4 @@ -import { AccountWallet, AztecAddress, CompleteAddress, DebugLogger, Fr } from '@aztec/aztec.js'; +import { type AccountWallet, type AztecAddress, type CompleteAddress, type DebugLogger, Fr } from '@aztec/aztec.js'; import { EasyPrivateVotingContract } from '@aztec/noir-contracts.js/EasyPrivateVoting'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging.test.ts b/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging.test.ts index c5d0faa343f..58a8872db78 100644 --- a/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging.test.ts +++ b/yarn-project/end-to-end/src/e2e_public_cross_chain_messaging.test.ts @@ -1,26 +1,26 @@ import { - AccountWallet, - AztecAddress, - AztecNode, - CompleteAddress, - DebugLogger, - DeployL1Contracts, + type AccountWallet, + type AztecAddress, + type AztecNode, + type CompleteAddress, + type DebugLogger, + type DeployL1Contracts, EthAddress, Fr, L1Actor, L1ToL2Message, L2Actor, - PXE, + type PXE, computeAuthWitMessageHash, computeMessageSecretHash, } from '@aztec/aztec.js'; import { sha256ToField } from '@aztec/foundation/crypto'; import { InboxAbi, OutboxAbi } from '@aztec/l1-artifacts'; import { TestContract } from '@aztec/noir-contracts.js'; -import { TokenContract } from '@aztec/noir-contracts.js/Token'; -import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge'; +import { type TokenContract } from '@aztec/noir-contracts.js/Token'; +import { type TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge'; -import { Chain, GetContractReturnType, Hex, HttpTransport, PublicClient } from 'viem'; +import { type Chain, type GetContractReturnType, type Hex, type HttpTransport, type PublicClient } from 'viem'; import { decodeEventLog, toFunctionSelector } from 'viem/utils'; import { publicDeployAccounts, setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts b/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts index 0b67d07c67d..cd2eaccf915 100644 --- a/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts +++ b/yarn-project/end-to-end/src/e2e_public_to_private_messaging.test.ts @@ -1,4 +1,4 @@ -import { AztecAddress, DebugLogger, EthAddress } from '@aztec/aztec.js'; +import { type AztecAddress, type DebugLogger, type EthAddress } from '@aztec/aztec.js'; import { setup } from './fixtures/utils.js'; import { CrossChainTestHarness } from './shared/cross_chain_test_harness.js'; diff --git a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts index 7a25b8c3e7c..389a8f2b58e 100644 --- a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts +++ b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts @@ -6,7 +6,7 @@ import { Fr, GrumpkinScalar, Note, - PXE, + type PXE, computeMessageSecretHash, createDebugLogger, createPXEClient, @@ -76,16 +76,12 @@ describe('e2e_sandbox_example', () => { const receipt = await tokenContractAlice.methods.mint_private(initialSupply, aliceSecretHash).send().wait(); // Add the newly created "pending shield" note to PXE + const pendingShieldsStorageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(initialSupply), aliceSecretHash]); await pxe.addNote( - new ExtendedNote( - note, - alice, - contract.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - receipt.txHash, - ), + new ExtendedNote(note, alice, contract.address, pendingShieldsStorageSlot, noteTypeId, receipt.txHash), ); // Make the tokens spendable by redeeming them using the secret (converts the "pending shield note" created above @@ -157,8 +153,8 @@ describe('e2e_sandbox_example', () => { bobPendingShield, bob, contract.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + pendingShieldsStorageSlot, + noteTypeId, mintPrivateReceipt.txHash, ), ); diff --git a/yarn-project/end-to-end/src/e2e_slow_tree.test.ts b/yarn-project/end-to-end/src/e2e_slow_tree.test.ts index b48d8766d7a..187535f00b9 100644 --- a/yarn-project/end-to-end/src/e2e_slow_tree.test.ts +++ b/yarn-project/end-to-end/src/e2e_slow_tree.test.ts @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import { CheatCodes, DebugLogger, Fr, Wallet } from '@aztec/aztec.js'; +import { type CheatCodes, type DebugLogger, Fr, type Wallet } from '@aztec/aztec.js'; import { openTmpStore } from '@aztec/kv-store/utils'; import { Pedersen, SparseTree, newTree } from '@aztec/merkle-tree'; import { SlowTreeContract } from '@aztec/noir-contracts.js/SlowTree'; diff --git a/yarn-project/end-to-end/src/e2e_state_vars.test.ts b/yarn-project/end-to-end/src/e2e_state_vars.test.ts index c682cc58a26..56783ceee2e 100644 --- a/yarn-project/end-to-end/src/e2e_state_vars.test.ts +++ b/yarn-project/end-to-end/src/e2e_state_vars.test.ts @@ -1,4 +1,4 @@ -import { Wallet } from '@aztec/aztec.js'; +import { type Wallet } from '@aztec/aztec.js'; import { DocsExampleContract } from '@aztec/noir-contracts.js'; import { jest } from '@jest/globals'; diff --git a/yarn-project/end-to-end/src/e2e_static_calls.test.ts b/yarn-project/end-to-end/src/e2e_static_calls.test.ts index b51892a656c..839e1628acc 100644 --- a/yarn-project/end-to-end/src/e2e_static_calls.test.ts +++ b/yarn-project/end-to-end/src/e2e_static_calls.test.ts @@ -1,4 +1,4 @@ -import { Wallet } from '@aztec/aztec.js'; +import { type Wallet } from '@aztec/aztec.js'; import { ChildContract, ParentContract } from '@aztec/noir-contracts.js'; import { setup } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index cbaad56f30b..2c985d5e1f5 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -1,12 +1,12 @@ import { - AccountWallet, - CompleteAddress, - DebugLogger, + type AccountWallet, + type CompleteAddress, + type DebugLogger, ExtendedNote, Fr, FunctionSelector, Note, - TxHash, + type TxHash, computeAuthWitMessageHash, computeMessageSecretHash, } from '@aztec/aztec.js'; @@ -38,13 +38,16 @@ describe('e2e_token_contract', () => { let tokenSim: TokenSimulator; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { + const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/fixtures/utils.ts b/yarn-project/end-to-end/src/fixtures/utils.ts index db52d37d55f..fe6a4b23bc7 100644 --- a/yarn-project/end-to-end/src/fixtures/utils.ts +++ b/yarn-project/end-to-end/src/fixtures/utils.ts @@ -1,24 +1,24 @@ import { SchnorrAccountContractArtifact } from '@aztec/accounts/schnorr'; import { createAccounts, getDeployedTestAccountsWallets } from '@aztec/accounts/testing'; -import { AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node'; +import { type AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node'; import { - AccountWalletWithPrivateKey, - AztecAddress, - AztecNode, + type AccountWalletWithPrivateKey, + type AztecAddress, + type AztecNode, BatchCall, CheatCodes, - CompleteAddress, - ContractMethod, - DebugLogger, - DeployL1Contracts, + type CompleteAddress, + type ContractMethod, + type DebugLogger, + type DeployL1Contracts, EncryptedL2BlockL2Logs, EthCheatCodes, - L1ContractArtifactsForDeployment, + type L1ContractArtifactsForDeployment, LogType, - PXE, - SentTx, + type PXE, + type SentTx, SignerlessWallet, - Wallet, + type Wallet, createAztecNodeClient, createDebugLogger, createPXEClient, @@ -47,17 +47,17 @@ import { RollupBytecode, } from '@aztec/l1-artifacts'; import { getCanonicalGasToken, getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token'; -import { PXEService, PXEServiceConfig, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; -import { SequencerClient } from '@aztec/sequencer-client'; +import { PXEService, type PXEServiceConfig, createPXEService, getPXEServiceConfig } from '@aztec/pxe'; +import { type SequencerClient } from '@aztec/sequencer-client'; import * as fs from 'fs/promises'; import * as path from 'path'; import { - Account, - Chain, - HDAccount, - HttpTransport, - PrivateKeyAccount, + type Account, + type Chain, + type HDAccount, + type HttpTransport, + type PrivateKeyAccount, createPublicClient, createWalletClient, getContract, diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 3a6f13f72ea..4e3ee9f7a7c 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -1,11 +1,11 @@ import { createAccount, getDeployedTestAccountsWallets } from '@aztec/accounts/testing'; import { - AccountWallet, + type AccountWallet, CheatCodes, ExtendedNote, Fr, Note, - PXE, + type PXE, TxStatus, computeMessageSecretHash, createPXEClient, @@ -50,13 +50,16 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); + const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -91,13 +94,16 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -153,13 +159,16 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(100n, secretHash).send().wait(); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, ownerAddress, token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -168,8 +177,8 @@ describe('guides/dapp/testing', () => { // docs:start:calc-slot cheats = CheatCodes.create(ETHEREUM_HOST, pxe); - // The balances mapping is indexed by user address - ownerSlot = cheats.aztec.computeSlotInMap(TokenContract.storage.balances.slot, ownerAddress); + // The balances mapping is defined on storage slot 3 and is indexed by user address + ownerSlot = cheats.aztec.computeSlotInMap(3n, ownerAddress); // docs:end:calc-slot }, 90_000); diff --git a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts index 525cb40df6d..185455ce4cd 100644 --- a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts +++ b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts @@ -2,11 +2,11 @@ import { DefaultAccountContract } from '@aztec/accounts/defaults'; import { AccountManager, AuthWitness, - AuthWitnessProvider, - CompleteAddress, + type AuthWitnessProvider, + type CompleteAddress, ExtendedNote, Fr, - GrumpkinPrivateKey, + type GrumpkinPrivateKey, GrumpkinScalar, Note, Schnorr, @@ -73,15 +73,11 @@ describe('guides/writing_an_account_contract', () => { const mintAmount = 50n; const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote + const note = new Note([new Fr(mintAmount), secretHash]); - const extendedNote = new ExtendedNote( - note, - address, - token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, - receipt.txHash, - ); + const extendedNote = new ExtendedNote(note, address, token.address, storageSlot, noteTypeId, receipt.txHash); await pxe.addNote(extendedNote); await token.methods.redeem_shield({ address }, mintAmount, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts index 91245f23694..2f4baba29c3 100644 --- a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts @@ -1,10 +1,19 @@ -import { ArchiveSource } from '@aztec/archiver'; +import { type ArchiveSource } from '@aztec/archiver'; import { getConfigEnvVars } from '@aztec/aztec-node'; -import { AztecAddress, Body, Fr, GlobalVariables, L2Actor, L2Block, createDebugLogger, mockTx } from '@aztec/aztec.js'; +import { + AztecAddress, + Body, + Fr, + GlobalVariables, + L2Actor, + type L2Block, + createDebugLogger, + mockTx, +} from '@aztec/aztec.js'; // eslint-disable-next-line no-restricted-imports import { - ProcessedTx, - ProvingSuccess, + type ProcessedTx, + type ProvingSuccess, makeEmptyProcessedTx as makeEmptyProcessedTxFromHistoricalTreeRoots, makeProcessedTx, } from '@aztec/circuit-types'; @@ -21,34 +30,34 @@ import { SideEffectLinkedToNoteHash, } from '@aztec/circuits.js'; import { fr, makeNewSideEffect, makeNewSideEffectLinkedToNoteHash, makeProof } from '@aztec/circuits.js/testing'; -import { L1ContractAddresses, createEthereumChain } from '@aztec/ethereum'; +import { type L1ContractAddresses, createEthereumChain } from '@aztec/ethereum'; import { makeTuple, range } from '@aztec/foundation/array'; import { openTmpStore } from '@aztec/kv-store/utils'; import { AvailabilityOracleAbi, InboxAbi, OutboxAbi, RollupAbi } from '@aztec/l1-artifacts'; import { SHA256Trunc, StandardTree } from '@aztec/merkle-tree'; import { TxProver } from '@aztec/prover-client'; -import { L1Publisher, getL1Publisher } from '@aztec/sequencer-client'; +import { type L1Publisher, getL1Publisher } from '@aztec/sequencer-client'; import { WASMSimulator } from '@aztec/simulator'; -import { MerkleTrees, ServerWorldStateSynchronizer, WorldStateConfig } from '@aztec/world-state'; +import { MerkleTrees, ServerWorldStateSynchronizer, type WorldStateConfig } from '@aztec/world-state'; import { beforeEach, describe, expect, it } from '@jest/globals'; import * as fs from 'fs'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { - Account, - Address, - Chain, - GetContractReturnType, - HttpTransport, - PublicClient, - WalletClient, + type Account, + type Address, + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + type WalletClient, decodeEventLog, encodeFunctionData, getAbiItem, getAddress, getContract, } from 'viem'; -import { PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; +import { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; import { setupL1Contracts } from './fixtures/utils.js'; diff --git a/yarn-project/end-to-end/src/shared/browser.ts b/yarn-project/end-to-end/src/shared/browser.ts index f8e2f47e6b8..c9cc3d2098e 100644 --- a/yarn-project/end-to-end/src/shared/browser.ts +++ b/yarn-project/end-to-end/src/shared/browser.ts @@ -1,16 +1,16 @@ /* eslint-disable no-console */ -import * as AztecAccountsSchnorr from '@aztec/accounts/schnorr'; -import * as AztecAccountsSingleKey from '@aztec/accounts/single_key'; -import * as AztecAccountsTesting from '@aztec/accounts/testing'; +import type * as AztecAccountsSchnorr from '@aztec/accounts/schnorr'; +import type * as AztecAccountsSingleKey from '@aztec/accounts/single_key'; +import type * as AztecAccountsTesting from '@aztec/accounts/testing'; import * as AztecJs from '@aztec/aztec.js'; import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token'; import { contractArtifactToBuffer } from '@aztec/types/abi'; -import { Server } from 'http'; +import { type Server } from 'http'; import Koa from 'koa'; import serve from 'koa-static'; import path, { dirname } from 'path'; -import { Browser, Page, launch } from 'puppeteer'; +import { type Browser, type Page, launch } from 'puppeteer'; declare global { /** diff --git a/yarn-project/end-to-end/src/shared/cli.ts b/yarn-project/end-to-end/src/shared/cli.ts index 9c47e30398c..032a348eaf5 100644 --- a/yarn-project/end-to-end/src/shared/cli.ts +++ b/yarn-project/end-to-end/src/shared/cli.ts @@ -1,4 +1,11 @@ -import { AztecAddress, CompleteAddress, DebugLogger, Fr, PXE, computeMessageSecretHash } from '@aztec/aztec.js'; +import { + AztecAddress, + type CompleteAddress, + type DebugLogger, + Fr, + type PXE, + computeMessageSecretHash, +} from '@aztec/aztec.js'; import { getProgram } from '@aztec/cli'; import stringArgv from 'string-argv'; diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index 3b3e0c7f22c..78bfdb7ee73 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -1,18 +1,18 @@ // docs:start:cross_chain_test_harness import { - AztecAddress, - AztecNode, - DebugLogger, + type AztecAddress, + type AztecNode, + type DebugLogger, EthAddress, ExtendedNote, - FieldsOf, + type FieldsOf, Fr, Note, - PXE, - SiblingPath, - TxHash, - TxReceipt, - Wallet, + type PXE, + type SiblingPath, + type TxHash, + type TxReceipt, + type Wallet, computeMessageSecretHash, deployL1Contract, retryUntil, @@ -30,12 +30,12 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge'; import { - Account, - Chain, - GetContractReturnType, - HttpTransport, - PublicClient, - WalletClient, + type Account, + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + type WalletClient, getContract, toFunctionSelector, } from 'viem'; @@ -423,13 +423,15 @@ export class CrossChainTestHarness { async addPendingShieldNoteToPXE(shieldAmount: bigint, secretHash: Fr, txHash: TxHash) { this.logger('Adding note to PXE'); + const storageSlot = new Fr(5); + const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(shieldAmount), secretHash]); const extendedNote = new ExtendedNote( note, this.ownerAddress, this.l2Token.address, - TokenContract.storage.pending_shields.slot, - TokenContract.notes.TransparentNote.id, + storageSlot, + noteTypeId, txHash, ); await this.pxeService.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/shared/gas_portal_test_harness.ts b/yarn-project/end-to-end/src/shared/gas_portal_test_harness.ts index ff22ff82402..6118be50591 100644 --- a/yarn-project/end-to-end/src/shared/gas_portal_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/gas_portal_test_harness.ts @@ -1,9 +1,25 @@ -import { AztecAddress, DebugLogger, EthAddress, Fr, PXE, Wallet, computeMessageSecretHash } from '@aztec/aztec.js'; +import { + type AztecAddress, + type DebugLogger, + EthAddress, + Fr, + type PXE, + type Wallet, + computeMessageSecretHash, +} from '@aztec/aztec.js'; import { GasPortalAbi, OutboxAbi, PortalERC20Abi } from '@aztec/l1-artifacts'; import { GasTokenContract } from '@aztec/noir-contracts.js'; import { getCanonicalGasToken, getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token'; -import { Account, Chain, GetContractReturnType, HttpTransport, PublicClient, WalletClient, getContract } from 'viem'; +import { + type Account, + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + type WalletClient, + getContract, +} from 'viem'; export interface IGasBridgingTestHarness { bridgeFromL1ToL2(l1TokenBalance: bigint, bridgeAmount: bigint, owner: AztecAddress): Promise; diff --git a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts index 3bbbdd2c81c..3b01120511e 100644 --- a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts +++ b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts @@ -1,11 +1,11 @@ import { - AccountWallet, + type AccountWallet, AztecAddress, - AztecNode, - DebugLogger, + type AztecNode, + type DebugLogger, EthAddress, Fr, - PXE, + type PXE, computeAuthWitMessageHash, } from '@aztec/aztec.js'; import { deployL1Contract } from '@aztec/ethereum'; @@ -15,12 +15,12 @@ import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap'; import { jest } from '@jest/globals'; import { - Account, - Chain, - GetContractReturnType, - HttpTransport, - PublicClient, - WalletClient, + type Account, + type Chain, + type GetContractReturnType, + type HttpTransport, + type PublicClient, + type WalletClient, decodeEventLog, getContract, parseEther, diff --git a/yarn-project/end-to-end/src/simulators/lending_simulator.ts b/yarn-project/end-to-end/src/simulators/lending_simulator.ts index 2993fc0ff05..95805f00421 100644 --- a/yarn-project/end-to-end/src/simulators/lending_simulator.ts +++ b/yarn-project/end-to-end/src/simulators/lending_simulator.ts @@ -1,9 +1,9 @@ // Convenience struct to hold an account's address and secret that can easily be passed around. -import { AztecAddress, CheatCodes, Fr } from '@aztec/aztec.js'; +import { type AztecAddress, type CheatCodes, Fr } from '@aztec/aztec.js'; import { pedersenHash } from '@aztec/foundation/crypto'; -import { LendingContract } from '@aztec/noir-contracts.js/Lending'; +import { type LendingContract } from '@aztec/noir-contracts.js/Lending'; -import { TokenSimulator } from './token_simulator.js'; +import { type TokenSimulator } from './token_simulator.js'; /** * Contains utilities to compute the "key" for private holdings in the public state. diff --git a/yarn-project/end-to-end/src/simulators/token_simulator.ts b/yarn-project/end-to-end/src/simulators/token_simulator.ts index 70ef6a0218a..eacb27e201d 100644 --- a/yarn-project/end-to-end/src/simulators/token_simulator.ts +++ b/yarn-project/end-to-end/src/simulators/token_simulator.ts @@ -1,6 +1,6 @@ /* eslint-disable jsdoc/require-jsdoc */ -import { AztecAddress, DebugLogger } from '@aztec/aztec.js'; -import { TokenContract } from '@aztec/noir-contracts.js/Token'; +import { type AztecAddress, type DebugLogger } from '@aztec/aztec.js'; +import { type TokenContract } from '@aztec/noir-contracts.js/Token'; export class TokenSimulator { private balancesPrivate: Map = new Map(); diff --git a/yarn-project/end-to-end/src/uniswap_trade_on_l1_from_l2.test.ts b/yarn-project/end-to-end/src/uniswap_trade_on_l1_from_l2.test.ts index 461e8307020..f4bf1b92efd 100644 --- a/yarn-project/end-to-end/src/uniswap_trade_on_l1_from_l2.test.ts +++ b/yarn-project/end-to-end/src/uniswap_trade_on_l1_from_l2.test.ts @@ -1,5 +1,5 @@ import { setup as e2eSetup } from './fixtures/utils.js'; -import { UniswapSetupContext, uniswapL1L2TestSuite } from './shared/uniswap_l1_l2.js'; +import { type UniswapSetupContext, uniswapL1L2TestSuite } from './shared/uniswap_l1_l2.js'; // This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we // don't need to burn through RPC requests. diff --git a/yarn-project/entrypoints/src/account_entrypoint.ts b/yarn-project/entrypoints/src/account_entrypoint.ts index e855e48324f..acc3c011e4e 100644 --- a/yarn-project/entrypoints/src/account_entrypoint.ts +++ b/yarn-project/entrypoints/src/account_entrypoint.ts @@ -1,8 +1,8 @@ -import { AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { EntrypointInterface, FeeOptions } from '@aztec/aztec.js/entrypoint'; -import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, FunctionData, GeneratorIndex, TxContext } from '@aztec/circuits.js'; -import { FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; +import { type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { type EntrypointInterface, type FeeOptions } from '@aztec/aztec.js/entrypoint'; +import { type FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecAddress, FunctionData, GeneratorIndex, TxContext } from '@aztec/circuits.js'; +import { type FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from './constants.js'; import { buildAppPayload, buildFeePayload, hashPayload } from './entrypoint_payload.js'; diff --git a/yarn-project/entrypoints/src/dapp_entrypoint.ts b/yarn-project/entrypoints/src/dapp_entrypoint.ts index 5e851d59f44..67e41819e68 100644 --- a/yarn-project/entrypoints/src/dapp_entrypoint.ts +++ b/yarn-project/entrypoints/src/dapp_entrypoint.ts @@ -1,9 +1,9 @@ import { computeInnerAuthWitHash, computeOuterAuthWitHash } from '@aztec/aztec.js'; -import { AuthWitnessProvider } from '@aztec/aztec.js/account'; -import { EntrypointInterface } from '@aztec/aztec.js/entrypoint'; -import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, Fr, FunctionData, TxContext } from '@aztec/circuits.js'; -import { FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; +import { type AuthWitnessProvider } from '@aztec/aztec.js/account'; +import { type EntrypointInterface } from '@aztec/aztec.js/entrypoint'; +import { type FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecAddress, Fr, FunctionData, TxContext } from '@aztec/circuits.js'; +import { type FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from './constants.js'; import { buildDappPayload } from './entrypoint_payload.js'; diff --git a/yarn-project/entrypoints/src/entrypoint_payload.ts b/yarn-project/entrypoints/src/entrypoint_payload.ts index c76d20e70db..894dcdc4f5e 100644 --- a/yarn-project/entrypoints/src/entrypoint_payload.ts +++ b/yarn-project/entrypoints/src/entrypoint_payload.ts @@ -1,7 +1,7 @@ -import { FeeOptions } from '@aztec/aztec.js/entrypoint'; +import { type FeeOptions } from '@aztec/aztec.js/entrypoint'; import { Fr } from '@aztec/aztec.js/fields'; -import { FunctionCall, PackedArguments, emptyFunctionCall } from '@aztec/circuit-types'; -import { AztecAddress } from '@aztec/circuits.js'; +import { type FunctionCall, PackedArguments, emptyFunctionCall } from '@aztec/circuit-types'; +import { type AztecAddress } from '@aztec/circuits.js'; import { padArrayEnd } from '@aztec/foundation/collection'; import { pedersenHash } from '@aztec/foundation/crypto'; diff --git a/yarn-project/entrypoints/src/multi_call_entrypoint.ts b/yarn-project/entrypoints/src/multi_call_entrypoint.ts index 59431343878..86e3d82e0ea 100644 --- a/yarn-project/entrypoints/src/multi_call_entrypoint.ts +++ b/yarn-project/entrypoints/src/multi_call_entrypoint.ts @@ -1,7 +1,7 @@ -import { EntrypointInterface } from '@aztec/aztec.js/entrypoint'; -import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; -import { AztecAddress, FunctionData, TxContext } from '@aztec/circuits.js'; -import { FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; +import { type EntrypointInterface } from '@aztec/aztec.js/entrypoint'; +import { type FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecAddress, FunctionData, TxContext } from '@aztec/circuits.js'; +import { type FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint'; import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from './constants.js'; diff --git a/yarn-project/ethereum/src/constants.ts b/yarn-project/ethereum/src/constants.ts index fa71f161b2a..92e0b01c9d3 100644 --- a/yarn-project/ethereum/src/constants.ts +++ b/yarn-project/ethereum/src/constants.ts @@ -1,3 +1,3 @@ -import { Hex } from 'viem'; +import { type Hex } from 'viem'; export const NULL_KEY: Hex = `0x${'0000000000000000000000000000000000000000000000000000000000000000'}`; diff --git a/yarn-project/ethereum/src/deploy_l1_contracts.ts b/yarn-project/ethereum/src/deploy_l1_contracts.ts index 7fb7939056e..6df49139bd9 100644 --- a/yarn-project/ethereum/src/deploy_l1_contracts.ts +++ b/yarn-project/ethereum/src/deploy_l1_contracts.ts @@ -1,23 +1,23 @@ import { EthAddress } from '@aztec/foundation/eth-address'; -import { DebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger } from '@aztec/foundation/log'; import type { Abi, Narrow } from 'abitype'; import { - Account, - Chain, - Hex, - HttpTransport, - PublicClient, - WalletClient, + type Account, + type Chain, + type Hex, + type HttpTransport, + type PublicClient, + type WalletClient, createPublicClient, createWalletClient, getAddress, getContract, http, } from 'viem'; -import { HDAccount, PrivateKeyAccount } from 'viem/accounts'; +import { type HDAccount, type PrivateKeyAccount } from 'viem/accounts'; -import { L1ContractAddresses } from './l1_contract_addresses.js'; +import { type L1ContractAddresses } from './l1_contract_addresses.js'; /** * Return type of the deployL1Contract function. diff --git a/yarn-project/ethereum/src/ethereum_chain.ts b/yarn-project/ethereum/src/ethereum_chain.ts index 91d66239a00..0f8d401a01d 100644 --- a/yarn-project/ethereum/src/ethereum_chain.ts +++ b/yarn-project/ethereum/src/ethereum_chain.ts @@ -1,4 +1,4 @@ -import { Chain } from 'viem'; +import { type Chain } from 'viem'; /** * Interface containing the connection and chain properties to interact with a blockchain. diff --git a/yarn-project/ethereum/src/index.ts b/yarn-project/ethereum/src/index.ts index 6765234a136..8ef2db85236 100644 --- a/yarn-project/ethereum/src/index.ts +++ b/yarn-project/ethereum/src/index.ts @@ -1,6 +1,6 @@ import { foundry } from 'viem/chains'; -import { EthereumChain } from './ethereum_chain.js'; +import { type EthereumChain } from './ethereum_chain.js'; import { createTestnetChain } from './testnet.js'; export * from './testnet.js'; diff --git a/yarn-project/ethereum/src/l1_contract_addresses.ts b/yarn-project/ethereum/src/l1_contract_addresses.ts index 2752e90daf5..c870de6d665 100644 --- a/yarn-project/ethereum/src/l1_contract_addresses.ts +++ b/yarn-project/ethereum/src/l1_contract_addresses.ts @@ -1,4 +1,4 @@ -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; /** * The names of the current L1 contract addresses. diff --git a/yarn-project/ethereum/src/testnet.ts b/yarn-project/ethereum/src/testnet.ts index 074e73ef096..c6e28871a3e 100644 --- a/yarn-project/ethereum/src/testnet.ts +++ b/yarn-project/ethereum/src/testnet.ts @@ -1,6 +1,6 @@ -import { Chain } from 'viem'; +import { type Chain } from 'viem'; -import { EthereumChain } from './ethereum_chain.js'; +import { type EthereumChain } from './ethereum_chain.js'; const { DEPLOY_TAG = 'aztec-dev', CHAIN_ID = 31337 } = process.env; diff --git a/yarn-project/foundation/.eslintrc.cjs b/yarn-project/foundation/.eslintrc.cjs index daa6e7a51eb..ec3bcb348b7 100644 --- a/yarn-project/foundation/.eslintrc.cjs +++ b/yarn-project/foundation/.eslintrc.cjs @@ -41,6 +41,7 @@ module.exports = { '@typescript-eslint/await-thenable': 'error', '@typescript-eslint/no-floating-promises': 2, '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], + '@typescript-eslint/consistent-type-imports': ['error', { fixStyle: 'inline-type-imports' }], 'require-await': 2, 'no-console': 'error', 'no-constant-condition': 'off', diff --git a/yarn-project/foundation/src/abi/abi.test.ts b/yarn-project/foundation/src/abi/abi.test.ts index afa4d484e6b..b7b1334e432 100644 --- a/yarn-project/foundation/src/abi/abi.test.ts +++ b/yarn-project/foundation/src/abi/abi.test.ts @@ -1,4 +1,10 @@ -import { ContractArtifact, FunctionArtifact, FunctionType, getDefaultInitializer, getInitializer } from './abi.js'; +import { + type ContractArtifact, + type FunctionArtifact, + FunctionType, + getDefaultInitializer, + getInitializer, +} from './abi.js'; describe('abi', () => { describe('getDefaultInitializer', () => { diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index d88b489e858..c93e099f3e3 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -2,48 +2,6 @@ import { inflate } from 'pako'; import { type FunctionSelector } from './function_selector.js'; -/** - * A basic value. - */ -export interface BasicValue { - /** - * The kind of the value. - */ - kind: T; - value: V; -} - -/** - * An exported value. - */ -export type AbiValue = - | BasicValue<'boolean', boolean> - | BasicValue<'string', string> - | BasicValue<'array', AbiValue[]> - | TupleValue - | IntegerValue - | FieldValue - | StructValue; - -export type TypedStructFieldValue = { name: string; value: T }; - -export interface StructValue { - kind: 'struct'; - fields: TypedStructFieldValue[]; -} - -export interface TupleValue { - fields: AbiValue[]; -} - -export interface FieldValue extends BasicValue<'field', string> { - sign: boolean; -} - -export interface IntegerValue extends BasicValue<'integer', string> { - sign: boolean; -} - /** * A named type. */ @@ -55,7 +13,7 @@ export interface ABIVariable { /** * The type of the variable. */ - type: AbiType; + type: ABIType; } /** @@ -89,7 +47,7 @@ export interface BasicType { /** * A variable type. */ -export type AbiType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; +export type ABIType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; /** * An integer type. @@ -116,7 +74,7 @@ export interface ArrayType extends BasicType<'array'> { /** * The type of the array elements. */ - type: AbiType; + type: ABIType; } /** @@ -143,6 +101,24 @@ export interface StructType extends BasicType<'struct'> { path: string; } +/** + * A contract event. + */ +export interface EventAbi { + /** + * The event name. + */ + name: string; + /** + * Fully qualified name of the event. + */ + path: string; + /** + * The fields of the event. + */ + fields: ABIVariable[]; +} + /** * Aztec.nr function types. */ @@ -175,7 +151,7 @@ export interface FunctionAbi { /** * The types of the return values. */ - returnTypes: AbiType[]; + returnTypes: ABIType[]; /** * Whether the function is flagged as an initializer. */ @@ -280,12 +256,9 @@ export interface ContractArtifact { */ functions: FunctionArtifact[]; /** - * The outputs of the contract. + * The events of the contract. */ - outputs: { - structs: Record; - globals: Record; - }; + events: EventAbi[]; /** * The map of file ID to the source code and path of the file. diff --git a/yarn-project/foundation/src/abi/decoder.test.ts b/yarn-project/foundation/src/abi/decoder.test.ts index 7cefecf772b..717f3b38dde 100644 --- a/yarn-project/foundation/src/abi/decoder.test.ts +++ b/yarn-project/foundation/src/abi/decoder.test.ts @@ -1,4 +1,4 @@ -import { ABIParameterVisibility, FunctionArtifact } from './abi.js'; +import { type ABIParameterVisibility, type FunctionArtifact } from './abi.js'; import { decodeFunctionSignature, decodeFunctionSignatureWithParameterNames } from './decoder.js'; describe('abi/decoder', () => { diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index deafe602ae1..69bab60b6c5 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -1,6 +1,6 @@ import { AztecAddress } from '../aztec-address/index.js'; import { type Fr } from '../fields/index.js'; -import { type ABIParameter, type ABIVariable, type AbiType, type FunctionArtifact } from './abi.js'; +import { type ABIParameter, type ABIType, type ABIVariable, type FunctionArtifact } from './abi.js'; import { isAztecAddressStruct } from './utils.js'; /** @@ -21,7 +21,7 @@ class ReturnValuesDecoder { * @param abiType - The type of the return value. * @returns The decoded return value. */ - private decodeReturn(abiType: AbiType): DecodedReturn { + private decodeReturn(abiType: ABIType): DecodedReturn { switch (abiType.kind) { case 'field': return this.getNextField().toBigInt(); @@ -115,7 +115,7 @@ export class FunctionSignatureDecoder { * @param param - The parameter type to decode. * @returns A string representing the parameter type. */ - private getParameterType(param: AbiType): string { + private getParameterType(param: ABIType): string { switch (param.kind) { case 'field': return 'Field'; diff --git a/yarn-project/foundation/src/abi/encoder.test.ts b/yarn-project/foundation/src/abi/encoder.test.ts index a234bc04758..f78e1325dfd 100644 --- a/yarn-project/foundation/src/abi/encoder.test.ts +++ b/yarn-project/foundation/src/abi/encoder.test.ts @@ -1,7 +1,7 @@ import { AztecAddress } from '../aztec-address/index.js'; import { Fr } from '../fields/fields.js'; import { Point } from '../fields/point.js'; -import { ABIParameterVisibility, FunctionAbi, FunctionType } from './abi.js'; +import { ABIParameterVisibility, type FunctionAbi, FunctionType } from './abi.js'; import { encodeArguments } from './encoder.js'; describe('abi/encoder', () => { diff --git a/yarn-project/foundation/src/abi/encoder.ts b/yarn-project/foundation/src/abi/encoder.ts index 119554935af..7ca7260db68 100644 --- a/yarn-project/foundation/src/abi/encoder.ts +++ b/yarn-project/foundation/src/abi/encoder.ts @@ -1,5 +1,5 @@ import { Fr } from '../fields/index.js'; -import { type AbiType, type FunctionAbi } from './abi.js'; +import { type ABIType, type FunctionAbi } from './abi.js'; import { isAddressStruct, isFunctionSelectorStruct, isWrappedFieldStruct } from './utils.js'; /** @@ -11,7 +11,7 @@ class ArgumentEncoder { constructor(private abi: FunctionAbi, private args: any[]) {} - static typeSize(abiType: AbiType): number { + static typeSize(abiType: ABIType): number { switch (abiType.kind) { case 'field': case 'boolean': @@ -36,7 +36,7 @@ class ArgumentEncoder { * @param arg - The value to encode. * @param name - Name. */ - private encodeArgument(abiType: AbiType, arg: any, name?: string) { + private encodeArgument(abiType: ABIType, arg: any, name?: string) { if (arg === undefined || arg == null) { throw new Error(`Undefined argument ${name ?? 'unnamed'} of type ${abiType.kind}`); } diff --git a/yarn-project/foundation/src/abi/event_selector.ts b/yarn-project/foundation/src/abi/event_selector.ts index 48779aabad6..f9fa0a5b05e 100644 --- a/yarn-project/foundation/src/abi/event_selector.ts +++ b/yarn-project/foundation/src/abi/event_selector.ts @@ -1,6 +1,6 @@ import { fromHex, toBigIntBE } from '../bigint-buffer/index.js'; import { keccak, randomBytes } from '../crypto/index.js'; -import { Fr } from '../fields/fields.js'; +import { type Fr } from '../fields/fields.js'; import { BufferReader } from '../serialize/buffer_reader.js'; import { Selector } from './selector.js'; diff --git a/yarn-project/foundation/src/abi/function_selector.ts b/yarn-project/foundation/src/abi/function_selector.ts index 9ffcc958883..3c71482a6a0 100644 --- a/yarn-project/foundation/src/abi/function_selector.ts +++ b/yarn-project/foundation/src/abi/function_selector.ts @@ -1,9 +1,9 @@ import { fromHex, toBigIntBE } from '../bigint-buffer/index.js'; import { keccak, randomBytes } from '../crypto/index.js'; -import { Fr } from '../fields/fields.js'; +import { type Fr } from '../fields/fields.js'; import { BufferReader } from '../serialize/buffer_reader.js'; import { FieldReader } from '../serialize/field_reader.js'; -import { ABIParameter } from './abi.js'; +import { type ABIParameter } from './abi.js'; import { decodeFunctionSignature } from './decoder.js'; import { Selector } from './selector.js'; diff --git a/yarn-project/foundation/src/abi/utils.ts b/yarn-project/foundation/src/abi/utils.ts index 7bc8c55ce5e..1959d5762b8 100644 --- a/yarn-project/foundation/src/abi/utils.ts +++ b/yarn-project/foundation/src/abi/utils.ts @@ -1,11 +1,11 @@ -import { type AbiType } from './abi.js'; +import { type ABIType } from './abi.js'; /** * Returns whether the ABI type is an Aztec or Ethereum Address defined in Aztec.nr. * @param abiType - Type to check. * @returns Boolean. */ -export function isAddressStruct(abiType: AbiType) { +export function isAddressStruct(abiType: ABIType) { return isEthAddressStruct(abiType) || isAztecAddressStruct(abiType); } @@ -14,7 +14,7 @@ export function isAddressStruct(abiType: AbiType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isEthAddressStruct(abiType: AbiType) { +export function isEthAddressStruct(abiType: ABIType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::EthAddress'); } @@ -23,7 +23,7 @@ export function isEthAddressStruct(abiType: AbiType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isAztecAddressStruct(abiType: AbiType) { +export function isAztecAddressStruct(abiType: ABIType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::AztecAddress'); } @@ -32,7 +32,7 @@ export function isAztecAddressStruct(abiType: AbiType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isFunctionSelectorStruct(abiType: AbiType) { +export function isFunctionSelectorStruct(abiType: ABIType) { return abiType.kind === 'struct' && abiType.path.endsWith('types::abis::function_selector::FunctionSelector'); } @@ -40,7 +40,7 @@ export function isFunctionSelectorStruct(abiType: AbiType) { * Returns whether the ABI type is a struct with a single `inner` field. * @param abiType - Type to check. */ -export function isWrappedFieldStruct(abiType: AbiType) { +export function isWrappedFieldStruct(abiType: ABIType) { return ( abiType.kind === 'struct' && abiType.fields.length === 1 && diff --git a/yarn-project/foundation/src/array/array.ts b/yarn-project/foundation/src/array/array.ts index 8e6dfdb46c1..a7f1d7a18fc 100644 --- a/yarn-project/foundation/src/array/array.ts +++ b/yarn-project/foundation/src/array/array.ts @@ -1,4 +1,4 @@ -import { Tuple } from '../serialize/index.js'; +import { type Tuple } from '../serialize/index.js'; export type { FieldsOf } from '../types/index.js'; diff --git a/yarn-project/foundation/src/aztec-address/index.ts b/yarn-project/foundation/src/aztec-address/index.ts index ea1407b9eaa..c932c10cdaa 100644 --- a/yarn-project/foundation/src/aztec-address/index.ts +++ b/yarn-project/foundation/src/aztec-address/index.ts @@ -1,7 +1,7 @@ import { inspect } from 'util'; import { Fr, fromBuffer } from '../fields/index.js'; -import { BufferReader, FieldReader } from '../serialize/index.js'; +import { type BufferReader, FieldReader } from '../serialize/index.js'; /** * AztecAddress represents a 32-byte address in the Aztec Protocol. diff --git a/yarn-project/foundation/src/collection/array.ts b/yarn-project/foundation/src/collection/array.ts index 4ec479470e8..3a397db8b50 100644 --- a/yarn-project/foundation/src/collection/array.ts +++ b/yarn-project/foundation/src/collection/array.ts @@ -1,4 +1,4 @@ -import { Tuple } from '../serialize/types.js'; +import { type Tuple } from '../serialize/types.js'; /** * Pads an array to the target length by appending an element to its end. Throws if target length exceeds the input array length. Does not modify the input array. diff --git a/yarn-project/foundation/src/crypto/pedersen/pedersen.wasm.ts b/yarn-project/foundation/src/crypto/pedersen/pedersen.wasm.ts index c7a90507001..29fc82dcac3 100644 --- a/yarn-project/foundation/src/crypto/pedersen/pedersen.wasm.ts +++ b/yarn-project/foundation/src/crypto/pedersen/pedersen.wasm.ts @@ -1,7 +1,7 @@ import { BarretenbergSync, Fr as FrBarretenberg } from '@aztec/bb.js'; import { Fr } from '../../fields/fields.js'; -import { Bufferable, serializeToBufferArray } from '../../serialize/serialize.js'; +import { type Bufferable, serializeToBufferArray } from '../../serialize/serialize.js'; /** * Create a pedersen commitment (point) from an array of input fields. diff --git a/yarn-project/foundation/src/crypto/sha256/index.ts b/yarn-project/foundation/src/crypto/sha256/index.ts index 6b9676f3913..1ff89efda47 100644 --- a/yarn-project/foundation/src/crypto/sha256/index.ts +++ b/yarn-project/foundation/src/crypto/sha256/index.ts @@ -2,7 +2,7 @@ import { default as hash } from 'hash.js'; import { Fr } from '../../fields/fields.js'; import { truncateAndPad } from '../../serialize/free_funcs.js'; -import { Bufferable, serializeToBuffer } from '../../serialize/serialize.js'; +import { type Bufferable, serializeToBuffer } from '../../serialize/serialize.js'; export const sha256 = (data: Buffer) => Buffer.from(hash.sha256().update(data).digest()); diff --git a/yarn-project/foundation/src/fields/coordinate.ts b/yarn-project/foundation/src/fields/coordinate.ts index be9d4ec39b9..a8fad0b12d6 100644 --- a/yarn-project/foundation/src/fields/coordinate.ts +++ b/yarn-project/foundation/src/fields/coordinate.ts @@ -1,5 +1,5 @@ import { toBigIntBE } from '../bigint-buffer/index.js'; -import { Tuple } from '../serialize/types.js'; +import { type Tuple } from '../serialize/types.js'; import { Fr } from './fields.js'; /** diff --git a/yarn-project/foundation/src/json-rpc/client/json_rpc_client.ts b/yarn-project/foundation/src/json-rpc/client/json_rpc_client.ts index 1e0c69d2579..46ab33f0da5 100644 --- a/yarn-project/foundation/src/json-rpc/client/json_rpc_client.ts +++ b/yarn-project/foundation/src/json-rpc/client/json_rpc_client.ts @@ -2,12 +2,12 @@ // Dev dependency just for the somewhat complex RemoteObject type // This takes a {foo(): T} and makes {foo(): Promise} // while avoiding Promise of Promise. -import { RemoteObject } from 'comlink'; +import { type RemoteObject } from 'comlink'; import { format } from 'util'; -import { DebugLogger, createDebugLogger } from '../../log/index.js'; +import { type DebugLogger, createDebugLogger } from '../../log/index.js'; import { NoRetryError, makeBackoff, retry } from '../../retry/index.js'; -import { ClassConverter, JsonClassConverterInput, StringClassConverterInput } from '../class_converter.js'; +import { ClassConverter, type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js'; import { JsonStringify, convertFromJsonObj, convertToJsonObj } from '../convert.js'; export { JsonStringify } from '../convert.js'; diff --git a/yarn-project/foundation/src/json-rpc/convert.ts b/yarn-project/foundation/src/json-rpc/convert.ts index 6de58f4fee8..7bdb85aa34b 100644 --- a/yarn-project/foundation/src/json-rpc/convert.ts +++ b/yarn-project/foundation/src/json-rpc/convert.ts @@ -1,7 +1,7 @@ import { Buffer } from 'buffer'; import cloneDeepWith from 'lodash.clonedeepwith'; -import { ClassConverter } from './class_converter.js'; +import { type ClassConverter } from './class_converter.js'; /** * Check prototype chain to determine if an object is 'plain' (not a class instance). diff --git a/yarn-project/foundation/src/json-rpc/server/json_proxy.ts b/yarn-project/foundation/src/json-rpc/server/json_proxy.ts index b46a1983ada..47cc279a401 100644 --- a/yarn-project/foundation/src/json-rpc/server/json_proxy.ts +++ b/yarn-project/foundation/src/json-rpc/server/json_proxy.ts @@ -1,7 +1,7 @@ import { format } from 'util'; import { createDebugLogger } from '../../log/index.js'; -import { ClassConverter, JsonClassConverterInput, StringClassConverterInput } from '../class_converter.js'; +import { ClassConverter, type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js'; import { convertFromJsonObj, convertToJsonObj } from '../convert.js'; import { assert, hasOwnProperty } from '../js_utils.js'; diff --git a/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts b/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts index bd2d537bc54..9c342805d09 100644 --- a/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts +++ b/yarn-project/foundation/src/json-rpc/server/json_rpc_server.ts @@ -6,9 +6,9 @@ import compress from 'koa-compress'; import Router from 'koa-router'; import { createDebugLogger } from '../../log/index.js'; -import { JsonClassConverterInput, StringClassConverterInput } from '../class_converter.js'; +import { type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js'; import { convertBigintsInObj } from '../convert.js'; -import { ClassMaps, JsonProxy } from './json_proxy.js'; +import { type ClassMaps, JsonProxy } from './json_proxy.js'; /** * JsonRpcServer. diff --git a/yarn-project/foundation/src/log/console.ts b/yarn-project/foundation/src/log/console.ts index 4e13f742236..dee595f96c7 100644 --- a/yarn-project/foundation/src/log/console.ts +++ b/yarn-project/foundation/src/log/console.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { LogFn } from './log_fn.js'; +import { type LogFn } from './log_fn.js'; /** * ConsoleLogger is a utility class that provides customizable console logging functionality. diff --git a/yarn-project/foundation/src/log/debug.ts b/yarn-project/foundation/src/log/debug.ts index 074df6356e9..aeef1993b45 100644 --- a/yarn-project/foundation/src/log/debug.ts +++ b/yarn-project/foundation/src/log/debug.ts @@ -1,6 +1,6 @@ import debug from 'debug'; -import { LogFn } from './log_fn.js'; +import { type LogFn } from './log_fn.js'; let preLogHook: ((...args: any[]) => void) | undefined; let postLogHook: ((...args: any[]) => void) | undefined; diff --git a/yarn-project/foundation/src/log/logger.ts b/yarn-project/foundation/src/log/logger.ts index 9c9998a98c4..2747618147d 100644 --- a/yarn-project/foundation/src/log/logger.ts +++ b/yarn-project/foundation/src/log/logger.ts @@ -2,7 +2,7 @@ import debug from 'debug'; import isNode from 'detect-node'; import { isatty } from 'tty'; -import { LogData, LogFn } from './log_fn.js'; +import { type LogData, type LogFn } from './log_fn.js'; // Matches a subset of Winston log levels const LogLevels = ['silent', 'error', 'warn', 'info', 'verbose', 'debug', 'trace'] as const; diff --git a/yarn-project/foundation/src/mutex/index.ts b/yarn-project/foundation/src/mutex/index.ts index a3bb6c1575a..e7b7fcac968 100644 --- a/yarn-project/foundation/src/mutex/index.ts +++ b/yarn-project/foundation/src/mutex/index.ts @@ -1,4 +1,4 @@ -import { MutexDatabase } from './mutex_database.js'; +import { type MutexDatabase } from './mutex_database.js'; export * from './mutex_database.js'; diff --git a/yarn-project/foundation/src/mutex/mutex.test.ts b/yarn-project/foundation/src/mutex/mutex.test.ts index 0c2eb485d89..82de7f28696 100644 --- a/yarn-project/foundation/src/mutex/mutex.test.ts +++ b/yarn-project/foundation/src/mutex/mutex.test.ts @@ -1,7 +1,7 @@ import { jest } from '@jest/globals'; import { Mutex } from './index.js'; -import { MutexDatabase } from './mutex_database.js'; +import { type MutexDatabase } from './mutex_database.js'; /** * Sleep function for introducing a delay in the execution of code. diff --git a/yarn-project/foundation/src/serialize/buffer_reader.ts b/yarn-project/foundation/src/serialize/buffer_reader.ts index d3bb2e12bea..be1bf669a82 100644 --- a/yarn-project/foundation/src/serialize/buffer_reader.ts +++ b/yarn-project/foundation/src/serialize/buffer_reader.ts @@ -1,4 +1,4 @@ -import { Tuple } from './types.js'; +import { type Tuple } from './types.js'; /** * The BufferReader class provides a utility for reading various data types from a buffer. diff --git a/yarn-project/foundation/src/serialize/field_reader.ts b/yarn-project/foundation/src/serialize/field_reader.ts index be3a06e72dd..1c1242457b4 100644 --- a/yarn-project/foundation/src/serialize/field_reader.ts +++ b/yarn-project/foundation/src/serialize/field_reader.ts @@ -1,5 +1,5 @@ -import { Fq, Fr } from '../fields/fields.js'; -import { Tuple } from './types.js'; +import { Fq, type Fr } from '../fields/fields.js'; +import { type Tuple } from './types.js'; /** * The FieldReader class provides a utility for reading various data types from a field array. diff --git a/yarn-project/foundation/src/serialize/free_funcs.ts b/yarn-project/foundation/src/serialize/free_funcs.ts index 319112ebede..144827a907f 100644 --- a/yarn-project/foundation/src/serialize/free_funcs.ts +++ b/yarn-project/foundation/src/serialize/free_funcs.ts @@ -1,5 +1,5 @@ import { Fr } from '../fields/fields.js'; -import { Tuple } from './types.js'; +import { type Tuple } from './types.js'; /** * Convert a boolean value to its corresponding byte representation in a Buffer of size 1. diff --git a/yarn-project/foundation/src/transport/browser/message_port_socket.ts b/yarn-project/foundation/src/transport/browser/message_port_socket.ts index d7b55435a15..2f5cde89013 100644 --- a/yarn-project/foundation/src/transport/browser/message_port_socket.ts +++ b/yarn-project/foundation/src/transport/browser/message_port_socket.ts @@ -1,4 +1,4 @@ -import { Socket } from '../interface/socket.js'; +import { type Socket } from '../interface/socket.js'; /** * An implementation of a TransportSocket using MessagePorts. diff --git a/yarn-project/foundation/src/transport/browser/shared_worker_connector.ts b/yarn-project/foundation/src/transport/browser/shared_worker_connector.ts index 68a34492004..94b62175d06 100644 --- a/yarn-project/foundation/src/transport/browser/shared_worker_connector.ts +++ b/yarn-project/foundation/src/transport/browser/shared_worker_connector.ts @@ -1,4 +1,4 @@ -import { Connector } from '../interface/connector.js'; +import { type Connector } from '../interface/connector.js'; import { MessagePortSocket } from './message_port_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/browser/shared_worker_listener.ts b/yarn-project/foundation/src/transport/browser/shared_worker_listener.ts index 779a21cd224..5db7b9168bb 100644 --- a/yarn-project/foundation/src/transport/browser/shared_worker_listener.ts +++ b/yarn-project/foundation/src/transport/browser/shared_worker_listener.ts @@ -1,6 +1,6 @@ import EventEmitter from 'events'; -import { Listener } from '../interface/listener.js'; +import { type Listener } from '../interface/listener.js'; import { MessagePortSocket } from './message_port_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/browser/worker_connector.ts b/yarn-project/foundation/src/transport/browser/worker_connector.ts index c019477d238..67a93caf757 100644 --- a/yarn-project/foundation/src/transport/browser/worker_connector.ts +++ b/yarn-project/foundation/src/transport/browser/worker_connector.ts @@ -1,4 +1,4 @@ -import { Connector } from '../interface/connector.js'; +import { type Connector } from '../interface/connector.js'; import { MessagePortSocket } from './message_port_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/browser/worker_listener.ts b/yarn-project/foundation/src/transport/browser/worker_listener.ts index 502f65c7a17..13b94efcda3 100644 --- a/yarn-project/foundation/src/transport/browser/worker_listener.ts +++ b/yarn-project/foundation/src/transport/browser/worker_listener.ts @@ -1,6 +1,6 @@ import EventEmitter from 'events'; -import { Listener } from '../interface/listener.js'; +import { type Listener } from '../interface/listener.js'; import { MessagePortSocket } from './message_port_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/dispatch/create_dispatch_proxy.ts b/yarn-project/foundation/src/transport/dispatch/create_dispatch_proxy.ts index e4dba2498cb..dbaeb2950f5 100644 --- a/yarn-project/foundation/src/transport/dispatch/create_dispatch_proxy.ts +++ b/yarn-project/foundation/src/transport/dispatch/create_dispatch_proxy.ts @@ -1,8 +1,8 @@ import { EventEmitter } from 'events'; -import { TransferDescriptor, isTransferDescriptor } from '../interface/transferable.js'; -import { TransportClient } from '../transport_client.js'; -import { DispatchMsg } from './create_dispatch_fn.js'; +import { type TransferDescriptor, isTransferDescriptor } from '../interface/transferable.js'; +import { type TransportClient } from '../transport_client.js'; +import { type DispatchMsg } from './create_dispatch_fn.js'; /** * FilterOutAttributes type filters out all non-method properties of an object, leaving only the attributes diff --git a/yarn-project/foundation/src/transport/interface/connector.ts b/yarn-project/foundation/src/transport/interface/connector.ts index af01fd19520..b42e2ec1fcf 100644 --- a/yarn-project/foundation/src/transport/interface/connector.ts +++ b/yarn-project/foundation/src/transport/interface/connector.ts @@ -1,4 +1,4 @@ -import { Socket } from './socket.js'; +import { type Socket } from './socket.js'; /** * Opens a socket with corresponding TransportListener. diff --git a/yarn-project/foundation/src/transport/interface/listener.ts b/yarn-project/foundation/src/transport/interface/listener.ts index d71b3ffb1a8..1b2da8134ac 100644 --- a/yarn-project/foundation/src/transport/interface/listener.ts +++ b/yarn-project/foundation/src/transport/interface/listener.ts @@ -1,6 +1,6 @@ -import EventEmitter from 'events'; +import type EventEmitter from 'events'; -import { Socket } from './socket.js'; +import { type Socket } from './socket.js'; /** * Once opened, an implementation of a TransportListener will emit `new_socket` events as new clients connect. diff --git a/yarn-project/foundation/src/transport/node/node_connector.ts b/yarn-project/foundation/src/transport/node/node_connector.ts index 37524380ca4..b49f80d5b8b 100644 --- a/yarn-project/foundation/src/transport/node/node_connector.ts +++ b/yarn-project/foundation/src/transport/node/node_connector.ts @@ -1,6 +1,6 @@ -import { Worker } from 'worker_threads'; +import { type Worker } from 'worker_threads'; -import { Connector } from '../interface/connector.js'; +import { type Connector } from '../interface/connector.js'; import { NodeConnectorSocket } from './node_connector_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/node/node_connector_socket.ts b/yarn-project/foundation/src/transport/node/node_connector_socket.ts index 11cbb7d129e..e81394d5c83 100644 --- a/yarn-project/foundation/src/transport/node/node_connector_socket.ts +++ b/yarn-project/foundation/src/transport/node/node_connector_socket.ts @@ -1,6 +1,6 @@ -import { TransferListItem, Worker } from 'worker_threads'; +import { type TransferListItem, type Worker } from 'worker_threads'; -import { Socket } from '../interface/socket.js'; +import { type Socket } from '../interface/socket.js'; /** * NodeConnectorSocket is a wrapper class that implements the Socket interface for messaging between diff --git a/yarn-project/foundation/src/transport/node/node_listener.ts b/yarn-project/foundation/src/transport/node/node_listener.ts index 447aec1f08e..406b2eea87e 100644 --- a/yarn-project/foundation/src/transport/node/node_listener.ts +++ b/yarn-project/foundation/src/transport/node/node_listener.ts @@ -1,7 +1,7 @@ import EventEmitter from 'events'; import { parentPort } from 'worker_threads'; -import { Listener } from '../interface/listener.js'; +import { type Listener } from '../interface/listener.js'; import { NodeListenerSocket } from './node_listener_socket.js'; /** diff --git a/yarn-project/foundation/src/transport/node/node_listener_socket.ts b/yarn-project/foundation/src/transport/node/node_listener_socket.ts index 25ebc40738e..b96acc726c8 100644 --- a/yarn-project/foundation/src/transport/node/node_listener_socket.ts +++ b/yarn-project/foundation/src/transport/node/node_listener_socket.ts @@ -1,6 +1,6 @@ -import { MessagePort, TransferListItem } from 'worker_threads'; +import { type MessagePort, type TransferListItem } from 'worker_threads'; -import { Socket } from '../interface/socket.js'; +import { type Socket } from '../interface/socket.js'; /** * An implementation of a TransportSocket using MessagePorts. diff --git a/yarn-project/foundation/src/transport/transport_client.ts b/yarn-project/foundation/src/transport/transport_client.ts index 3fb2fd836d5..5709e662edc 100644 --- a/yarn-project/foundation/src/transport/transport_client.ts +++ b/yarn-project/foundation/src/transport/transport_client.ts @@ -2,9 +2,9 @@ import EventEmitter from 'events'; import { format } from 'util'; import { createDebugLogger } from '../log/index.js'; -import { EventMessage, ResponseMessage, isEventMessage } from './dispatch/messages.js'; -import { Connector } from './interface/connector.js'; -import { Socket } from './interface/socket.js'; +import { type EventMessage, type ResponseMessage, isEventMessage } from './dispatch/messages.js'; +import { type Connector } from './interface/connector.js'; +import { type Socket } from './interface/socket.js'; const debug = createDebugLogger('aztec:transport_client'); diff --git a/yarn-project/foundation/src/transport/transport_server.ts b/yarn-project/foundation/src/transport/transport_server.ts index 64732ab857b..706215779b7 100644 --- a/yarn-project/foundation/src/transport/transport_server.ts +++ b/yarn-project/foundation/src/transport/transport_server.ts @@ -1,6 +1,6 @@ -import { RequestMessage, ResponseMessage } from './dispatch/messages.js'; -import { Listener } from './interface/listener.js'; -import { Socket } from './interface/socket.js'; +import { type RequestMessage, type ResponseMessage } from './dispatch/messages.js'; +import { type Listener } from './interface/listener.js'; +import { type Socket } from './interface/socket.js'; import { isTransferDescriptor } from './interface/transferable.js'; /** diff --git a/yarn-project/foundation/src/wasm/wasm_module.ts b/yarn-project/foundation/src/wasm/wasm_module.ts index db4e1da83c9..20851a05cc6 100644 --- a/yarn-project/foundation/src/wasm/wasm_module.ts +++ b/yarn-project/foundation/src/wasm/wasm_module.ts @@ -2,7 +2,7 @@ import { Buffer } from 'buffer'; import { randomBytes } from '../crypto/index.js'; import { MemoryFifo } from '../fifo/index.js'; -import { LogFn, createDebugOnlyLogger } from '../log/index.js'; +import { type LogFn, createDebugOnlyLogger } from '../log/index.js'; import { getEmptyWasiSdk } from './empty_wasi_sdk.js'; /** diff --git a/yarn-project/foundation/src/worker/browser/start_web_module.ts b/yarn-project/foundation/src/worker/browser/start_web_module.ts index 37683aea550..06a59e22c3d 100644 --- a/yarn-project/foundation/src/worker/browser/start_web_module.ts +++ b/yarn-project/foundation/src/worker/browser/start_web_module.ts @@ -1,5 +1,5 @@ -import { DispatchMsg, TransportServer, WorkerListener } from '../../transport/index.js'; -import { WasmModule } from '../../wasm/index.js'; +import { type DispatchMsg, TransportServer, WorkerListener } from '../../transport/index.js'; +import { type WasmModule } from '../../wasm/index.js'; /** * Start the transport server corresponding to this module. diff --git a/yarn-project/foundation/src/worker/browser/web_data_store.ts b/yarn-project/foundation/src/worker/browser/web_data_store.ts index 6e5322a3723..f19e2b9bcda 100644 --- a/yarn-project/foundation/src/worker/browser/web_data_store.ts +++ b/yarn-project/foundation/src/worker/browser/web_data_store.ts @@ -1,7 +1,7 @@ -import levelup, { LevelUp } from 'levelup'; +import levelup, { type LevelUp } from 'levelup'; import memdown from 'memdown'; -import { DataStore } from '../data_store.js'; +import { type DataStore } from '../data_store.js'; /** * Cache for data used by wasm module. diff --git a/yarn-project/foundation/src/worker/browser/web_worker.ts b/yarn-project/foundation/src/worker/browser/web_worker.ts index a28d3fd7482..7560c60852e 100644 --- a/yarn-project/foundation/src/worker/browser/web_worker.ts +++ b/yarn-project/foundation/src/worker/browser/web_worker.ts @@ -1,6 +1,6 @@ -import { DispatchMsg, TransportClient, WorkerConnector, createDispatchProxy } from '../../transport/index.js'; +import { type DispatchMsg, TransportClient, WorkerConnector, createDispatchProxy } from '../../transport/index.js'; import { WasmModule } from '../../wasm/index.js'; -import { WasmWorker } from '../wasm_worker.js'; +import { type WasmWorker } from '../wasm_worker.js'; /** * Instantiate a web worker. diff --git a/yarn-project/foundation/src/worker/node/node_data_store.ts b/yarn-project/foundation/src/worker/node/node_data_store.ts index 24bb39747bf..fd0986487c4 100644 --- a/yarn-project/foundation/src/worker/node/node_data_store.ts +++ b/yarn-project/foundation/src/worker/node/node_data_store.ts @@ -1,8 +1,8 @@ import leveldown from 'leveldown'; -import levelup, { LevelUp } from 'levelup'; +import levelup, { type LevelUp } from 'levelup'; import memdown from 'memdown'; -import { DataStore } from '../data_store.js'; +import { type DataStore } from '../data_store.js'; /** * Cache for data used by wasm module. diff --git a/yarn-project/foundation/src/worker/node/node_worker.ts b/yarn-project/foundation/src/worker/node/node_worker.ts index d297ed727bc..bd4c8b096f3 100644 --- a/yarn-project/foundation/src/worker/node/node_worker.ts +++ b/yarn-project/foundation/src/worker/node/node_worker.ts @@ -1,8 +1,8 @@ import { Worker } from 'worker_threads'; -import { DispatchMsg, NodeConnector, TransportClient, createDispatchProxy } from '../../transport/index.js'; +import { type DispatchMsg, NodeConnector, TransportClient, createDispatchProxy } from '../../transport/index.js'; import { WasmModule } from '../../wasm/wasm_module.js'; -import { WasmWorker } from '../wasm_worker.js'; +import { type WasmWorker } from '../wasm_worker.js'; /** * Creates a node worker. diff --git a/yarn-project/foundation/src/worker/node/start_node_module.ts b/yarn-project/foundation/src/worker/node/start_node_module.ts index 14f01cfb70d..ac445de1926 100644 --- a/yarn-project/foundation/src/worker/node/start_node_module.ts +++ b/yarn-project/foundation/src/worker/node/start_node_module.ts @@ -1,7 +1,7 @@ import { parentPort } from 'worker_threads'; -import { DispatchMsg, NodeListener, TransportServer } from '../../transport/index.js'; -import { WasmModule } from '../../wasm/wasm_module.js'; +import { type DispatchMsg, NodeListener, TransportServer } from '../../transport/index.js'; +import { type WasmModule } from '../../wasm/wasm_module.js'; if (!parentPort) { throw new Error('InvalidWorker'); diff --git a/yarn-project/foundation/src/worker/wasm_worker.ts b/yarn-project/foundation/src/worker/wasm_worker.ts index a9dcb4a7ad2..e9036023ee3 100644 --- a/yarn-project/foundation/src/worker/wasm_worker.ts +++ b/yarn-project/foundation/src/worker/wasm_worker.ts @@ -1,5 +1,5 @@ -import { Proxify } from '../transport/index.js'; -import { WasmModule } from '../wasm/wasm_module.js'; +import { type Proxify } from '../transport/index.js'; +import { type WasmModule } from '../wasm/wasm_module.js'; /** * Represents either a WASM web worker, or node.js worker. diff --git a/yarn-project/foundation/src/worker/worker_pool.ts b/yarn-project/foundation/src/worker/worker_pool.ts index b121f8f85c8..7e153489586 100644 --- a/yarn-project/foundation/src/worker/worker_pool.ts +++ b/yarn-project/foundation/src/worker/worker_pool.ts @@ -1,5 +1,5 @@ import { createDebugLogger } from '../log/index.js'; -import { WasmWorker } from './wasm_worker.js'; +import { type WasmWorker } from './wasm_worker.js'; const debug = createDebugLogger('bb:worker_pool'); diff --git a/yarn-project/key-store/src/key_pair.ts b/yarn-project/key-store/src/key_pair.ts index fc40b397485..0202652cbc0 100644 --- a/yarn-project/key-store/src/key_pair.ts +++ b/yarn-project/key-store/src/key_pair.ts @@ -1,6 +1,6 @@ -import { KeyPair, PublicKey } from '@aztec/circuit-types'; -import { GrumpkinPrivateKey, GrumpkinScalar } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { type KeyPair, type PublicKey } from '@aztec/circuit-types'; +import { type GrumpkinPrivateKey, GrumpkinScalar } from '@aztec/circuits.js'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; /** * The ConstantKeyPair class is an implementation of the KeyPair interface, which allows generation and management of diff --git a/yarn-project/key-store/src/test_key_store.ts b/yarn-project/key-store/src/test_key_store.ts index f0bab98c51d..a5bfe3144b3 100644 --- a/yarn-project/key-store/src/test_key_store.ts +++ b/yarn-project/key-store/src/test_key_store.ts @@ -1,15 +1,15 @@ -import { KeyPair, KeyStore, PublicKey } from '@aztec/circuit-types'; +import { type KeyPair, type KeyStore, type PublicKey } from '@aztec/circuit-types'; import { - AztecAddress, - GrumpkinPrivateKey, + type AztecAddress, + type GrumpkinPrivateKey, GrumpkinScalar, Point, computeNullifierSecretKey, computeSiloedNullifierSecretKey, derivePublicKey, } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; import { ConstantKeyPair } from './key_pair.js'; diff --git a/yarn-project/kv-store/src/interfaces/counter.ts b/yarn-project/kv-store/src/interfaces/counter.ts index 3cd3ca60a97..0fa636c58dd 100644 --- a/yarn-project/kv-store/src/interfaces/counter.ts +++ b/yarn-project/kv-store/src/interfaces/counter.ts @@ -1,4 +1,4 @@ -import { Key, Range } from './common.js'; +import { type Key, type Range } from './common.js'; /** * A map that counts how many times it sees a key. Once 0 is reached, that key is removed from the map. diff --git a/yarn-project/kv-store/src/interfaces/map.ts b/yarn-project/kv-store/src/interfaces/map.ts index 357ebdcbb25..9b0d0ca4d17 100644 --- a/yarn-project/kv-store/src/interfaces/map.ts +++ b/yarn-project/kv-store/src/interfaces/map.ts @@ -1,4 +1,4 @@ -import { Key, Range } from './common.js'; +import { type Key, type Range } from './common.js'; /** * A map backed by a persistent store. diff --git a/yarn-project/kv-store/src/interfaces/store.ts b/yarn-project/kv-store/src/interfaces/store.ts index 9b0f1c9364d..16962cf5695 100644 --- a/yarn-project/kv-store/src/interfaces/store.ts +++ b/yarn-project/kv-store/src/interfaces/store.ts @@ -1,8 +1,8 @@ -import { AztecArray } from './array.js'; -import { Key } from './common.js'; -import { AztecCounter } from './counter.js'; -import { AztecMap, AztecMultiMap } from './map.js'; -import { AztecSingleton } from './singleton.js'; +import { type AztecArray } from './array.js'; +import { type Key } from './common.js'; +import { type AztecCounter } from './counter.js'; +import { type AztecMap, type AztecMultiMap } from './map.js'; +import { type AztecSingleton } from './singleton.js'; /** A key-value store */ export interface AztecKVStore { diff --git a/yarn-project/kv-store/src/lmdb/array.test.ts b/yarn-project/kv-store/src/lmdb/array.test.ts index 3058302e87f..140d620a87d 100644 --- a/yarn-project/kv-store/src/lmdb/array.test.ts +++ b/yarn-project/kv-store/src/lmdb/array.test.ts @@ -1,4 +1,4 @@ -import { Database, open } from 'lmdb'; +import { type Database, open } from 'lmdb'; import { LmdbAztecArray } from './array.js'; diff --git a/yarn-project/kv-store/src/lmdb/array.ts b/yarn-project/kv-store/src/lmdb/array.ts index 1da3676aac0..3ba338d028f 100644 --- a/yarn-project/kv-store/src/lmdb/array.ts +++ b/yarn-project/kv-store/src/lmdb/array.ts @@ -1,6 +1,6 @@ -import { Database, Key } from 'lmdb'; +import { type Database, type Key } from 'lmdb'; -import { AztecArray } from '../interfaces/array.js'; +import { type AztecArray } from '../interfaces/array.js'; import { LmdbAztecSingleton } from './singleton.js'; /** The shape of a key that stores a value in an array */ diff --git a/yarn-project/kv-store/src/lmdb/counter.test.ts b/yarn-project/kv-store/src/lmdb/counter.test.ts index df490811a4e..36ac3e42679 100644 --- a/yarn-project/kv-store/src/lmdb/counter.test.ts +++ b/yarn-project/kv-store/src/lmdb/counter.test.ts @@ -1,6 +1,6 @@ import { randomBytes } from '@aztec/foundation/crypto'; -import { Database, open } from 'lmdb'; +import { type Database, open } from 'lmdb'; import { LmdbAztecCounter } from './counter.js'; diff --git a/yarn-project/kv-store/src/lmdb/counter.ts b/yarn-project/kv-store/src/lmdb/counter.ts index b25231bdc6f..78e70f5d3ff 100644 --- a/yarn-project/kv-store/src/lmdb/counter.ts +++ b/yarn-project/kv-store/src/lmdb/counter.ts @@ -1,7 +1,7 @@ -import { Key as BaseKey, Database } from 'lmdb'; +import { type Key as BaseKey, type Database } from 'lmdb'; -import { Key, Range } from '../interfaces/common.js'; -import { AztecCounter } from '../interfaces/counter.js'; +import { type Key, type Range } from '../interfaces/common.js'; +import { type AztecCounter } from '../interfaces/counter.js'; import { LmdbAztecMap } from './map.js'; /** diff --git a/yarn-project/kv-store/src/lmdb/map.test.ts b/yarn-project/kv-store/src/lmdb/map.test.ts index df9bcfebfe4..a13aa16e126 100644 --- a/yarn-project/kv-store/src/lmdb/map.test.ts +++ b/yarn-project/kv-store/src/lmdb/map.test.ts @@ -1,4 +1,4 @@ -import { Database, open } from 'lmdb'; +import { type Database, open } from 'lmdb'; import { LmdbAztecMap } from './map.js'; diff --git a/yarn-project/kv-store/src/lmdb/map.ts b/yarn-project/kv-store/src/lmdb/map.ts index 74b2aa0c882..3711fa36f55 100644 --- a/yarn-project/kv-store/src/lmdb/map.ts +++ b/yarn-project/kv-store/src/lmdb/map.ts @@ -1,7 +1,7 @@ -import { Database, RangeOptions } from 'lmdb'; +import { type Database, type RangeOptions } from 'lmdb'; -import { Key, Range } from '../interfaces/common.js'; -import { AztecMultiMap } from '../interfaces/map.js'; +import { type Key, type Range } from '../interfaces/common.js'; +import { type AztecMultiMap } from '../interfaces/map.js'; /** The slot where a key-value entry would be stored */ type MapValueSlot = ['map', string, 'slot', K]; diff --git a/yarn-project/kv-store/src/lmdb/singleton.ts b/yarn-project/kv-store/src/lmdb/singleton.ts index 0fa4ffe69e4..abeefec242c 100644 --- a/yarn-project/kv-store/src/lmdb/singleton.ts +++ b/yarn-project/kv-store/src/lmdb/singleton.ts @@ -1,6 +1,6 @@ -import { Database, Key } from 'lmdb'; +import { type Database, type Key } from 'lmdb'; -import { AztecSingleton } from '../interfaces/singleton.js'; +import { type AztecSingleton } from '../interfaces/singleton.js'; /** The slot where this singleton will store its value */ type ValueSlot = ['singleton', string, 'value']; diff --git a/yarn-project/kv-store/src/lmdb/store.ts b/yarn-project/kv-store/src/lmdb/store.ts index af949224e97..ef1c735ed32 100644 --- a/yarn-project/kv-store/src/lmdb/store.ts +++ b/yarn-project/kv-store/src/lmdb/store.ts @@ -1,12 +1,12 @@ import { createDebugLogger } from '@aztec/foundation/log'; -import { Database, Key, RootDatabase, open } from 'lmdb'; +import { type Database, type Key, type RootDatabase, open } from 'lmdb'; -import { AztecArray } from '../interfaces/array.js'; -import { AztecCounter } from '../interfaces/counter.js'; -import { AztecMap, AztecMultiMap } from '../interfaces/map.js'; -import { AztecSingleton } from '../interfaces/singleton.js'; -import { AztecKVStore } from '../interfaces/store.js'; +import { type AztecArray } from '../interfaces/array.js'; +import { type AztecCounter } from '../interfaces/counter.js'; +import { type AztecMap, type AztecMultiMap } from '../interfaces/map.js'; +import { type AztecSingleton } from '../interfaces/singleton.js'; +import { type AztecKVStore } from '../interfaces/store.js'; import { LmdbAztecArray } from './array.js'; import { LmdbAztecCounter } from './counter.js'; import { LmdbAztecMap } from './map.js'; diff --git a/yarn-project/kv-store/src/utils.ts b/yarn-project/kv-store/src/utils.ts index e41297b9e82..d527e43a8b5 100644 --- a/yarn-project/kv-store/src/utils.ts +++ b/yarn-project/kv-store/src/utils.ts @@ -1,7 +1,7 @@ -import { EthAddress } from '@aztec/foundation/eth-address'; -import { Logger } from '@aztec/foundation/log'; +import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type Logger } from '@aztec/foundation/log'; -import { AztecKVStore } from './interfaces/store.js'; +import { type AztecKVStore } from './interfaces/store.js'; import { AztecLmdbStore } from './lmdb/store.js'; /** diff --git a/yarn-project/merkle-tree/src/hasher_with_stats.ts b/yarn-project/merkle-tree/src/hasher_with_stats.ts index 34d00d6b41a..7c77e8cf370 100644 --- a/yarn-project/merkle-tree/src/hasher_with_stats.ts +++ b/yarn-project/merkle-tree/src/hasher_with_stats.ts @@ -1,4 +1,4 @@ -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { createHistogram, performance } from 'perf_hooks'; diff --git a/yarn-project/merkle-tree/src/interfaces/append_only_tree.ts b/yarn-project/merkle-tree/src/interfaces/append_only_tree.ts index ba6d0ad983b..bb2cd0db0d7 100644 --- a/yarn-project/merkle-tree/src/interfaces/append_only_tree.ts +++ b/yarn-project/merkle-tree/src/interfaces/append_only_tree.ts @@ -1,7 +1,7 @@ -import { Bufferable } from '@aztec/foundation/serialize'; +import { type Bufferable } from '@aztec/foundation/serialize'; -import { TreeSnapshot, TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js'; -import { MerkleTree } from './merkle_tree.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js'; +import { type MerkleTree } from './merkle_tree.js'; /** * A Merkle tree that supports only appending leaves and not updating existing leaves. diff --git a/yarn-project/merkle-tree/src/interfaces/indexed_tree.ts b/yarn-project/merkle-tree/src/interfaces/indexed_tree.ts index 44bd849479b..3e7c1b64c5c 100644 --- a/yarn-project/merkle-tree/src/interfaces/indexed_tree.ts +++ b/yarn-project/merkle-tree/src/interfaces/indexed_tree.ts @@ -1,9 +1,13 @@ -import { SiblingPath } from '@aztec/circuit-types'; -import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type SiblingPath } from '@aztec/circuit-types'; +import { type IndexedTreeLeaf, type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { IndexedTreeSnapshot, TreeSnapshot, TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js'; -import { AppendOnlyTree } from './append_only_tree.js'; -import { MerkleTree } from './merkle_tree.js'; +import { + type IndexedTreeSnapshot, + type TreeSnapshot, + type TreeSnapshotBuilder, +} from '../snapshots/snapshot_builder.js'; +import { type AppendOnlyTree } from './append_only_tree.js'; +import { type MerkleTree } from './merkle_tree.js'; /** * Factory for creating leaf preimages. diff --git a/yarn-project/merkle-tree/src/interfaces/merkle_tree.ts b/yarn-project/merkle-tree/src/interfaces/merkle_tree.ts index dd5c30a78f0..44fd8c4d4d7 100644 --- a/yarn-project/merkle-tree/src/interfaces/merkle_tree.ts +++ b/yarn-project/merkle-tree/src/interfaces/merkle_tree.ts @@ -1,5 +1,5 @@ -import { SiblingPath } from '@aztec/circuit-types'; -import { Bufferable } from '@aztec/foundation/serialize'; +import { type SiblingPath } from '@aztec/circuit-types'; +import { type Bufferable } from '@aztec/foundation/serialize'; /** * Defines the interface for a source of sibling paths. diff --git a/yarn-project/merkle-tree/src/interfaces/update_only_tree.ts b/yarn-project/merkle-tree/src/interfaces/update_only_tree.ts index f1e40d37dbd..06c142edbe2 100644 --- a/yarn-project/merkle-tree/src/interfaces/update_only_tree.ts +++ b/yarn-project/merkle-tree/src/interfaces/update_only_tree.ts @@ -1,7 +1,7 @@ -import { Bufferable } from '@aztec/foundation/serialize'; +import { type Bufferable } from '@aztec/foundation/serialize'; -import { TreeSnapshot, TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js'; -import { MerkleTree } from './merkle_tree.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js'; +import { type MerkleTree } from './merkle_tree.js'; /** * A Merkle tree that supports updates at arbitrary indices but not appending. diff --git a/yarn-project/merkle-tree/src/load_tree.ts b/yarn-project/merkle-tree/src/load_tree.ts index 043d242f43a..b2a1d396b49 100644 --- a/yarn-project/merkle-tree/src/load_tree.ts +++ b/yarn-project/merkle-tree/src/load_tree.ts @@ -1,8 +1,8 @@ -import { Bufferable, FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; +import { type Hasher } from '@aztec/types/interfaces'; -import { TreeBase, getTreeMeta } from './tree_base.js'; +import { type TreeBase, getTreeMeta } from './tree_base.js'; /** * Creates a new tree and sets its root, depth and size based on the meta data which are associated with the name. diff --git a/yarn-project/merkle-tree/src/new_tree.ts b/yarn-project/merkle-tree/src/new_tree.ts index a4d73af3693..d8040fc9f46 100644 --- a/yarn-project/merkle-tree/src/new_tree.ts +++ b/yarn-project/merkle-tree/src/new_tree.ts @@ -1,8 +1,8 @@ -import { Bufferable, FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; +import { type Hasher } from '@aztec/types/interfaces'; -import { TreeBase } from './tree_base.js'; +import { type TreeBase } from './tree_base.js'; /** * Creates a new tree. diff --git a/yarn-project/merkle-tree/src/pedersen.ts b/yarn-project/merkle-tree/src/pedersen.ts index b4a749e5a8a..b49c34c527e 100644 --- a/yarn-project/merkle-tree/src/pedersen.ts +++ b/yarn-project/merkle-tree/src/pedersen.ts @@ -1,5 +1,5 @@ import { pedersenHash } from '@aztec/foundation/crypto'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; /** * A helper class encapsulating Pedersen hash functionality. diff --git a/yarn-project/merkle-tree/src/sha_256.ts b/yarn-project/merkle-tree/src/sha_256.ts index 2945e0705d0..a1cba65c5ae 100644 --- a/yarn-project/merkle-tree/src/sha_256.ts +++ b/yarn-project/merkle-tree/src/sha_256.ts @@ -1,6 +1,6 @@ import { sha256 } from '@aztec/foundation/crypto'; import { truncateAndPad } from '@aztec/foundation/serialize'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; /** * A helper class encapsulating SHA256 hash functionality. diff --git a/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.test.ts b/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.test.ts index 84a205a7741..111f6de0439 100644 --- a/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.test.ts +++ b/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.test.ts @@ -1,6 +1,6 @@ import { randomBytes } from '@aztec/foundation/crypto'; -import { FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { Pedersen, StandardTree, newTree } from '../index.js'; diff --git a/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.ts b/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.ts index 2549bf1544b..eca6d258f36 100644 --- a/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.ts +++ b/yarn-project/merkle-tree/src/snapshots/append_only_snapshot.ts @@ -1,11 +1,11 @@ import { SiblingPath } from '@aztec/circuit-types'; -import { Bufferable, FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Bufferable, type FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; +import { type Hasher } from '@aztec/types/interfaces'; -import { AppendOnlyTree } from '../interfaces/append_only_tree.js'; -import { TreeBase } from '../tree_base.js'; -import { TreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js'; +import { type AppendOnlyTree } from '../interfaces/append_only_tree.js'; +import { type TreeBase } from '../tree_base.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js'; // stores the last block that modified this node const nodeModifiedAtBlockKey = (level: number, index: bigint) => `node:${level}:${index}:modifiedAtBlock`; diff --git a/yarn-project/merkle-tree/src/snapshots/base_full_snapshot.ts b/yarn-project/merkle-tree/src/snapshots/base_full_snapshot.ts index 89a3d5af722..63e41641622 100644 --- a/yarn-project/merkle-tree/src/snapshots/base_full_snapshot.ts +++ b/yarn-project/merkle-tree/src/snapshots/base_full_snapshot.ts @@ -1,9 +1,9 @@ import { SiblingPath } from '@aztec/circuit-types'; -import { Bufferable, FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type Bufferable, type FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; -import { TreeBase } from '../tree_base.js'; -import { TreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js'; +import { type TreeBase } from '../tree_base.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js'; /** * Metadata for a snapshot, per block diff --git a/yarn-project/merkle-tree/src/snapshots/full_snapshot.test.ts b/yarn-project/merkle-tree/src/snapshots/full_snapshot.test.ts index bc01c0b9ea1..486f633262a 100644 --- a/yarn-project/merkle-tree/src/snapshots/full_snapshot.test.ts +++ b/yarn-project/merkle-tree/src/snapshots/full_snapshot.test.ts @@ -1,6 +1,6 @@ import { randomBytes } from '@aztec/foundation/crypto'; -import { FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { Pedersen, StandardTree, newTree } from '../index.js'; diff --git a/yarn-project/merkle-tree/src/snapshots/full_snapshot.ts b/yarn-project/merkle-tree/src/snapshots/full_snapshot.ts index 9417dadf67b..dc519325f26 100644 --- a/yarn-project/merkle-tree/src/snapshots/full_snapshot.ts +++ b/yarn-project/merkle-tree/src/snapshots/full_snapshot.ts @@ -1,9 +1,9 @@ -import { Bufferable, FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; -import { TreeBase } from '../tree_base.js'; +import { type TreeBase } from '../tree_base.js'; import { BaseFullTreeSnapshot, BaseFullTreeSnapshotBuilder } from './base_full_snapshot.js'; -import { TreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js'; /** * Builds a full snapshot of a tree. This implementation works for any Merkle tree and stores diff --git a/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.test.ts b/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.test.ts index beedabaec47..aa374542a9f 100644 --- a/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.test.ts +++ b/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.test.ts @@ -1,7 +1,7 @@ import { Fr, NullifierLeaf, NullifierLeafPreimage } from '@aztec/circuits.js'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { Pedersen, newTree } from '../index.js'; import { StandardIndexedTreeWithAppend } from '../standard_indexed_tree/test/standard_indexed_tree_with_append.js'; diff --git a/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.ts b/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.ts index c608daa1118..c39108239d9 100644 --- a/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.ts +++ b/yarn-project/merkle-tree/src/snapshots/indexed_tree_snapshot.ts @@ -1,10 +1,10 @@ -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; -import { IndexedTree, PreimageFactory } from '../interfaces/indexed_tree.js'; -import { TreeBase } from '../tree_base.js'; +import { type IndexedTree, type PreimageFactory } from '../interfaces/indexed_tree.js'; +import { type TreeBase } from '../tree_base.js'; import { BaseFullTreeSnapshot, BaseFullTreeSnapshotBuilder } from './base_full_snapshot.js'; -import { IndexedTreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js'; +import { type IndexedTreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js'; const snapshotLeafValue = (node: Buffer, index: bigint) => 'snapshot:leaf:' + node.toString('hex') + ':' + index; diff --git a/yarn-project/merkle-tree/src/snapshots/snapshot_builder.ts b/yarn-project/merkle-tree/src/snapshots/snapshot_builder.ts index bfdc3065846..5821ae95104 100644 --- a/yarn-project/merkle-tree/src/snapshots/snapshot_builder.ts +++ b/yarn-project/merkle-tree/src/snapshots/snapshot_builder.ts @@ -1,6 +1,6 @@ -import { SiblingPath } from '@aztec/circuit-types'; -import { Bufferable } from '@aztec/foundation/serialize'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type SiblingPath } from '@aztec/circuit-types'; +import { type Bufferable } from '@aztec/foundation/serialize'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; /** * An interface for a tree that can record snapshots of its contents. diff --git a/yarn-project/merkle-tree/src/snapshots/snapshot_builder_test_suite.ts b/yarn-project/merkle-tree/src/snapshots/snapshot_builder_test_suite.ts index 4dcf97bd5b4..b1bcd9a8fa1 100644 --- a/yarn-project/merkle-tree/src/snapshots/snapshot_builder_test_suite.ts +++ b/yarn-project/merkle-tree/src/snapshots/snapshot_builder_test_suite.ts @@ -1,10 +1,10 @@ import { randomBigInt } from '@aztec/foundation/crypto'; -import { Bufferable } from '@aztec/foundation/serialize'; +import { type Bufferable } from '@aztec/foundation/serialize'; import { jest } from '@jest/globals'; -import { TreeBase } from '../tree_base.js'; -import { TreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js'; +import { type TreeBase } from '../tree_base.js'; +import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js'; jest.setTimeout(50_000); diff --git a/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.test.ts b/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.test.ts index 4d11aa49359..c7a97acffee 100644 --- a/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.test.ts +++ b/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.test.ts @@ -1,12 +1,12 @@ import { SiblingPath } from '@aztec/circuit-types'; import { randomBigInt, randomBytes } from '@aztec/foundation/crypto'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { INITIAL_LEAF, newTree } from '../index.js'; -import { UpdateOnlyTree } from '../interfaces/update_only_tree.js'; +import { type UpdateOnlyTree } from '../interfaces/update_only_tree.js'; import { loadTree } from '../load_tree.js'; import { Pedersen } from '../pedersen.js'; import { standardBasedTreeTestSuite } from '../test/standard_based_test_suite.js'; diff --git a/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.ts b/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.ts index 646f01a2412..3ea1a8d9eb6 100644 --- a/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.ts +++ b/yarn-project/merkle-tree/src/sparse_tree/sparse_tree.ts @@ -1,8 +1,8 @@ -import { Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; -import { UpdateOnlyTree } from '../interfaces/update_only_tree.js'; +import { type UpdateOnlyTree } from '../interfaces/update_only_tree.js'; import { FullTreeSnapshotBuilder } from '../snapshots/full_snapshot.js'; -import { TreeSnapshot } from '../snapshots/snapshot_builder.js'; +import { type TreeSnapshot } from '../snapshots/snapshot_builder.js'; import { INITIAL_LEAF, TreeBase } from '../tree_base.js'; /** diff --git a/yarn-project/merkle-tree/src/standard_indexed_tree/standard_indexed_tree.ts b/yarn-project/merkle-tree/src/standard_indexed_tree/standard_indexed_tree.ts index 42e9a3cbfbe..cfe3bc3ebdd 100644 --- a/yarn-project/merkle-tree/src/standard_indexed_tree/standard_indexed_tree.ts +++ b/yarn-project/merkle-tree/src/standard_indexed_tree/standard_indexed_tree.ts @@ -1,15 +1,20 @@ import { SiblingPath } from '@aztec/circuit-types'; -import { TreeInsertionStats } from '@aztec/circuit-types/stats'; +import { type TreeInsertionStats } from '@aztec/circuit-types/stats'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; -import { FromBuffer } from '@aztec/foundation/serialize'; +import { type FromBuffer } from '@aztec/foundation/serialize'; import { Timer } from '@aztec/foundation/timer'; -import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; -import { Hasher } from '@aztec/types/interfaces'; - -import { BatchInsertionResult, IndexedTree, LowLeafWitnessData, PreimageFactory } from '../interfaces/indexed_tree.js'; +import { type IndexedTreeLeaf, type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; +import { type Hasher } from '@aztec/types/interfaces'; + +import { + type BatchInsertionResult, + type IndexedTree, + type LowLeafWitnessData, + type PreimageFactory, +} from '../interfaces/indexed_tree.js'; import { IndexedTreeSnapshotBuilder } from '../snapshots/indexed_tree_snapshot.js'; -import { IndexedTreeSnapshot } from '../snapshots/snapshot_builder.js'; +import { type IndexedTreeSnapshot } from '../snapshots/snapshot_builder.js'; import { TreeBase } from '../tree_base.js'; export const buildDbKeyForPreimage = (name: string, index: bigint) => { diff --git a/yarn-project/merkle-tree/src/standard_indexed_tree/test/standard_indexed_tree.test.ts b/yarn-project/merkle-tree/src/standard_indexed_tree/test/standard_indexed_tree.test.ts index a605e19025e..0ed6196c0e9 100644 --- a/yarn-project/merkle-tree/src/standard_indexed_tree/test/standard_indexed_tree.test.ts +++ b/yarn-project/merkle-tree/src/standard_indexed_tree/test/standard_indexed_tree.test.ts @@ -7,12 +7,12 @@ import { PublicDataTreeLeafPreimage, } from '@aztec/circuits.js'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; -import { FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; -import { INITIAL_LEAF, MerkleTree, Pedersen, loadTree, newTree } from '../../index.js'; +import { INITIAL_LEAF, type MerkleTree, Pedersen, loadTree, newTree } from '../../index.js'; import { treeTestSuite } from '../../test/test_suite.js'; import { StandardIndexedTreeWithAppend } from './standard_indexed_tree_with_append.js'; diff --git a/yarn-project/merkle-tree/src/standard_tree/standard_tree.test.ts b/yarn-project/merkle-tree/src/standard_tree/standard_tree.test.ts index baf96a21df9..cd946ac771a 100644 --- a/yarn-project/merkle-tree/src/standard_tree/standard_tree.test.ts +++ b/yarn-project/merkle-tree/src/standard_tree/standard_tree.test.ts @@ -1,8 +1,8 @@ import { randomBytes } from '@aztec/foundation/crypto'; -import { FromBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type FromBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { loadTree } from '../load_tree.js'; import { newTree } from '../new_tree.js'; diff --git a/yarn-project/merkle-tree/src/standard_tree/standard_tree.ts b/yarn-project/merkle-tree/src/standard_tree/standard_tree.ts index 45c8cc6a6ce..fe27a0fb7a5 100644 --- a/yarn-project/merkle-tree/src/standard_tree/standard_tree.ts +++ b/yarn-project/merkle-tree/src/standard_tree/standard_tree.ts @@ -1,10 +1,10 @@ -import { TreeInsertionStats } from '@aztec/circuit-types/stats'; -import { Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type TreeInsertionStats } from '@aztec/circuit-types/stats'; +import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize'; import { Timer } from '@aztec/foundation/timer'; -import { AppendOnlyTree } from '../interfaces/append_only_tree.js'; +import { type AppendOnlyTree } from '../interfaces/append_only_tree.js'; import { AppendOnlySnapshotBuilder } from '../snapshots/append_only_snapshot.js'; -import { TreeSnapshot } from '../snapshots/snapshot_builder.js'; +import { type TreeSnapshot } from '../snapshots/snapshot_builder.js'; import { TreeBase } from '../tree_base.js'; /** diff --git a/yarn-project/merkle-tree/src/test/standard_based_test_suite.ts b/yarn-project/merkle-tree/src/test/standard_based_test_suite.ts index b544b661c5e..a2533ad9e6d 100644 --- a/yarn-project/merkle-tree/src/test/standard_based_test_suite.ts +++ b/yarn-project/merkle-tree/src/test/standard_based_test_suite.ts @@ -1,12 +1,12 @@ import { SiblingPath } from '@aztec/circuit-types'; import { randomBytes } from '@aztec/foundation/crypto'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { INITIAL_LEAF, Pedersen } from '../index.js'; -import { AppendOnlyTree } from '../interfaces/append_only_tree.js'; -import { UpdateOnlyTree } from '../interfaces/update_only_tree.js'; +import { type AppendOnlyTree } from '../interfaces/append_only_tree.js'; +import { type UpdateOnlyTree } from '../interfaces/update_only_tree.js'; import { appendLeaves } from './utils/append_leaves.js'; const TEST_TREE_DEPTH = 2; diff --git a/yarn-project/merkle-tree/src/test/test_suite.ts b/yarn-project/merkle-tree/src/test/test_suite.ts index 74b75c5dd43..dba34f92d8f 100644 --- a/yarn-project/merkle-tree/src/test/test_suite.ts +++ b/yarn-project/merkle-tree/src/test/test_suite.ts @@ -1,11 +1,11 @@ import { SiblingPath } from '@aztec/circuit-types'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { Pedersen } from '../index.js'; -import { AppendOnlyTree } from '../interfaces/append_only_tree.js'; -import { UpdateOnlyTree } from '../interfaces/update_only_tree.js'; +import { type AppendOnlyTree } from '../interfaces/append_only_tree.js'; +import { type UpdateOnlyTree } from '../interfaces/update_only_tree.js'; import { appendLeaves } from './utils/append_leaves.js'; const expectSameTrees = async ( diff --git a/yarn-project/merkle-tree/src/test/utils/append_leaves.ts b/yarn-project/merkle-tree/src/test/utils/append_leaves.ts index b1a221988bf..81c07c74165 100644 --- a/yarn-project/merkle-tree/src/test/utils/append_leaves.ts +++ b/yarn-project/merkle-tree/src/test/utils/append_leaves.ts @@ -1,5 +1,5 @@ -import { AppendOnlyTree } from '../../interfaces/append_only_tree.js'; -import { UpdateOnlyTree } from '../../interfaces/update_only_tree.js'; +import { type AppendOnlyTree } from '../../interfaces/append_only_tree.js'; +import { type UpdateOnlyTree } from '../../interfaces/update_only_tree.js'; export const appendLeaves = async (tree: AppendOnlyTree | UpdateOnlyTree, leaves: Buffer[]) => { if ('appendLeaves' in tree) { diff --git a/yarn-project/merkle-tree/src/tree_base.ts b/yarn-project/merkle-tree/src/tree_base.ts index db2ed88bfb2..cd20e8e0f2d 100644 --- a/yarn-project/merkle-tree/src/tree_base.ts +++ b/yarn-project/merkle-tree/src/tree_base.ts @@ -1,12 +1,12 @@ import { SiblingPath } from '@aztec/circuit-types'; import { toBigIntLE, toBufferLE } from '@aztec/foundation/bigint-buffer'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { Bufferable, FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; -import { AztecKVStore, AztecMap, AztecSingleton } from '@aztec/kv-store'; -import { Hasher } from '@aztec/types/interfaces'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type Bufferable, type FromBuffer, serializeToBuffer } from '@aztec/foundation/serialize'; +import { type AztecKVStore, type AztecMap, type AztecSingleton } from '@aztec/kv-store'; +import { type Hasher } from '@aztec/types/interfaces'; import { HasherWithStats } from './hasher_with_stats.js'; -import { MerkleTree } from './interfaces/merkle_tree.js'; +import { type MerkleTree } from './interfaces/merkle_tree.js'; const MAX_DEPTH = 254; diff --git a/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts b/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts index ee3513d6b67..4ac4ce2b4c3 100644 --- a/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts +++ b/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts @@ -1,6 +1,6 @@ -import { LogFn } from '@aztec/foundation/log'; +import { type LogFn } from '@aztec/foundation/log'; -import { Command } from 'commander'; +import { type Command } from 'commander'; import { dirname } from 'path'; export function addNoirCompilerCommanderActions(program: Command, log: LogFn = () => {}) { diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts index eabae4c11a1..3a2f1d92e2e 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts @@ -1,11 +1,11 @@ import { - ABIParameter, - ABIVariable, - ContractArtifact, - FunctionArtifact, + type ABIParameter, + type ABIVariable, + type ContractArtifact, + type FunctionArtifact, FunctionSelector, FunctionType, - StructType, + type StructType, } from '@aztec/foundation/abi'; import { times } from '@aztec/foundation/collection'; diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index da5e9cd6e8f..1a77f8916cb 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -1,12 +1,7 @@ import { type ABIParameter, - type BasicValue, type ContractArtifact, type FunctionArtifact, - type IntegerValue, - type StructValue, - type TupleValue, - type TypedStructFieldValue, getDefaultInitializer, isAztecAddressStruct, isEthAddressStruct, @@ -185,69 +180,6 @@ function generateAbiStatement(name: string, artifactImportPath: string) { return stmts.join('\n'); } -/** - * Generates a getter for the contract's storage layout. - * @param input - The contract artifact. - */ -function generateStorageLayoutGetter(input: ContractArtifact) { - const storage = input.outputs.globals.storage ? (input.outputs.globals.storage[0] as StructValue) : { fields: [] }; - const storageFields = storage.fields as TypedStructFieldValue[]; - const storageFieldsUnionType = storageFields.map(f => `'${f.name}'`).join(' | '); - const layout = storageFields - .map( - ({ - name, - value: { - fields: [slot, typ], - }, - }) => - `${name}: { - slot: new Fr(${(slot.value as IntegerValue).value}n), - typ: "${(typ.value as BasicValue<'string', string>).value}", - } - `, - ) - .join(',\n'); - return storageFields.length > 0 - ? ` - public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { - return { - ${layout} - } as ContractStorageLayout<${storageFieldsUnionType}>; - } - ` - : ''; -} - -/** - * Generates a getter for the contract notes - * @param input - The contract artifact. - */ -function generateNotesGetter(input: ContractArtifact) { - const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as TupleValue[]) : []; - const notesUnionType = notes.map(n => `'${(n.fields[1] as BasicValue<'string', string>).value}'`).join(' | '); - - const noteMetadata = notes - .map( - ({ fields: [id, typ] }) => - `${(typ as BasicValue<'string', string>).value}: { - id: new Fr(${(id as IntegerValue).value}n), - } - `, - ) - .join(',\n'); - return notes.length > 0 - ? ` - public static get notes(): ContractNotes<${notesUnionType}> { - const notes = this.artifact.outputs.globals.notes ? (this.artifact.outputs.globals.notes as any) : []; - return { - ${noteMetadata} - } as ContractNotes<${notesUnionType}>; - } - ` - : ''; -} - /** * Generates the typescript code to represent a contract. * @param input - The compiled Noir artifact. @@ -261,8 +193,6 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art const at = artifactImportPath && generateAt(input.name); const artifactStatement = artifactImportPath && generateAbiStatement(input.name, artifactImportPath); const artifactGetter = artifactImportPath && generateArtifactGetter(input.name); - const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input); - const notesGetter = artifactImportPath && generateNotesGetter(input); return ` /* Autogenerated file, do not edit! */ @@ -278,8 +208,6 @@ import { ContractFunctionInteraction, ContractInstanceWithAddress, ContractMethod, - ContractStorageLayout, - ContractNotes, DeployMethod, EthAddress, EthAddressLike, @@ -307,10 +235,6 @@ export class ${input.name}Contract extends ContractBase { ${artifactGetter} - ${storageLayoutGetter} - - ${notesGetter} - /** Type-safe wrappers for the public methods exposed by the contract. */ public methods!: { ${methods.join('\n')} diff --git a/yarn-project/noir-compiler/src/utils.ts b/yarn-project/noir-compiler/src/utils.ts index 7a93eda2518..6a097708b01 100644 --- a/yarn-project/noir-compiler/src/utils.ts +++ b/yarn-project/noir-compiler/src/utils.ts @@ -1,4 +1,4 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; /** * Checks if the given input looks like a valid ContractArtifact. The check is not exhaustive, diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index 65b8a78378c..cb7d5e1e941 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440100000000000000000000000000000000000000000000000000000000000000001b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe0000000000000000000000000000000000000000af9f8c4400000000000129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006405a2f172d23668f5d0e473fc6e20a7bc413ff8e25bf2f37a93c52944a9ca000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400cf1745125bf6bc7dfd0952044d8ec041a34c30484c7ae54b62190ba401ed4f00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2aea4cf50b44bff835585c789cc9a3da218ab694bbfac045c7d98903fa07f17e2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fa250c191116c5c384b5e1b0a5e9595e1a587a6a2eb0070e025d990c6140c650f588c65eb313ea390c4218be4f0b16f55fd4c0b698f155ff9e926b6ec31987f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440100000000000000000000000000000000000000000000000000000000000000001b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe0000000000000000000000000000000000000000af9f8c4400000000000129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006405a2f172d23668f5d0e473fc6e20a7bc413ff8e25bf2f37a93c52944a9ca000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400cf1745125bf6bc7dfd0952044d8ec041a34c30484c7ae54b62190ba401ed4f00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2aea4cf50b44bff835585c789cc9a3da218ab694bbfac045c7d98903fa07f17e2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fa250c191116c5c384b5e1b0a5e9595e1a587a6a2eb0070e025d990c6140c650f588c65eb313ea390c4218be4f0b16f55fd4c0b698f155ff9e926b6ec31987f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index 36a4e460001..abdf33a7ab4 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080d109eb0144373702b0884ca6fd311f532ec3069ceda18ce4ea6943ac9f44ea219729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002ce761f492d4cd1e04716beb3ec03610fc127e5e941abc34f6f81cfb4361bba71fe37d55e04c02ab4c4bd77a9f0d353537c0783895a08e32e4a923a49fa26932148ae7ed365399e8541720c7297453e6721ef288850730cecad40b08eb71f1e7097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd0906bca10119729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000421f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2ade7319c2af1088ff40b65dcbd2c33a9ec6b2ec9714702671d027225acde4c916f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2b0a05c5d781d619d9f365dd3d1ad613833d45fd61b7c1b7ff19c0eb1de71a4700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080d109eb0144373702b0884ca6fd311f532ec3069ceda18ce4ea6943ac9f44ea219729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002ce761f492d4cd1e04716beb3ec03610fc127e5e941abc34f6f81cfb4361bba71fe37d55e04c02ab4c4bd77a9f0d353537c0783895a08e32e4a923a49fa26932148ae7ed365399e8541720c7297453e6721ef288850730cecad40b08eb71f1e7097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd0906bca10119729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000421f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2ade7319c2af1088ff40b65dcbd2c33a9ec6b2ec9714702671d027225acde4c916f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2b0a05c5d781d619d9f365dd3d1ad613833d45fd61b7c1b7ff19c0eb1de71a4700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index a472db0a21f..485074a1922 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000abd4337bcdcbdf216eba2e0b858216d72437971ae2354052c10987ef1833f8b0d00b20e11d8f1af2c9fa2a6bc4a700213b85237423eee25c3231329e1a0c9282c14960355c61973b2491a51302b95207d8ef78ee00fb192158bbe6c7f8e1202063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000abd4337bcdcbdf216eba2e0b858216d72437971ae2354052c10987ef1833f8b0d00b20e11d8f1af2c9fa2a6bc4a700213b85237423eee25c3231329e1a0c9282c14960355c61973b2491a51302b95207d8ef78ee00fb192158bbe6c7f8e1202063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/yarn-project/noir-protocol-circuits-types/src/index.test.ts b/yarn-project/noir-protocol-circuits-types/src/index.test.ts index 3e381b6ba00..19e1c28c060 100644 --- a/yarn-project/noir-protocol-circuits-types/src/index.test.ts +++ b/yarn-project/noir-protocol-circuits-types/src/index.test.ts @@ -1,5 +1,5 @@ import { PrivateKernelInnerCircuitPrivateInputs, PrivateKernelTailCircuitPrivateInputs } from '@aztec/circuits.js'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { fileURLToPath } from '@aztec/foundation/url'; diff --git a/yarn-project/noir-protocol-circuits-types/src/index.ts b/yarn-project/noir-protocol-circuits-types/src/index.ts index e1ac1f4bcd1..8657f68680a 100644 --- a/yarn-project/noir-protocol-circuits-types/src/index.ts +++ b/yarn-project/noir-protocol-circuits-types/src/index.ts @@ -17,11 +17,15 @@ import { type RootRollupInputs, type RootRollupPublicInputs, } from '@aztec/circuits.js'; -import { NoirCompiledCircuit } from '@aztec/types/noir'; +import { type NoirCompiledCircuit } from '@aztec/types/noir'; -import { WasmBlackBoxFunctionSolver, createBlackBoxSolver, executeCircuitWithBlackBoxSolver } from '@noir-lang/acvm_js'; -import { Abi, abiDecode, abiEncode } from '@noir-lang/noirc_abi'; -import { WitnessMap } from '@noir-lang/types'; +import { + type WasmBlackBoxFunctionSolver, + createBlackBoxSolver, + executeCircuitWithBlackBoxSolver, +} from '@noir-lang/acvm_js'; +import { type Abi, abiDecode, abiEncode } from '@noir-lang/noirc_abi'; +import { type WitnessMap } from '@noir-lang/types'; import BaseParityJson from './target/parity_base.json' assert { type: 'json' }; import RootParityJson from './target/parity_root.json' assert { type: 'json' }; diff --git a/yarn-project/noir-protocol-circuits-types/src/noir_test_gen.test.ts b/yarn-project/noir-protocol-circuits-types/src/noir_test_gen.test.ts index 8082a6c7801..6453b0313e0 100644 --- a/yarn-project/noir-protocol-circuits-types/src/noir_test_gen.test.ts +++ b/yarn-project/noir-protocol-circuits-types/src/noir_test_gen.test.ts @@ -16,7 +16,7 @@ import { Fr } from '@aztec/foundation/fields'; import { setupCustomSnapshotSerializers } from '@aztec/foundation/testing'; import { openTmpStore } from '@aztec/kv-store/utils'; import { Pedersen, StandardTree } from '@aztec/merkle-tree'; -import { ContractClass, ContractInstance } from '@aztec/types/contracts'; +import { type ContractClass, type ContractInstance } from '@aztec/types/contracts'; describe('Data generation for noir tests', () => { setupCustomSnapshotSerializers(expect); diff --git a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts index 01dea16226c..d42d36f9092 100644 --- a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts @@ -1,6 +1,6 @@ -import { type AbiType } from '@aztec/foundation/abi'; +import { type ABIType } from '@aztec/foundation/abi'; import { createConsoleLogger } from '@aztec/foundation/log'; -import { NoirCompiledCircuit, NoirFunctionAbi } from '@aztec/types/noir'; +import { type NoirCompiledCircuit, type NoirFunctionAbi } from '@aztec/types/noir'; import fs from 'fs/promises'; @@ -50,7 +50,7 @@ function addIfUnique(item: PrimitiveTypesUsed) { * @param type - The ABI type to convert. * @returns The typescript code to define the type. */ -function abiTypeToTs(type: AbiType): string { +function abiTypeToTs(type: ABIType): string { switch (type.kind) { case 'integer': { let tsIntType = ''; @@ -107,7 +107,7 @@ function getLastComponentOfPath(str: string): string { * @param output - The set of structs that we have already generated bindings for. * @returns The TypeScript code to define the struct. */ -function generateStructInterfaces(type: AbiType, output: Set): string { +function generateStructInterfaces(type: ABIType, output: Set): string { let result = ''; // Edge case to handle the array of structs case. @@ -124,7 +124,7 @@ function generateStructInterfaces(type: AbiType, output: Set): string { // List of structs encountered while viewing this type that we need to generate // bindings for. - const typesEncountered = new Set(); + const typesEncountered = new Set(); // Codegen the struct and then its fields, so that the structs fields // are defined before the struct itself. diff --git a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts index aa6a115ecd6..baf959d05f9 100644 --- a/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts +++ b/yarn-project/noir-protocol-circuits-types/src/type_conversion.ts @@ -1,11 +1,11 @@ import { - ARCHIVE_HEIGHT, + type ARCHIVE_HEIGHT, AggregationObject, AppendOnlyTreeSnapshot, AztecAddress, BaseOrMergeRollupPublicInputs, - BaseParityInputs, - BaseRollupInputs, + type BaseParityInputs, + type BaseRollupInputs, CallContext, CallRequest, CallerContext, @@ -13,15 +13,15 @@ import { CombinedConstantData, ConstantRollupData, ContentCommitment, - ContractStorageRead, - ContractStorageUpdateRequest, + type ContractStorageRead, + type ContractStorageUpdateRequest, EthAddress, - FUNCTION_TREE_HEIGHT, + type FUNCTION_TREE_HEIGHT, Fr, FunctionData, FunctionSelector, GlobalVariables, - GrumpkinPrivateKey, + type GrumpkinPrivateKey, GrumpkinScalar, Header, KernelCircuitPublicInputs, @@ -39,23 +39,23 @@ import { MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MaxBlockNumber, - MembershipWitness, - MergeRollupInputs, - NULLIFIER_TREE_HEIGHT, + type MembershipWitness, + type MergeRollupInputs, + type NULLIFIER_TREE_HEIGHT, NUM_BYTES_PER_SHA256, - NonMembershipHint, - NoteHashReadRequestMembershipWitness, + type NonMembershipHint, + type NoteHashReadRequestMembershipWitness, NullifierKeyValidationRequest, NullifierKeyValidationRequestContext, - NullifierLeafPreimage, - NullifierNonExistentReadRequestHints, - NullifierReadRequestHints, - PUBLIC_DATA_TREE_HEIGHT, + type NullifierLeafPreimage, + type NullifierNonExistentReadRequestHints, + type NullifierReadRequestHints, + type PUBLIC_DATA_TREE_HEIGHT, ParityPublicInputs, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PartialStateReference, - PendingReadHint, + type PendingReadHint, Point, type PreviousRollupData, PrivateAccumulatedData, @@ -73,36 +73,36 @@ import { type PublicCallStackItem, type PublicCircuitPublicInputs, PublicDataRead, - PublicDataTreeLeaf, - PublicDataTreeLeafPreimage, + type PublicDataTreeLeaf, + type PublicDataTreeLeafPreimage, PublicDataUpdateRequest, - PublicKernelCircuitPrivateInputs, + type PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, - PublicKernelData, - PublicKernelTailCircuitPrivateInputs, + type PublicKernelData, + type PublicKernelTailCircuitPrivateInputs, ReadRequest, ReadRequestContext, - ReadRequestStatus, + type ReadRequestStatus, RevertCode, RollupValidationRequests, - RootParityInput, - RootParityInputs, - RootRollupInputs, + type RootParityInput, + type RootParityInputs, + type RootRollupInputs, RootRollupPublicInputs, - SettledReadHint, + type SettledReadHint, SideEffect, SideEffectLinkedToNoteHash, - StateDiffHints, + type StateDiffHints, StateReference, TxContext, - TxRequest, + type TxRequest, ValidationRequests, } from '@aztec/circuits.js'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; -import { Tuple, mapTuple, toTruncField } from '@aztec/foundation/serialize'; +import { type Tuple, mapTuple, toTruncField } from '@aztec/foundation/serialize'; -import { BaseParityInputs as BaseParityInputsNoir } from './types/parity_base_types.js'; -import { RootParityInputs as RootParityInputsNoir } from './types/parity_root_types.js'; +import { type BaseParityInputs as BaseParityInputsNoir } from './types/parity_base_types.js'; +import { type RootParityInputs as RootParityInputsNoir } from './types/parity_root_types.js'; import { type CallContext as CallContextNoir, type CallRequest as CallRequestNoir, @@ -153,13 +153,13 @@ import { type PublicKernelData as PublicKernelDataNoir, } from './types/public_kernel_app_logic_types.js'; import { - PublicCallData as PublicCallDataNoir, - PublicCallStackItem as PublicCallStackItemNoir, - PublicCircuitPublicInputs as PublicCircuitPublicInputsNoir, - PublicKernelCircuitPublicInputs as PublicKernelCircuitPublicInputsNoir, - PublicKernelSetupCircuitPrivateInputs as PublicKernelSetupCircuitPrivateInputsNoir, - StorageRead as StorageReadNoir, - StorageUpdateRequest as StorageUpdateRequestNoir, + type PublicCallData as PublicCallDataNoir, + type PublicCallStackItem as PublicCallStackItemNoir, + type PublicCircuitPublicInputs as PublicCircuitPublicInputsNoir, + type PublicKernelCircuitPublicInputs as PublicKernelCircuitPublicInputsNoir, + type PublicKernelSetupCircuitPrivateInputs as PublicKernelSetupCircuitPrivateInputsNoir, + type StorageRead as StorageReadNoir, + type StorageUpdateRequest as StorageUpdateRequestNoir, } from './types/public_kernel_setup_types.js'; import { type NullifierNonExistentReadRequestHints as NullifierNonExistentReadRequestHintsNoir, @@ -179,22 +179,22 @@ import { type PublicDataTreeLeafPreimage as PublicDataTreeLeafPreimageNoir, type StateDiffHints as StateDiffHintsNoir, } from './types/rollup_base_types.js'; -import { MergeRollupInputs as MergeRollupInputsNoir } from './types/rollup_merge_types.js'; +import { type MergeRollupInputs as MergeRollupInputsNoir } from './types/rollup_merge_types.js'; import { - AppendOnlyTreeSnapshot as AppendOnlyTreeSnapshotNoir, - BaseOrMergeRollupPublicInputs as BaseOrMergeRollupPublicInputsNoir, - ConstantRollupData as ConstantRollupDataNoir, - ContentCommitment as ContentCommitmentNoir, - Field, - GlobalVariables as GlobalVariablesNoir, - Header as HeaderNoir, - ParityPublicInputs as ParityPublicInputsNoir, - PartialStateReference as PartialStateReferenceNoir, - PreviousRollupData as PreviousRollupDataNoir, - RootParityInput as RootParityInputNoir, - RootRollupInputs as RootRollupInputsNoir, - RootRollupPublicInputs as RootRollupPublicInputsNoir, - StateReference as StateReferenceNoir, + type AppendOnlyTreeSnapshot as AppendOnlyTreeSnapshotNoir, + type BaseOrMergeRollupPublicInputs as BaseOrMergeRollupPublicInputsNoir, + type ConstantRollupData as ConstantRollupDataNoir, + type ContentCommitment as ContentCommitmentNoir, + type Field, + type GlobalVariables as GlobalVariablesNoir, + type Header as HeaderNoir, + type ParityPublicInputs as ParityPublicInputsNoir, + type PartialStateReference as PartialStateReferenceNoir, + type PreviousRollupData as PreviousRollupDataNoir, + type RootParityInput as RootParityInputNoir, + type RootRollupInputs as RootRollupInputsNoir, + type RootRollupPublicInputs as RootRollupPublicInputsNoir, + type StateReference as StateReferenceNoir, } from './types/rollup_root_types.js'; /* eslint-disable camelcase */ diff --git a/yarn-project/p2p/src/bootstrap/bootstrap.ts b/yarn-project/p2p/src/bootstrap/bootstrap.ts index 055f8ac6e14..e70e871fbd6 100644 --- a/yarn-project/p2p/src/bootstrap/bootstrap.ts +++ b/yarn-project/p2p/src/bootstrap/bootstrap.ts @@ -6,11 +6,11 @@ import type { ServiceMap } from '@libp2p/interface-libp2p'; import { kadDHT } from '@libp2p/kad-dht'; import { mplex } from '@libp2p/mplex'; import { tcp } from '@libp2p/tcp'; -import { Libp2p, Libp2pOptions, ServiceFactoryMap, createLibp2p } from 'libp2p'; +import { type Libp2p, type Libp2pOptions, type ServiceFactoryMap, createLibp2p } from 'libp2p'; import { identifyService } from 'libp2p/identify'; import { format } from 'util'; -import { P2PConfig } from '../config.js'; +import { type P2PConfig } from '../config.js'; import { createLibP2PPeerId } from '../service/index.js'; /** diff --git a/yarn-project/p2p/src/client/index.ts b/yarn-project/p2p/src/client/index.ts index b2411e80118..a31752544ef 100644 --- a/yarn-project/p2p/src/client/index.ts +++ b/yarn-project/p2p/src/client/index.ts @@ -1,11 +1,11 @@ -import { L2BlockSource } from '@aztec/circuit-types'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type L2BlockSource } from '@aztec/circuit-types'; +import { type AztecKVStore } from '@aztec/kv-store'; import { P2PClient } from '../client/p2p_client.js'; -import { P2PConfig } from '../config.js'; +import { type P2PConfig } from '../config.js'; import { DummyP2PService } from '../service/dummy_service.js'; import { LibP2PService } from '../service/index.js'; -import { TxPool } from '../tx_pool/index.js'; +import { type TxPool } from '../tx_pool/index.js'; export * from './p2p_client.js'; diff --git a/yarn-project/p2p/src/client/mocks.ts b/yarn-project/p2p/src/client/mocks.ts index 57e395a87a6..533017b587c 100644 --- a/yarn-project/p2p/src/client/mocks.ts +++ b/yarn-project/p2p/src/client/mocks.ts @@ -1,4 +1,4 @@ -import { L2Block, L2BlockSource, TxEffect, TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; +import { L2Block, type L2BlockSource, type TxEffect, type TxHash, TxReceipt, TxStatus } from '@aztec/circuit-types'; import { EthAddress } from '@aztec/circuits.js'; /** diff --git a/yarn-project/p2p/src/client/p2p_client.test.ts b/yarn-project/p2p/src/client/p2p_client.test.ts index d0c9ba8da8a..91c0a5561f0 100644 --- a/yarn-project/p2p/src/client/p2p_client.test.ts +++ b/yarn-project/p2p/src/client/p2p_client.test.ts @@ -1,11 +1,11 @@ -import { L2BlockSource, mockTx } from '@aztec/circuit-types'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type L2BlockSource, mockTx } from '@aztec/circuit-types'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { expect, jest } from '@jest/globals'; -import { P2PService } from '../index.js'; -import { TxPool } from '../tx_pool/index.js'; +import { type P2PService } from '../index.js'; +import { type TxPool } from '../tx_pool/index.js'; import { MockBlockSource } from './mocks.js'; import { P2PClient } from './p2p_client.js'; diff --git a/yarn-project/p2p/src/client/p2p_client.ts b/yarn-project/p2p/src/client/p2p_client.ts index c93931afc1e..920efc8ea37 100644 --- a/yarn-project/p2p/src/client/p2p_client.ts +++ b/yarn-project/p2p/src/client/p2p_client.ts @@ -1,11 +1,18 @@ -import { L2Block, L2BlockContext, L2BlockDownloader, L2BlockSource, Tx, TxHash } from '@aztec/circuit-types'; +import { + type L2Block, + L2BlockContext, + L2BlockDownloader, + type L2BlockSource, + type Tx, + type TxHash, +} from '@aztec/circuit-types'; import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants'; import { createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore, AztecSingleton } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store'; import { getP2PConfigEnvVars } from '../config.js'; -import { P2PService } from '../service/service.js'; -import { TxPool } from '../tx_pool/index.js'; +import { type P2PService } from '../service/service.js'; +import { type TxPool } from '../tx_pool/index.js'; /** * Enum defining the possible states of the p2p client. diff --git a/yarn-project/p2p/src/service/dummy_service.ts b/yarn-project/p2p/src/service/dummy_service.ts index bfc6b1d1364..aff96c9cdf8 100644 --- a/yarn-project/p2p/src/service/dummy_service.ts +++ b/yarn-project/p2p/src/service/dummy_service.ts @@ -1,6 +1,6 @@ -import { Tx, TxHash } from '@aztec/circuit-types'; +import { type Tx, type TxHash } from '@aztec/circuit-types'; -import { P2PService } from './service.js'; +import { type P2PService } from './service.js'; /** * A dummy implementation of the P2P Service. diff --git a/yarn-project/p2p/src/service/known_txs.test.ts b/yarn-project/p2p/src/service/known_txs.test.ts index 68ca52b7ec3..a0c2772feec 100644 --- a/yarn-project/p2p/src/service/known_txs.test.ts +++ b/yarn-project/p2p/src/service/known_txs.test.ts @@ -1,7 +1,7 @@ import { randomTxHash } from '@aztec/circuit-types'; import { expect } from '@jest/globals'; -import { Ed25519PeerId, PeerId } from '@libp2p/interface-peer-id'; +import { type Ed25519PeerId, type PeerId } from '@libp2p/interface-peer-id'; import { mock } from 'jest-mock-extended'; import { KnownTxLookup } from './known_txs.js'; diff --git a/yarn-project/p2p/src/service/known_txs.ts b/yarn-project/p2p/src/service/known_txs.ts index b9a38f2cd0c..6ee37d7d697 100644 --- a/yarn-project/p2p/src/service/known_txs.ts +++ b/yarn-project/p2p/src/service/known_txs.ts @@ -1,4 +1,4 @@ -import { PeerId } from '@libp2p/interface-peer-id'; +import { type PeerId } from '@libp2p/interface-peer-id'; /** * Keeps a record of which Peers have 'seen' which transactions. diff --git a/yarn-project/p2p/src/service/libp2p_service.ts b/yarn-project/p2p/src/service/libp2p_service.ts index 4237307d963..4e73de1e5b0 100644 --- a/yarn-project/p2p/src/service/libp2p_service.ts +++ b/yarn-project/p2p/src/service/libp2p_service.ts @@ -1,4 +1,4 @@ -import { Tx, TxHash } from '@aztec/circuit-types'; +import { type Tx, type TxHash } from '@aztec/circuit-types'; import { SerialQueue } from '@aztec/foundation/fifo'; import { createDebugLogger } from '@aztec/foundation/log'; @@ -6,20 +6,20 @@ import { noise } from '@chainsafe/libp2p-noise'; import { yamux } from '@chainsafe/libp2p-yamux'; import { bootstrap } from '@libp2p/bootstrap'; import type { ServiceMap } from '@libp2p/interface-libp2p'; -import { PeerId } from '@libp2p/interface-peer-id'; -import { IncomingStreamData } from '@libp2p/interface/stream-handler'; -import { DualKadDHT, kadDHT } from '@libp2p/kad-dht'; +import { type PeerId } from '@libp2p/interface-peer-id'; +import { type IncomingStreamData } from '@libp2p/interface/stream-handler'; +import { type DualKadDHT, kadDHT } from '@libp2p/kad-dht'; import { mplex } from '@libp2p/mplex'; import { createFromJSON, createSecp256k1PeerId, exportToProtobuf } from '@libp2p/peer-id-factory'; import { tcp } from '@libp2p/tcp'; import { pipe } from 'it-pipe'; -import { Libp2p, Libp2pOptions, ServiceFactoryMap, createLibp2p } from 'libp2p'; +import { type Libp2p, type Libp2pOptions, type ServiceFactoryMap, createLibp2p } from 'libp2p'; import { identifyService } from 'libp2p/identify'; -import { P2PConfig } from '../config.js'; -import { TxPool } from '../tx_pool/index.js'; +import { type P2PConfig } from '../config.js'; +import { type TxPool } from '../tx_pool/index.js'; import { KnownTxLookup } from './known_txs.js'; -import { P2PService } from './service.js'; +import { type P2PService } from './service.js'; import { Messages, createGetTransactionsRequestMessage, diff --git a/yarn-project/p2p/src/service/service.ts b/yarn-project/p2p/src/service/service.ts index 7c2410b129a..fc9580d9b6d 100644 --- a/yarn-project/p2p/src/service/service.ts +++ b/yarn-project/p2p/src/service/service.ts @@ -1,4 +1,4 @@ -import { Tx, TxHash } from '@aztec/circuit-types'; +import { type Tx, type TxHash } from '@aztec/circuit-types'; /** * The interface for a P2P service implementation. diff --git a/yarn-project/p2p/src/service/tx_messages.test.ts b/yarn-project/p2p/src/service/tx_messages.test.ts index eedaca26560..6f097e36337 100644 --- a/yarn-project/p2p/src/service/tx_messages.test.ts +++ b/yarn-project/p2p/src/service/tx_messages.test.ts @@ -1,4 +1,4 @@ -import { Tx, mockTx, randomTxHash } from '@aztec/circuit-types'; +import { type Tx, mockTx, randomTxHash } from '@aztec/circuit-types'; import { expect } from '@jest/globals'; diff --git a/yarn-project/p2p/src/tx_pool/aztec_kv_tx_pool.ts b/yarn-project/p2p/src/tx_pool/aztec_kv_tx_pool.ts index fd1eba930e2..13729720692 100644 --- a/yarn-project/p2p/src/tx_pool/aztec_kv_tx_pool.ts +++ b/yarn-project/p2p/src/tx_pool/aztec_kv_tx_pool.ts @@ -1,9 +1,9 @@ import { Tx, TxHash } from '@aztec/circuit-types'; -import { TxAddedToPoolStats } from '@aztec/circuit-types/stats'; -import { Logger, createDebugLogger } from '@aztec/foundation/log'; -import { AztecKVStore, AztecMap } from '@aztec/kv-store'; +import { type TxAddedToPoolStats } from '@aztec/circuit-types/stats'; +import { type Logger, createDebugLogger } from '@aztec/foundation/log'; +import { type AztecKVStore, type AztecMap } from '@aztec/kv-store'; -import { TxPool } from './tx_pool.js'; +import { type TxPool } from './tx_pool.js'; /** * In-memory implementation of the Transaction Pool. diff --git a/yarn-project/p2p/src/tx_pool/memory_tx_pool.ts b/yarn-project/p2p/src/tx_pool/memory_tx_pool.ts index 8f4aad46a38..27aa1683fff 100644 --- a/yarn-project/p2p/src/tx_pool/memory_tx_pool.ts +++ b/yarn-project/p2p/src/tx_pool/memory_tx_pool.ts @@ -1,8 +1,8 @@ import { Tx, TxHash } from '@aztec/circuit-types'; -import { TxAddedToPoolStats } from '@aztec/circuit-types/stats'; +import { type TxAddedToPoolStats } from '@aztec/circuit-types/stats'; import { createDebugLogger } from '@aztec/foundation/log'; -import { TxPool } from './tx_pool.js'; +import { type TxPool } from './tx_pool.js'; /** * In-memory implementation of the Transaction Pool. diff --git a/yarn-project/p2p/src/tx_pool/tx_pool.ts b/yarn-project/p2p/src/tx_pool/tx_pool.ts index 659f5a6d0ca..0ca939f7989 100644 --- a/yarn-project/p2p/src/tx_pool/tx_pool.ts +++ b/yarn-project/p2p/src/tx_pool/tx_pool.ts @@ -1,4 +1,4 @@ -import { Tx, TxHash } from '@aztec/circuit-types'; +import { type Tx, type TxHash } from '@aztec/circuit-types'; /** * Interface of a transaction pool. The pool includes tx requests and is kept up-to-date by a P2P client. diff --git a/yarn-project/p2p/src/tx_pool/tx_pool_test_suite.ts b/yarn-project/p2p/src/tx_pool/tx_pool_test_suite.ts index e2e9f74156e..ea08bd1b475 100644 --- a/yarn-project/p2p/src/tx_pool/tx_pool_test_suite.ts +++ b/yarn-project/p2p/src/tx_pool/tx_pool_test_suite.ts @@ -1,6 +1,6 @@ import { mockTx } from '@aztec/circuit-types'; -import { TxPool } from './tx_pool.js'; +import { type TxPool } from './tx_pool.js'; /** * Tests a TxPool implementation. diff --git a/yarn-project/protocol-contracts/src/class-registerer/artifact.ts b/yarn-project/protocol-contracts/src/class-registerer/artifact.ts index 2a3ca423ce6..433bf7b269c 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/artifact.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/artifact.ts @@ -1,5 +1,5 @@ import { loadContractArtifact } from '@aztec/types/abi'; -import { NoirCompiledContract } from '@aztec/types/noir'; +import { type NoirCompiledContract } from '@aztec/types/noir'; import ContractClassRegistererJson from '../artifacts/ContractClassRegisterer.json' assert { type: 'json' }; diff --git a/yarn-project/protocol-contracts/src/class-registerer/index.ts b/yarn-project/protocol-contracts/src/class-registerer/index.ts index ea85f6f6acf..d5f5fcbff00 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/index.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/index.ts @@ -1,6 +1,6 @@ -import { AztecAddress } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/circuits.js'; -import { ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; +import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; import { ContractClassRegistererArtifact } from './artifact.js'; /** Returns the canonical deployment of the class registerer contract. */ diff --git a/yarn-project/protocol-contracts/src/gas-token/artifact.ts b/yarn-project/protocol-contracts/src/gas-token/artifact.ts index 042b3701e49..0dbaf8c2d74 100644 --- a/yarn-project/protocol-contracts/src/gas-token/artifact.ts +++ b/yarn-project/protocol-contracts/src/gas-token/artifact.ts @@ -1,5 +1,5 @@ import { loadContractArtifact } from '@aztec/types/abi'; -import { NoirCompiledContract } from '@aztec/types/noir'; +import { type NoirCompiledContract } from '@aztec/types/noir'; import GasTokenJson from '../artifacts/GasToken.json' assert { type: 'json' }; diff --git a/yarn-project/protocol-contracts/src/gas-token/index.ts b/yarn-project/protocol-contracts/src/gas-token/index.ts index 2ecfe6c8ed1..d38126bf262 100644 --- a/yarn-project/protocol-contracts/src/gas-token/index.ts +++ b/yarn-project/protocol-contracts/src/gas-token/index.ts @@ -1,6 +1,6 @@ -import { AztecAddress, EthAddress, Point } from '@aztec/circuits.js'; +import { type AztecAddress, type EthAddress, Point } from '@aztec/circuits.js'; -import { ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; +import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; import { GasTokenArtifact } from './artifact.js'; /** Returns the canonical deployment of the gas token. */ diff --git a/yarn-project/protocol-contracts/src/instance-deployer/artifact.ts b/yarn-project/protocol-contracts/src/instance-deployer/artifact.ts index 3ae928ab045..809e35873ac 100644 --- a/yarn-project/protocol-contracts/src/instance-deployer/artifact.ts +++ b/yarn-project/protocol-contracts/src/instance-deployer/artifact.ts @@ -1,5 +1,5 @@ import { loadContractArtifact } from '@aztec/types/abi'; -import { NoirCompiledContract } from '@aztec/types/noir'; +import { type NoirCompiledContract } from '@aztec/types/noir'; import ContractInstanceDeployerJson from '../artifacts/ContractInstanceDeployer.json' assert { type: 'json' }; diff --git a/yarn-project/protocol-contracts/src/instance-deployer/index.ts b/yarn-project/protocol-contracts/src/instance-deployer/index.ts index 1a0942a9f2c..7a3101fa789 100644 --- a/yarn-project/protocol-contracts/src/instance-deployer/index.ts +++ b/yarn-project/protocol-contracts/src/instance-deployer/index.ts @@ -1,6 +1,6 @@ import { AztecAddress, DEPLOYER_CONTRACT_ADDRESS } from '@aztec/circuits.js'; -import { ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; +import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; import { ContractInstanceDeployerArtifact } from './artifact.js'; /** Returns the canonical deployment of the instance deployer contract. */ diff --git a/yarn-project/protocol-contracts/src/multi-call-entrypoint/artifact.ts b/yarn-project/protocol-contracts/src/multi-call-entrypoint/artifact.ts index ede18eb397b..b3cf23f9f41 100644 --- a/yarn-project/protocol-contracts/src/multi-call-entrypoint/artifact.ts +++ b/yarn-project/protocol-contracts/src/multi-call-entrypoint/artifact.ts @@ -1,5 +1,5 @@ import { loadContractArtifact } from '@aztec/types/abi'; -import { NoirCompiledContract } from '@aztec/types/noir'; +import { type NoirCompiledContract } from '@aztec/types/noir'; import MultiCallEntrypoint from '../artifacts/MultiCallEntrypoint.json' assert { type: 'json' }; diff --git a/yarn-project/protocol-contracts/src/multi-call-entrypoint/index.ts b/yarn-project/protocol-contracts/src/multi-call-entrypoint/index.ts index c9298b886f6..1d33cee36ed 100644 --- a/yarn-project/protocol-contracts/src/multi-call-entrypoint/index.ts +++ b/yarn-project/protocol-contracts/src/multi-call-entrypoint/index.ts @@ -1,6 +1,6 @@ -import { AztecAddress, EthAddress, Point } from '@aztec/circuits.js'; +import { type AztecAddress, EthAddress, Point } from '@aztec/circuits.js'; -import { ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; +import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js'; import { MultiCallEntrypointArtifact } from './artifact.js'; export function getCanonicalMultiCallEntrypointContract(): ProtocolContract { diff --git a/yarn-project/protocol-contracts/src/protocol_contract.ts b/yarn-project/protocol-contracts/src/protocol_contract.ts index 8d7e4ccb371..8286373e9da 100644 --- a/yarn-project/protocol-contracts/src/protocol_contract.ts +++ b/yarn-project/protocol-contracts/src/protocol_contract.ts @@ -1,12 +1,12 @@ import { - AztecAddress, + type AztecAddress, EthAddress, getContractClassFromArtifact, getContractInstanceFromDeployParams, } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { Fr, Point } from '@aztec/foundation/fields'; -import { ContractClassWithId, ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type ContractClassWithId, type ContractInstanceWithAddress } from '@aztec/types/contracts'; /** Represents a canonical contract in the protocol. */ export interface ProtocolContract { diff --git a/yarn-project/prover-client/src/dummy-prover.ts b/yarn-project/prover-client/src/dummy-prover.ts index d2c1f4842e4..f95b46fb006 100644 --- a/yarn-project/prover-client/src/dummy-prover.ts +++ b/yarn-project/prover-client/src/dummy-prover.ts @@ -1,13 +1,13 @@ import { L2Block, PROVING_STATUS, - ProcessedTx, - ProverClient, - ProvingSuccess, - ProvingTicket, + type ProcessedTx, + type ProverClient, + type ProvingSuccess, + type ProvingTicket, } from '@aztec/circuit-types'; -import { GlobalVariables, makeEmptyProof } from '@aztec/circuits.js'; -import { Fr } from '@aztec/foundation/fields'; +import { type GlobalVariables, makeEmptyProof } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/foundation/fields'; export class DummyProver implements ProverClient { public start(): Promise { diff --git a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts index 271f6c3b876..1fc3ed3cd7f 100644 --- a/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts +++ b/yarn-project/prover-client/src/orchestrator/block-building-helpers.ts @@ -1,9 +1,9 @@ -import { MerkleTreeId, ProcessedTx } from '@aztec/circuit-types'; +import { MerkleTreeId, type ProcessedTx } from '@aztec/circuit-types'; import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, - BaseOrMergeRollupPublicInputs, - BaseParityInputs, + type BaseOrMergeRollupPublicInputs, + type BaseParityInputs, BaseRollupInputs, ConstantRollupData, Fr, @@ -20,35 +20,35 @@ import { NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, - NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, PUBLIC_DATA_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_TREE_HEIGHT, PartialStateReference, PreviousRollupData, - Proof, + type Proof, PublicDataTreeLeaf, type PublicDataTreeLeafPreimage, ROLLUP_VK_TREE_HEIGHT, RollupTypes, RootParityInput, - RootParityInputs, + type RootParityInputs, RootRollupInputs, - RootRollupPublicInputs, + type RootRollupPublicInputs, StateDiffHints, - StateReference, + type StateReference, VK_TREE_HEIGHT, - VerificationKey, + type VerificationKey, } from '@aztec/circuits.js'; import { assertPermutation, makeTuple } from '@aztec/foundation/array'; -import { DebugLogger } from '@aztec/foundation/log'; -import { Tuple, assertLength, toFriendlyJSON } from '@aztec/foundation/serialize'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type DebugLogger } from '@aztec/foundation/log'; +import { type Tuple, assertLength, toFriendlyJSON } from '@aztec/foundation/serialize'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; -import { RollupProver } from '../prover/index.js'; -import { RollupSimulator } from '../simulator/rollup.js'; +import { type VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; +import { type RollupProver } from '../prover/index.js'; +import { type RollupSimulator } from '../simulator/rollup.js'; // Denotes fields that are not used now, but will be in the future const FUTURE_FR = new Fr(0n); diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator.test.ts index 9fa0236af63..cf2257e3084 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator.test.ts @@ -1,15 +1,15 @@ import { MerkleTreeId, PROVING_STATUS, - ProcessedTx, - ProvingSuccess, + type ProcessedTx, + type ProvingSuccess, makeEmptyProcessedTx as makeEmptyProcessedTxFromHistoricalTreeRoots, makeProcessedTx, mockTx, } from '@aztec/circuit-types'; import { AztecAddress, - BaseOrMergeRollupPublicInputs, + type BaseOrMergeRollupPublicInputs, EthAddress, Fr, GlobalVariables, @@ -43,14 +43,14 @@ import { padArrayEnd, times } from '@aztec/foundation/collection'; import { sleep } from '@aztec/foundation/sleep'; import { openTmpStore } from '@aztec/kv-store/utils'; import { WASMSimulator } from '@aztec/simulator'; -import { MerkleTreeOperations, MerkleTrees } from '@aztec/world-state'; +import { type MerkleTreeOperations, MerkleTrees } from '@aztec/world-state'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { type MemDown, default as memdown } from 'memdown'; import { getVerificationKeys } from '../mocks/verification_keys.js'; -import { RollupProver } from '../prover/index.js'; -import { RollupSimulator } from '../simulator/rollup.js'; +import { type RollupProver } from '../prover/index.js'; +import { type RollupSimulator } from '../simulator/rollup.js'; import { ProvingOrchestrator } from './orchestrator.js'; export const createMemDown = () => (memdown as any)() as MemDown; diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator.ts b/yarn-project/prover-client/src/orchestrator/orchestrator.ts index 1381cb75d0f..7a0a15e8e97 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator.ts @@ -1,33 +1,33 @@ -import { Body, L2Block, MerkleTreeId, ProcessedTx, TxEffect, toTxEffect } from '@aztec/circuit-types'; -import { PROVING_STATUS, ProvingResult, ProvingTicket } from '@aztec/circuit-types/interfaces'; -import { CircuitSimulationStats } from '@aztec/circuit-types/stats'; +import { Body, L2Block, MerkleTreeId, type ProcessedTx, type TxEffect, toTxEffect } from '@aztec/circuit-types'; +import { PROVING_STATUS, type ProvingResult, type ProvingTicket } from '@aztec/circuit-types/interfaces'; +import { type CircuitSimulationStats } from '@aztec/circuit-types/stats'; import { - AppendOnlyTreeSnapshot, - BaseOrMergeRollupPublicInputs, + type AppendOnlyTreeSnapshot, + type BaseOrMergeRollupPublicInputs, BaseParityInputs, - BaseRollupInputs, + type BaseRollupInputs, Fr, - GlobalVariables, + type GlobalVariables, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_BASE_PARITY_PER_ROOT_PARITY, - Proof, - RootParityInput, + type Proof, + type RootParityInput, RootParityInputs, } from '@aztec/circuits.js'; import { padArrayEnd } from '@aztec/foundation/collection'; import { MemoryFifo } from '@aztec/foundation/fifo'; import { createDebugLogger } from '@aztec/foundation/log'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; import { sleep } from '@aztec/foundation/sleep'; import { elapsed } from '@aztec/foundation/timer'; -import { SimulationProvider } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type SimulationProvider } from '@aztec/simulator'; +import { type MerkleTreeOperations } from '@aztec/world-state'; import { inspect } from 'util'; -import { VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; -import { RollupProver } from '../prover/index.js'; -import { RealRollupCircuitSimulator, RollupSimulator } from '../simulator/rollup.js'; +import { type VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; +import { type RollupProver } from '../prover/index.js'; +import { RealRollupCircuitSimulator, type RollupSimulator } from '../simulator/rollup.js'; import { buildBaseRollupInput, createMergeRollupInputs, @@ -39,7 +39,7 @@ import { getTreeSnapshot, validateTx, } from './block-building-helpers.js'; -import { MergeRollupInputData, PROVING_JOB_TYPE, ProvingJob, ProvingState } from './proving-state.js'; +import { type MergeRollupInputData, PROVING_JOB_TYPE, type ProvingJob, ProvingState } from './proving-state.js'; const logger = createDebugLogger('aztec:prover:proving-orchestrator'); diff --git a/yarn-project/prover-client/src/orchestrator/proving-state.ts b/yarn-project/prover-client/src/orchestrator/proving-state.ts index 232f7ad40e5..c21f7e4e385 100644 --- a/yarn-project/prover-client/src/orchestrator/proving-state.ts +++ b/yarn-project/prover-client/src/orchestrator/proving-state.ts @@ -1,14 +1,14 @@ -import { ProcessedTx, ProvingResult } from '@aztec/circuit-types'; +import { type ProcessedTx, type ProvingResult } from '@aztec/circuit-types'; import { - BaseOrMergeRollupPublicInputs, - Fr, - GlobalVariables, - NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, - Proof, - RootParityInput, + type BaseOrMergeRollupPublicInputs, + type Fr, + type GlobalVariables, + type NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + type Proof, + type RootParityInput, } from '@aztec/circuits.js'; import { randomBytes } from '@aztec/foundation/crypto'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; /** * Enums and structs to communicate the type of work required in each request. diff --git a/yarn-project/prover-client/src/prover/empty.ts b/yarn-project/prover-client/src/prover/empty.ts index b560e62d871..31d20ebecc2 100644 --- a/yarn-project/prover-client/src/prover/empty.ts +++ b/yarn-project/prover-client/src/prover/empty.ts @@ -8,14 +8,14 @@ import { type MergeRollupInputs, type ParityPublicInputs, Proof, - PublicCircuitPublicInputs, - PublicKernelCircuitPublicInputs, - RootParityInputs, - RootRollupInputs, - RootRollupPublicInputs, + type PublicCircuitPublicInputs, + type PublicKernelCircuitPublicInputs, + type RootParityInputs, + type RootRollupInputs, + type RootRollupPublicInputs, } from '@aztec/circuits.js'; -import { PublicProver, RollupProver } from './index.js'; +import { type PublicProver, type RollupProver } from './index.js'; const EMPTY_PROOF_SIZE = 42; diff --git a/yarn-project/prover-client/src/simulator/rollup.ts b/yarn-project/prover-client/src/simulator/rollup.ts index 5101c07b2d9..9faf8bc158e 100644 --- a/yarn-project/prover-client/src/simulator/rollup.ts +++ b/yarn-project/prover-client/src/simulator/rollup.ts @@ -1,13 +1,13 @@ -import { CircuitSimulationStats } from '@aztec/circuit-types/stats'; +import { type CircuitSimulationStats } from '@aztec/circuit-types/stats'; import { - BaseOrMergeRollupPublicInputs, - BaseParityInputs, - BaseRollupInputs, - MergeRollupInputs, - ParityPublicInputs, - RootParityInputs, - RootRollupInputs, - RootRollupPublicInputs, + type BaseOrMergeRollupPublicInputs, + type BaseParityInputs, + type BaseRollupInputs, + type MergeRollupInputs, + type ParityPublicInputs, + type RootParityInputs, + type RootRollupInputs, + type RootRollupPublicInputs, } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { elapsed } from '@aztec/foundation/timer'; @@ -28,7 +28,7 @@ import { convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, } from '@aztec/noir-protocol-circuits-types'; -import { SimulationProvider, WASMSimulator } from '@aztec/simulator'; +import { type SimulationProvider, WASMSimulator } from '@aztec/simulator'; /** * Circuit simulator for the rollup circuits. diff --git a/yarn-project/prover-client/src/tx-prover/tx-prover.ts b/yarn-project/prover-client/src/tx-prover/tx-prover.ts index 782b65d14c2..a9cb35d5f7e 100644 --- a/yarn-project/prover-client/src/tx-prover/tx-prover.ts +++ b/yarn-project/prover-client/src/tx-prover/tx-prover.ts @@ -1,11 +1,11 @@ -import { ProcessedTx } from '@aztec/circuit-types'; -import { ProverClient, ProvingTicket } from '@aztec/circuit-types/interfaces'; -import { Fr, GlobalVariables } from '@aztec/circuits.js'; -import { SimulationProvider } from '@aztec/simulator'; -import { WorldStateSynchronizer } from '@aztec/world-state'; +import { type ProcessedTx } from '@aztec/circuit-types'; +import { type ProverClient, type ProvingTicket } from '@aztec/circuit-types/interfaces'; +import { type Fr, type GlobalVariables } from '@aztec/circuits.js'; +import { type SimulationProvider } from '@aztec/simulator'; +import { type WorldStateSynchronizer } from '@aztec/world-state'; -import { ProverConfig } from '../config.js'; -import { VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; +import { type ProverConfig } from '../config.js'; +import { type VerificationKeys, getVerificationKeys } from '../mocks/verification_keys.js'; import { ProvingOrchestrator } from '../orchestrator/orchestrator.js'; import { EmptyRollupProver } from '../prover/empty.js'; diff --git a/yarn-project/pxe/src/contract_data_oracle/index.ts b/yarn-project/pxe/src/contract_data_oracle/index.ts index ad51ed876c9..eaf53cb9be6 100644 --- a/yarn-project/pxe/src/contract_data_oracle/index.ts +++ b/yarn-project/pxe/src/contract_data_oracle/index.ts @@ -1,17 +1,17 @@ -import { AztecAddress, MembershipWitness, VK_TREE_HEIGHT } from '@aztec/circuits.js'; +import { type AztecAddress, MembershipWitness, VK_TREE_HEIGHT } from '@aztec/circuits.js'; import { - ContractArtifact, - FunctionArtifact, - FunctionDebugMetadata, - FunctionSelector, + type ContractArtifact, + type FunctionArtifact, + type FunctionDebugMetadata, + type FunctionSelector, getFunctionDebugMetadata, } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { ContractClassNotFoundError, ContractNotFoundError } from '@aztec/simulator'; -import { ContractClass, ContractInstance } from '@aztec/types/contracts'; +import { type ContractClass, type ContractInstance } from '@aztec/types/contracts'; -import { ContractArtifactDatabase } from '../database/contracts/contract_artifact_db.js'; -import { ContractInstanceDatabase } from '../database/contracts/contract_instance_db.js'; +import { type ContractArtifactDatabase } from '../database/contracts/contract_artifact_db.js'; +import { type ContractInstanceDatabase } from '../database/contracts/contract_instance_db.js'; import { PrivateFunctionsTree } from './private_functions_tree.js'; /** diff --git a/yarn-project/pxe/src/contract_data_oracle/private_functions_tree.ts b/yarn-project/pxe/src/contract_data_oracle/private_functions_tree.ts index 6ea2e061723..4feffc5207b 100644 --- a/yarn-project/pxe/src/contract_data_oracle/private_functions_tree.ts +++ b/yarn-project/pxe/src/contract_data_oracle/private_functions_tree.ts @@ -5,11 +5,11 @@ import { computePrivateFunctionsTree, getContractClassFromArtifact, } from '@aztec/circuits.js'; -import { MerkleTree } from '@aztec/circuits.js/merkle'; -import { ContractArtifact, FunctionSelector } from '@aztec/foundation/abi'; +import { type MerkleTree } from '@aztec/circuits.js/merkle'; +import { type ContractArtifact, type FunctionSelector } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; import { assertLength } from '@aztec/foundation/serialize'; -import { ContractClassWithId } from '@aztec/types/contracts'; +import { type ContractClassWithId } from '@aztec/types/contracts'; /** * Represents a Merkle tree of functions for a particular Contract Class. diff --git a/yarn-project/pxe/src/database/contracts/contract_artifact_db.ts b/yarn-project/pxe/src/database/contracts/contract_artifact_db.ts index e49d96c061c..85f726d0973 100644 --- a/yarn-project/pxe/src/database/contracts/contract_artifact_db.ts +++ b/yarn-project/pxe/src/database/contracts/contract_artifact_db.ts @@ -1,5 +1,5 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; /** * PXE database for managing contract artifacts. diff --git a/yarn-project/pxe/src/database/contracts/contract_instance_db.ts b/yarn-project/pxe/src/database/contracts/contract_instance_db.ts index 0fbd0696384..77abb2f1641 100644 --- a/yarn-project/pxe/src/database/contracts/contract_instance_db.ts +++ b/yarn-project/pxe/src/database/contracts/contract_instance_db.ts @@ -1,5 +1,5 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type AztecAddress } from '@aztec/circuits.js'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; /** * PXE database for managing contract instances. diff --git a/yarn-project/pxe/src/database/deferred_note_dao.ts b/yarn-project/pxe/src/database/deferred_note_dao.ts index 06354bb4074..d45d179e5b2 100644 --- a/yarn-project/pxe/src/database/deferred_note_dao.ts +++ b/yarn-project/pxe/src/database/deferred_note_dao.ts @@ -1,5 +1,5 @@ import { Note, TxHash } from '@aztec/circuit-types'; -import { AztecAddress, Fr, Point, PublicKey, Vector } from '@aztec/circuits.js'; +import { AztecAddress, Fr, Point, type PublicKey, Vector } from '@aztec/circuits.js'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; /** diff --git a/yarn-project/pxe/src/database/kv_pxe_database.ts b/yarn-project/pxe/src/database/kv_pxe_database.ts index cb23c2cb415..aadab576f8d 100644 --- a/yarn-project/pxe/src/database/kv_pxe_database.ts +++ b/yarn-project/pxe/src/database/kv_pxe_database.ts @@ -1,15 +1,21 @@ -import { MerkleTreeId, NoteFilter, NoteStatus, PublicKey } from '@aztec/circuit-types'; +import { MerkleTreeId, type NoteFilter, NoteStatus, type PublicKey } from '@aztec/circuit-types'; import { AztecAddress, CompleteAddress, Header } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { toBufferBE } from '@aztec/foundation/bigint-buffer'; -import { Fr, Point } from '@aztec/foundation/fields'; -import { AztecArray, AztecKVStore, AztecMap, AztecMultiMap, AztecSingleton } from '@aztec/kv-store'; +import { Fr, type Point } from '@aztec/foundation/fields'; +import { + type AztecArray, + type AztecKVStore, + type AztecMap, + type AztecMultiMap, + type AztecSingleton, +} from '@aztec/kv-store'; import { contractArtifactFromBuffer, contractArtifactToBuffer } from '@aztec/types/abi'; -import { ContractInstanceWithAddress, SerializableContractInstance } from '@aztec/types/contracts'; +import { type ContractInstanceWithAddress, SerializableContractInstance } from '@aztec/types/contracts'; import { DeferredNoteDao } from './deferred_note_dao.js'; import { NoteDao } from './note_dao.js'; -import { PxeDatabase } from './pxe_database.js'; +import { type PxeDatabase } from './pxe_database.js'; /** * A PXE database backed by LMDB. diff --git a/yarn-project/pxe/src/database/note_dao.ts b/yarn-project/pxe/src/database/note_dao.ts index 5ca51311182..5717a668451 100644 --- a/yarn-project/pxe/src/database/note_dao.ts +++ b/yarn-project/pxe/src/database/note_dao.ts @@ -1,8 +1,8 @@ import { Note, TxHash } from '@aztec/circuit-types'; -import { AztecAddress, Fr, Point, PublicKey } from '@aztec/circuits.js'; +import { AztecAddress, Fr, Point, type PublicKey } from '@aztec/circuits.js'; import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize'; -import { NoteData } from '@aztec/simulator'; +import { type NoteData } from '@aztec/simulator'; /** * A note with contextual data. diff --git a/yarn-project/pxe/src/database/pxe_database.ts b/yarn-project/pxe/src/database/pxe_database.ts index 4b091eee228..b95d5e01d8c 100644 --- a/yarn-project/pxe/src/database/pxe_database.ts +++ b/yarn-project/pxe/src/database/pxe_database.ts @@ -1,14 +1,14 @@ -import { NoteFilter } from '@aztec/circuit-types'; -import { CompleteAddress, Header, PublicKey } from '@aztec/circuits.js'; -import { ContractArtifact } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr } from '@aztec/foundation/fields'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; - -import { ContractArtifactDatabase } from './contracts/contract_artifact_db.js'; -import { ContractInstanceDatabase } from './contracts/contract_instance_db.js'; -import { DeferredNoteDao } from './deferred_note_dao.js'; -import { NoteDao } from './note_dao.js'; +import { type NoteFilter } from '@aztec/circuit-types'; +import { type CompleteAddress, type Header, type PublicKey } from '@aztec/circuits.js'; +import { type ContractArtifact } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/foundation/fields'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; + +import { type ContractArtifactDatabase } from './contracts/contract_artifact_db.js'; +import { type ContractInstanceDatabase } from './contracts/contract_instance_db.js'; +import { type DeferredNoteDao } from './deferred_note_dao.js'; +import { type NoteDao } from './note_dao.js'; /** * A database interface that provides methods for retrieving, adding, and removing transactional data related to Aztec diff --git a/yarn-project/pxe/src/database/pxe_database_test_suite.ts b/yarn-project/pxe/src/database/pxe_database_test_suite.ts index 7ee0a403ebe..9a1fbbe46f8 100644 --- a/yarn-project/pxe/src/database/pxe_database_test_suite.ts +++ b/yarn-project/pxe/src/database/pxe_database_test_suite.ts @@ -1,4 +1,4 @@ -import { NoteFilter, NoteStatus, randomTxHash } from '@aztec/circuit-types'; +import { type NoteFilter, NoteStatus, randomTxHash } from '@aztec/circuit-types'; import { AztecAddress, CompleteAddress, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; import { makeHeader } from '@aztec/circuits.js/testing'; import { randomInt } from '@aztec/foundation/crypto'; @@ -6,9 +6,9 @@ import { Fr, Point } from '@aztec/foundation/fields'; import { BenchmarkingContractArtifact } from '@aztec/noir-contracts.js/Benchmarking'; import { SerializableContractInstance } from '@aztec/types/contracts'; -import { NoteDao } from './note_dao.js'; +import { type NoteDao } from './note_dao.js'; import { randomNoteDao } from './note_dao.test.js'; -import { PxeDatabase } from './pxe_database.js'; +import { type PxeDatabase } from './pxe_database.js'; /** * A common test suite for a PXE database. diff --git a/yarn-project/pxe/src/kernel_oracle/index.ts b/yarn-project/pxe/src/kernel_oracle/index.ts index d37b84338cd..a1948244093 100644 --- a/yarn-project/pxe/src/kernel_oracle/index.ts +++ b/yarn-project/pxe/src/kernel_oracle/index.ts @@ -1,18 +1,18 @@ -import { AztecNode, KeyStore } from '@aztec/circuit-types'; +import { type AztecNode, type KeyStore } from '@aztec/circuit-types'; import { - AztecAddress, - Fr, - FunctionSelector, + type AztecAddress, + type Fr, + type FunctionSelector, MembershipWitness, - NOTE_HASH_TREE_HEIGHT, - Point, + type NOTE_HASH_TREE_HEIGHT, + type Point, computeContractClassIdPreimage, computeSaltedInitializationHash, } from '@aztec/circuits.js'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; -import { ContractDataOracle } from '../contract_data_oracle/index.js'; -import { ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js'; +import { type ContractDataOracle } from '../contract_data_oracle/index.js'; +import { type ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js'; // TODO: Block number should not be "latest". // It should be fixed at the time the proof is being simulated. I.e., it should be the same as the value defined in the constant data. diff --git a/yarn-project/pxe/src/kernel_prover/hints_builder.ts b/yarn-project/pxe/src/kernel_prover/hints_builder.ts index eb7ee451963..f57f1d8c7b4 100644 --- a/yarn-project/pxe/src/kernel_prover/hints_builder.ts +++ b/yarn-project/pxe/src/kernel_prover/hints_builder.ts @@ -1,24 +1,24 @@ import { Fr, GrumpkinScalar, - MAX_NEW_NOTE_HASHES_PER_TX, + type MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX, - MAX_NULLIFIER_READ_REQUESTS_PER_TX, + type MAX_NULLIFIER_READ_REQUESTS_PER_TX, MembershipWitness, NULLIFIER_TREE_HEIGHT, - NullifierKeyValidationRequestContext, - ReadRequestContext, - SideEffect, - SideEffectLinkedToNoteHash, - SideEffectType, + type NullifierKeyValidationRequestContext, + type ReadRequestContext, + type SideEffect, + type SideEffectLinkedToNoteHash, + type SideEffectType, buildNullifierReadRequestHints, } from '@aztec/circuits.js'; import { makeTuple } from '@aztec/foundation/array'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type Tuple } from '@aztec/foundation/serialize'; -import { ProvingDataOracle } from './proving_data_oracle.js'; +import { type ProvingDataOracle } from './proving_data_oracle.js'; export class HintsBuilder { constructor(private oracle: ProvingDataOracle) {} diff --git a/yarn-project/pxe/src/kernel_prover/kernel_prover.test.ts b/yarn-project/pxe/src/kernel_prover/kernel_prover.test.ts index 3c7c1d6573d..8e7394b5dd9 100644 --- a/yarn-project/pxe/src/kernel_prover/kernel_prover.test.ts +++ b/yarn-project/pxe/src/kernel_prover/kernel_prover.test.ts @@ -12,7 +12,7 @@ import { PrivateKernelCircuitPublicInputs, PrivateKernelTailCircuitPublicInputs, SideEffect, - TxRequest, + type TxRequest, VK_TREE_HEIGHT, VerificationKey, makeEmptyProof, @@ -21,7 +21,7 @@ import { makeTxRequest } from '@aztec/circuits.js/testing'; import { makeTuple } from '@aztec/foundation/array'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -import { ExecutionResult, NoteAndSlot } from '@aztec/simulator'; +import { type ExecutionResult, type NoteAndSlot } from '@aztec/simulator'; import { mock } from 'jest-mock-extended'; diff --git a/yarn-project/pxe/src/kernel_prover/kernel_prover.ts b/yarn-project/pxe/src/kernel_prover/kernel_prover.ts index 373a484993c..123ee026b92 100644 --- a/yarn-project/pxe/src/kernel_prover/kernel_prover.ts +++ b/yarn-project/pxe/src/kernel_prover/kernel_prover.ts @@ -1,8 +1,8 @@ import { CallRequest, Fr, - MAX_NEW_NOTE_HASHES_PER_TX, - MAX_NEW_NULLIFIERS_PER_TX, + type MAX_NEW_NOTE_HASHES_PER_TX, + type MAX_NEW_NULLIFIERS_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, @@ -13,9 +13,9 @@ import { PrivateKernelInitCircuitPrivateInputs, PrivateKernelInnerCircuitPrivateInputs, PrivateKernelTailCircuitPrivateInputs, - SideEffect, - SideEffectLinkedToNoteHash, - TxRequest, + type SideEffect, + type SideEffectLinkedToNoteHash, + type TxRequest, VK_TREE_HEIGHT, VerificationKey, makeEmptyProof, @@ -28,8 +28,8 @@ import { pushTestData } from '@aztec/foundation/testing'; import { type ExecutionResult } from '@aztec/simulator'; import { HintsBuilder } from './hints_builder.js'; -import { KernelProofCreator, ProofCreator, ProofOutput, ProofOutputFinal } from './proof_creator.js'; -import { ProvingDataOracle } from './proving_data_oracle.js'; +import { KernelProofCreator, type ProofCreator, type ProofOutput, type ProofOutputFinal } from './proof_creator.js'; +import { type ProvingDataOracle } from './proving_data_oracle.js'; /** * The KernelProver class is responsible for generating kernel proofs. diff --git a/yarn-project/pxe/src/kernel_prover/proof_creator.ts b/yarn-project/pxe/src/kernel_prover/proof_creator.ts index a4ad0680a73..9e79d1fc552 100644 --- a/yarn-project/pxe/src/kernel_prover/proof_creator.ts +++ b/yarn-project/pxe/src/kernel_prover/proof_creator.ts @@ -1,4 +1,4 @@ -import { CircuitSimulationStats } from '@aztec/circuit-types/stats'; +import { type CircuitSimulationStats } from '@aztec/circuit-types/stats'; import { type PrivateCircuitPublicInputs, type PrivateKernelCircuitPublicInputs, @@ -10,7 +10,7 @@ import { makeEmptyProof, } from '@aztec/circuits.js'; import { siloNoteHash } from '@aztec/circuits.js/hash'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { elapsed } from '@aztec/foundation/timer'; import { executeInit, executeInner, executeTail, executeTailForPublic } from '@aztec/noir-protocol-circuits-types'; diff --git a/yarn-project/pxe/src/kernel_prover/proving_data_oracle.ts b/yarn-project/pxe/src/kernel_prover/proving_data_oracle.ts index 2126f70e38d..143b0c227c5 100644 --- a/yarn-project/pxe/src/kernel_prover/proving_data_oracle.ts +++ b/yarn-project/pxe/src/kernel_prover/proving_data_oracle.ts @@ -1,16 +1,16 @@ -import { NullifierMembershipWitness } from '@aztec/circuit-types'; +import { type NullifierMembershipWitness } from '@aztec/circuit-types'; import { - FUNCTION_TREE_HEIGHT, - Fr, - FunctionSelector, - GrumpkinPrivateKey, - MembershipWitness, - NOTE_HASH_TREE_HEIGHT, - Point, - VK_TREE_HEIGHT, - VerificationKey, + type FUNCTION_TREE_HEIGHT, + type Fr, + type FunctionSelector, + type GrumpkinPrivateKey, + type MembershipWitness, + type NOTE_HASH_TREE_HEIGHT, + type Point, + type VK_TREE_HEIGHT, + type VerificationKey, } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; /** * Provides functionality to fetch membership witnesses for verification keys, diff --git a/yarn-project/pxe/src/note_processor/note_processor.test.ts b/yarn-project/pxe/src/note_processor/note_processor.test.ts index 516655eaebd..893e8807bac 100644 --- a/yarn-project/pxe/src/note_processor/note_processor.test.ts +++ b/yarn-project/pxe/src/note_processor/note_processor.test.ts @@ -1,12 +1,12 @@ import { - AztecNode, + type AztecNode, EncryptedFunctionL2Logs, EncryptedL2BlockL2Logs, EncryptedL2Log, EncryptedTxL2Logs, - KeyPair, - KeyStore, - L1NotePayload, + type KeyPair, + type KeyStore, + type L1NotePayload, L2Block, L2BlockContext, TaggedNote, @@ -17,14 +17,14 @@ import { pedersenHash } from '@aztec/foundation/crypto'; import { Point } from '@aztec/foundation/fields'; import { ConstantKeyPair } from '@aztec/key-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { AcirSimulator } from '@aztec/simulator'; +import { type AcirSimulator } from '@aztec/simulator'; import { jest } from '@jest/globals'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { PxeDatabase } from '../database/index.js'; +import { type PxeDatabase } from '../database/index.js'; import { KVPxeDatabase } from '../database/kv_pxe_database.js'; -import { NoteDao } from '../database/note_dao.js'; +import { type NoteDao } from '../database/note_dao.js'; import { NoteProcessor } from './note_processor.js'; const TXS_PER_BLOCK = 4; diff --git a/yarn-project/pxe/src/note_processor/note_processor.ts b/yarn-project/pxe/src/note_processor/note_processor.ts index 92772684335..d81e7b45cea 100644 --- a/yarn-project/pxe/src/note_processor/note_processor.ts +++ b/yarn-project/pxe/src/note_processor/note_processor.ts @@ -1,22 +1,22 @@ import { - AztecNode, - EncryptedL2BlockL2Logs, - KeyStore, + type AztecNode, + type EncryptedL2BlockL2Logs, + type KeyStore, L1NotePayload, - L2BlockContext, + type L2BlockContext, TaggedNote, } from '@aztec/circuit-types'; -import { NoteProcessorStats } from '@aztec/circuit-types/stats'; -import { INITIAL_L2_BLOCK_NUM, MAX_NEW_NOTE_HASHES_PER_TX, PublicKey } from '@aztec/circuits.js'; +import { type NoteProcessorStats } from '@aztec/circuit-types/stats'; +import { INITIAL_L2_BLOCK_NUM, MAX_NEW_NOTE_HASHES_PER_TX, type PublicKey } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; import { ContractNotFoundError } from '@aztec/simulator'; import { DeferredNoteDao } from '../database/deferred_note_dao.js'; -import { PxeDatabase } from '../database/index.js'; -import { NoteDao } from '../database/note_dao.js'; +import { type PxeDatabase } from '../database/index.js'; +import { type NoteDao } from '../database/note_dao.js'; import { getAcirSimulator } from '../simulator/index.js'; import { produceNoteDao } from './produce_note_dao.js'; diff --git a/yarn-project/pxe/src/note_processor/produce_note_dao.ts b/yarn-project/pxe/src/note_processor/produce_note_dao.ts index 396012a4ee9..02b8526be07 100644 --- a/yarn-project/pxe/src/note_processor/produce_note_dao.ts +++ b/yarn-project/pxe/src/note_processor/produce_note_dao.ts @@ -1,7 +1,7 @@ -import { L1NotePayload, TxHash } from '@aztec/circuit-types'; -import { Fr, PublicKey } from '@aztec/circuits.js'; +import { type L1NotePayload, type TxHash } from '@aztec/circuit-types'; +import { Fr, type PublicKey } from '@aztec/circuits.js'; import { computeCommitmentNonce, siloNullifier } from '@aztec/circuits.js/hash'; -import { AcirSimulator } from '@aztec/simulator'; +import { type AcirSimulator } from '@aztec/simulator'; import { NoteDao } from '../database/note_dao.js'; diff --git a/yarn-project/pxe/src/pxe_service/create_pxe_service.ts b/yarn-project/pxe/src/pxe_service/create_pxe_service.ts index 12813a382b1..7daead96c66 100644 --- a/yarn-project/pxe/src/pxe_service/create_pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/create_pxe_service.ts @@ -1,4 +1,4 @@ -import { AztecNode } from '@aztec/circuit-types'; +import { type AztecNode } from '@aztec/circuit-types'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; import { randomBytes } from '@aztec/foundation/crypto'; import { TestKeyStore } from '@aztec/key-store'; @@ -11,7 +11,7 @@ import { getCanonicalMultiCallEntrypointContract } from '@aztec/protocol-contrac import { join } from 'path'; -import { PXEServiceConfig } from '../config/index.js'; +import { type PXEServiceConfig } from '../config/index.js'; import { KVPxeDatabase } from '../database/kv_pxe_database.js'; import { PXEService } from './pxe_service.js'; diff --git a/yarn-project/pxe/src/pxe_service/pxe_service.ts b/yarn-project/pxe/src/pxe_service/pxe_service.ts index 3930d07f412..92079b73330 100644 --- a/yarn-project/pxe/src/pxe_service/pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/pxe_service.ts @@ -1,27 +1,27 @@ import { - AuthWitness, - AztecNode, + type AuthWitness, + type AztecNode, EncryptedTxL2Logs, ExtendedNote, - FunctionCall, - GetUnencryptedLogsResponse, - KeyStore, - L2Block, - LogFilter, + type FunctionCall, + type GetUnencryptedLogsResponse, + type KeyStore, + type L2Block, + type LogFilter, MerkleTreeId, type NoteFilter, type PXE, SimulatedTx, SimulationError, Tx, - TxEffect, - TxExecutionRequest, - TxHash, - TxReceipt, + type TxEffect, + type TxExecutionRequest, + type TxHash, + type TxReceipt, UnencryptedTxL2Logs, isNoirCallStackUnresolved, } from '@aztec/circuit-types'; -import { TxPXEProcessingStats } from '@aztec/circuit-types/stats'; +import { type TxPXEProcessingStats } from '@aztec/circuit-types/stats'; import { AztecAddress, CallRequest, @@ -36,26 +36,26 @@ import { getContractClassFromArtifact, } from '@aztec/circuits.js'; import { computeCommitmentNonce, siloNullifier } from '@aztec/circuits.js/hash'; -import { ContractArtifact, DecodedReturn, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; +import { type ContractArtifact, type DecodedReturn, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/fields'; import { SerialQueue } from '@aztec/foundation/fifo'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; import { - AcirSimulator, - ExecutionResult, + type AcirSimulator, + type ExecutionResult, collectEncryptedLogs, collectEnqueuedPublicFunctionCalls, collectUnencryptedLogs, resolveOpcodeLocations, } from '@aztec/simulator'; -import { ContractClassWithId, ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { NodeInfo } from '@aztec/types/interfaces'; +import { type ContractClassWithId, type ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type NodeInfo } from '@aztec/types/interfaces'; -import { PXEServiceConfig, getPackageInfo } from '../config/index.js'; +import { type PXEServiceConfig, getPackageInfo } from '../config/index.js'; import { ContractDataOracle } from '../contract_data_oracle/index.js'; -import { PxeDatabase } from '../database/index.js'; +import { type PxeDatabase } from '../database/index.js'; import { NoteDao } from '../database/note_dao.js'; import { KernelOracle } from '../kernel_oracle/index.js'; import { KernelProver } from '../kernel_prover/kernel_prover.js'; diff --git a/yarn-project/pxe/src/pxe_service/test/pxe_service.test.ts b/yarn-project/pxe/src/pxe_service/test/pxe_service.test.ts index fcb41bd9014..bbef70b77ba 100644 --- a/yarn-project/pxe/src/pxe_service/test/pxe_service.test.ts +++ b/yarn-project/pxe/src/pxe_service/test/pxe_service.test.ts @@ -1,16 +1,16 @@ -import { AztecNode, PXE, TxEffect, mockTx } from '@aztec/circuit-types'; +import { type AztecNode, type PXE, TxEffect, mockTx } from '@aztec/circuit-types'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants'; -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; import { EthAddress } from '@aztec/foundation/eth-address'; import { TestKeyStore } from '@aztec/key-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { KVPxeDatabase } from '../../database/kv_pxe_database.js'; -import { PxeDatabase } from '../../database/pxe_database.js'; -import { PXEServiceConfig } from '../../index.js'; +import { type PxeDatabase } from '../../database/pxe_database.js'; +import { type PXEServiceConfig } from '../../index.js'; import { PXEService } from '../pxe_service.js'; import { pxeTestSuite } from './pxe_test_suite.js'; diff --git a/yarn-project/pxe/src/pxe_service/test/pxe_test_suite.ts b/yarn-project/pxe/src/pxe_service/test/pxe_test_suite.ts index 43d6c248161..314995a4fd5 100644 --- a/yarn-project/pxe/src/pxe_service/test/pxe_test_suite.ts +++ b/yarn-project/pxe/src/pxe_service/test/pxe_test_suite.ts @@ -1,5 +1,5 @@ import { - PXE, + type PXE, TxExecutionRequest, randomContractArtifact, randomContractInstanceWithAddress, diff --git a/yarn-project/pxe/src/simulator/index.ts b/yarn-project/pxe/src/simulator/index.ts index 40d30a9198d..e1a4c898578 100644 --- a/yarn-project/pxe/src/simulator/index.ts +++ b/yarn-project/pxe/src/simulator/index.ts @@ -1,8 +1,8 @@ -import { AztecNode, KeyStore } from '@aztec/circuit-types'; +import { type AztecNode, type KeyStore } from '@aztec/circuit-types'; import { AcirSimulator } from '@aztec/simulator'; import { ContractDataOracle } from '../contract_data_oracle/index.js'; -import { PxeDatabase } from '../database/pxe_database.js'; +import { type PxeDatabase } from '../database/pxe_database.js'; import { SimulatorOracle } from '../simulator_oracle/index.js'; /** diff --git a/yarn-project/pxe/src/simulator_oracle/index.ts b/yarn-project/pxe/src/simulator_oracle/index.ts index 1be28074b65..56e65ee0e81 100644 --- a/yarn-project/pxe/src/simulator_oracle/index.ts +++ b/yarn-project/pxe/src/simulator_oracle/index.ts @@ -1,30 +1,30 @@ import { - AztecNode, - KeyStore, - L2Block, + type AztecNode, + type KeyStore, + type L2Block, MerkleTreeId, - NoteStatus, - NullifierMembershipWitness, - PublicDataWitness, - SiblingPath, + type NoteStatus, + type NullifierMembershipWitness, + type PublicDataWitness, + type SiblingPath, } from '@aztec/circuit-types'; import { - AztecAddress, - CompleteAddress, - EthAddress, - Fr, - FunctionSelector, - Header, - L1_TO_L2_MSG_TREE_HEIGHT, + type AztecAddress, + type CompleteAddress, + type EthAddress, + type Fr, + type FunctionSelector, + type Header, + type L1_TO_L2_MSG_TREE_HEIGHT, } from '@aztec/circuits.js'; import { computeL1ToL2MessageNullifier } from '@aztec/circuits.js/hash'; -import { FunctionArtifactWithDebugMetadata, getFunctionArtifactWithDebugMetadata } from '@aztec/foundation/abi'; +import { type FunctionArtifactWithDebugMetadata, getFunctionArtifactWithDebugMetadata } from '@aztec/foundation/abi'; import { createDebugLogger } from '@aztec/foundation/log'; -import { DBOracle, KeyPair, MessageLoadOracleInputs } from '@aztec/simulator'; -import { ContractInstance } from '@aztec/types/contracts'; +import { type DBOracle, type KeyPair, MessageLoadOracleInputs } from '@aztec/simulator'; +import { type ContractInstance } from '@aztec/types/contracts'; -import { ContractDataOracle } from '../contract_data_oracle/index.js'; -import { PxeDatabase } from '../database/index.js'; +import { type ContractDataOracle } from '../contract_data_oracle/index.js'; +import { type PxeDatabase } from '../database/index.js'; /** * A data oracle that provides information needed for simulating a transaction. diff --git a/yarn-project/pxe/src/synchronizer/synchronizer.test.ts b/yarn-project/pxe/src/synchronizer/synchronizer.test.ts index 5de7f55dfb8..81f079c6b7e 100644 --- a/yarn-project/pxe/src/synchronizer/synchronizer.test.ts +++ b/yarn-project/pxe/src/synchronizer/synchronizer.test.ts @@ -1,5 +1,5 @@ -import { AztecNode, L2Block } from '@aztec/circuit-types'; -import { CompleteAddress, Fr, GrumpkinScalar, Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; +import { type AztecNode, L2Block } from '@aztec/circuit-types'; +import { CompleteAddress, Fr, GrumpkinScalar, type Header, INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; import { makeHeader } from '@aztec/circuits.js/testing'; import { randomInt } from '@aztec/foundation/crypto'; @@ -7,9 +7,9 @@ import { SerialQueue } from '@aztec/foundation/fifo'; import { TestKeyStore } from '@aztec/key-store'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { PxeDatabase } from '../database/index.js'; +import { type PxeDatabase } from '../database/index.js'; import { KVPxeDatabase } from '../database/kv_pxe_database.js'; import { Synchronizer } from './synchronizer.js'; diff --git a/yarn-project/pxe/src/synchronizer/synchronizer.ts b/yarn-project/pxe/src/synchronizer/synchronizer.ts index 7ae66192402..a73bc1416a2 100644 --- a/yarn-project/pxe/src/synchronizer/synchronizer.ts +++ b/yarn-project/pxe/src/synchronizer/synchronizer.ts @@ -1,13 +1,20 @@ -import { AztecNode, KeyStore, L2BlockContext, L2BlockL2Logs, MerkleTreeId, TxHash } from '@aztec/circuit-types'; -import { NoteProcessorCaughtUpStats } from '@aztec/circuit-types/stats'; -import { AztecAddress, Fr, INITIAL_L2_BLOCK_NUM, PublicKey } from '@aztec/circuits.js'; -import { SerialQueue } from '@aztec/foundation/fifo'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { + type AztecNode, + type KeyStore, + L2BlockContext, + L2BlockL2Logs, + MerkleTreeId, + type TxHash, +} from '@aztec/circuit-types'; +import { type NoteProcessorCaughtUpStats } from '@aztec/circuit-types/stats'; +import { type AztecAddress, type Fr, INITIAL_L2_BLOCK_NUM, type PublicKey } from '@aztec/circuits.js'; +import { type SerialQueue } from '@aztec/foundation/fifo'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; -import { DeferredNoteDao } from '../database/deferred_note_dao.js'; -import { PxeDatabase } from '../database/index.js'; -import { NoteDao } from '../database/note_dao.js'; +import { type DeferredNoteDao } from '../database/deferred_note_dao.js'; +import { type PxeDatabase } from '../database/index.js'; +import { type NoteDao } from '../database/note_dao.js'; import { NoteProcessor } from '../note_processor/index.js'; /** diff --git a/yarn-project/scripts/src/benchmarks/aggregate.ts b/yarn-project/scripts/src/benchmarks/aggregate.ts index 528dda9b2ca..ce1d8905463 100644 --- a/yarn-project/scripts/src/benchmarks/aggregate.ts +++ b/yarn-project/scripts/src/benchmarks/aggregate.ts @@ -12,21 +12,21 @@ import { BENCHMARK_BLOCK_SIZES, BENCHMARK_HISTORY_BLOCK_SIZE, BENCHMARK_HISTORY_CHAIN_LENGTHS, - BenchmarkMetricResults, - BenchmarkResults, - BenchmarkResultsWithTimestamp, - CircuitSimulationStats, - L1PublishStats, - L2BlockBuiltStats, - L2BlockHandledStats, - MetricName, - NodeSyncedChainHistoryStats, - NoteProcessorCaughtUpStats, - Stats, - TreeInsertionStats, - TxAddedToPoolStats, - TxPXEProcessingStats, - TxSequencerProcessingStats, + type BenchmarkMetricResults, + type BenchmarkResults, + type BenchmarkResultsWithTimestamp, + type CircuitSimulationStats, + type L1PublishStats, + type L2BlockBuiltStats, + type L2BlockHandledStats, + type MetricName, + type NodeSyncedChainHistoryStats, + type NoteProcessorCaughtUpStats, + type Stats, + type TreeInsertionStats, + type TxAddedToPoolStats, + type TxPXEProcessingStats, + type TxSequencerProcessingStats, } from '@aztec/circuit-types/stats'; import { createConsoleLogger } from '@aztec/foundation/log'; diff --git a/yarn-project/sequencer-client/src/client/sequencer-client.ts b/yarn-project/sequencer-client/src/client/sequencer-client.ts index 79a96f8fe14..3cbf3656784 100644 --- a/yarn-project/sequencer-client/src/client/sequencer-client.ts +++ b/yarn-project/sequencer-client/src/client/sequencer-client.ts @@ -1,14 +1,14 @@ -import { L1ToL2MessageSource, L2BlockSource } from '@aztec/circuit-types'; -import { BlockProver } from '@aztec/circuit-types/interfaces'; -import { P2P } from '@aztec/p2p'; -import { SimulationProvider } from '@aztec/simulator'; -import { ContractDataSource } from '@aztec/types/contracts'; -import { WorldStateSynchronizer } from '@aztec/world-state'; +import { type L1ToL2MessageSource, type L2BlockSource } from '@aztec/circuit-types'; +import { type BlockProver } from '@aztec/circuit-types/interfaces'; +import { type P2P } from '@aztec/p2p'; +import { type SimulationProvider } from '@aztec/simulator'; +import { type ContractDataSource } from '@aztec/types/contracts'; +import { type WorldStateSynchronizer } from '@aztec/world-state'; -import { SequencerClientConfig } from '../config.js'; +import { type SequencerClientConfig } from '../config.js'; import { getGlobalVariableBuilder } from '../global_variable_builder/index.js'; import { getL1Publisher } from '../publisher/index.js'; -import { Sequencer, SequencerConfig } from '../sequencer/index.js'; +import { Sequencer, type SequencerConfig } from '../sequencer/index.js'; import { PublicProcessorFactory } from '../sequencer/public_processor.js'; import { TxValidatorFactory } from '../sequencer/tx_validator_factory.js'; diff --git a/yarn-project/sequencer-client/src/config.ts b/yarn-project/sequencer-client/src/config.ts index f54dabbe3a9..b86863b9393 100644 --- a/yarn-project/sequencer-client/src/config.ts +++ b/yarn-project/sequencer-client/src/config.ts @@ -1,12 +1,12 @@ import { AztecAddress, Fr } from '@aztec/circuits.js'; -import { L1ContractAddresses, NULL_KEY } from '@aztec/ethereum'; +import { type L1ContractAddresses, NULL_KEY } from '@aztec/ethereum'; import { EthAddress } from '@aztec/foundation/eth-address'; -import { Hex } from 'viem'; +import { type Hex } from 'viem'; -import { GlobalReaderConfig } from './global_variable_builder/index.js'; -import { PublisherConfig, TxSenderConfig } from './publisher/config.js'; -import { SequencerConfig } from './sequencer/config.js'; +import { type GlobalReaderConfig } from './global_variable_builder/index.js'; +import { type PublisherConfig, type TxSenderConfig } from './publisher/config.js'; +import { type SequencerConfig } from './sequencer/config.js'; /** Chain configuration. */ type ChainConfig = { diff --git a/yarn-project/sequencer-client/src/global_variable_builder/config.ts b/yarn-project/sequencer-client/src/global_variable_builder/config.ts index 2884374561a..156b0c38c93 100644 --- a/yarn-project/sequencer-client/src/global_variable_builder/config.ts +++ b/yarn-project/sequencer-client/src/global_variable_builder/config.ts @@ -1,4 +1,4 @@ -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; /** * Configuration of the L1GlobalReader. diff --git a/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts b/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts index 2b6212b71da..ea489d4dd3b 100644 --- a/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts +++ b/yarn-project/sequencer-client/src/global_variable_builder/global_builder.ts @@ -1,4 +1,4 @@ -import { AztecAddress, EthAddress, GlobalVariables } from '@aztec/circuits.js'; +import { type AztecAddress, type EthAddress, GlobalVariables } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; diff --git a/yarn-project/sequencer-client/src/global_variable_builder/index.ts b/yarn-project/sequencer-client/src/global_variable_builder/index.ts index 91ab6caecb8..7c762838e0a 100644 --- a/yarn-project/sequencer-client/src/global_variable_builder/index.ts +++ b/yarn-project/sequencer-client/src/global_variable_builder/index.ts @@ -1,5 +1,5 @@ -import { GlobalReaderConfig } from './config.js'; -import { GlobalVariableBuilder, SimpleTestGlobalVariableBuilder } from './global_builder.js'; +import { type GlobalReaderConfig } from './config.js'; +import { type GlobalVariableBuilder, SimpleTestGlobalVariableBuilder } from './global_builder.js'; import { ViemReader } from './viem-reader.js'; export { SimpleTestGlobalVariableBuilder as SimpleGlobalVariableBuilder } from './global_builder.js'; diff --git a/yarn-project/sequencer-client/src/global_variable_builder/viem-reader.ts b/yarn-project/sequencer-client/src/global_variable_builder/viem-reader.ts index 363e63ed8d1..bb1acd8720c 100644 --- a/yarn-project/sequencer-client/src/global_variable_builder/viem-reader.ts +++ b/yarn-project/sequencer-client/src/global_variable_builder/viem-reader.ts @@ -2,18 +2,18 @@ import { createEthereumChain } from '@aztec/ethereum'; import { RollupAbi } from '@aztec/l1-artifacts'; import { - GetContractReturnType, - HttpTransport, - PublicClient, + type GetContractReturnType, + type HttpTransport, + type PublicClient, createPublicClient, getAddress, getContract, http, } from 'viem'; -import * as chains from 'viem/chains'; +import type * as chains from 'viem/chains'; -import { GlobalReaderConfig } from './config.js'; -import { L1GlobalReader } from './global_builder.js'; +import { type GlobalReaderConfig } from './config.js'; +import { type L1GlobalReader } from './global_builder.js'; /** * Reads values from L1 state using viem. diff --git a/yarn-project/sequencer-client/src/publisher/config.ts b/yarn-project/sequencer-client/src/publisher/config.ts index 96ad07bd6f1..e78fa7c2d19 100644 --- a/yarn-project/sequencer-client/src/publisher/config.ts +++ b/yarn-project/sequencer-client/src/publisher/config.ts @@ -1,4 +1,4 @@ -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; /** * The configuration of the rollup transaction publisher. diff --git a/yarn-project/sequencer-client/src/publisher/index.ts b/yarn-project/sequencer-client/src/publisher/index.ts index 9fd03d25880..529011d5005 100644 --- a/yarn-project/sequencer-client/src/publisher/index.ts +++ b/yarn-project/sequencer-client/src/publisher/index.ts @@ -1,4 +1,4 @@ -import { PublisherConfig, TxSenderConfig } from './config.js'; +import { type PublisherConfig, type TxSenderConfig } from './config.js'; import { L1Publisher } from './l1-publisher.js'; import { ViemTxSender } from './viem-tx-sender.js'; diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts index 4115e35e71c..8c67ba092b8 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.test.ts @@ -1,7 +1,7 @@ import { L2Block } from '@aztec/circuit-types'; import { sleep } from '@aztec/foundation/sleep'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { L1Publisher, type L1PublisherTxSender, type MinimalTransactionReceipt } from './l1-publisher.js'; diff --git a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts index 4fb6a11fcb2..c184a4fa442 100644 --- a/yarn-project/sequencer-client/src/publisher/l1-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/l1-publisher.ts @@ -1,12 +1,12 @@ -import { L2Block } from '@aztec/circuit-types'; -import { L1PublishStats } from '@aztec/circuit-types/stats'; +import { type L2Block } from '@aztec/circuit-types'; +import { type L1PublishStats } from '@aztec/circuit-types/stats'; import { createDebugLogger } from '@aztec/foundation/log'; import { InterruptibleSleep } from '@aztec/foundation/sleep'; import pick from 'lodash.pick'; -import { L2BlockReceiver } from '../receiver.js'; -import { PublisherConfig } from './config.js'; +import { type L2BlockReceiver } from '../receiver.js'; +import { type PublisherConfig } from './config.js'; /** * Stats for a sent transaction. diff --git a/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts b/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts index f703a22af69..6691ac741da 100644 --- a/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts +++ b/yarn-project/sequencer-client/src/publisher/viem-tx-sender.ts @@ -1,14 +1,14 @@ -import { L2Block } from '@aztec/circuit-types'; +import { type L2Block } from '@aztec/circuit-types'; import { createEthereumChain } from '@aztec/ethereum'; import { createDebugLogger } from '@aztec/foundation/log'; import { AvailabilityOracleAbi, RollupAbi } from '@aztec/l1-artifacts'; import { - GetContractReturnType, - Hex, - HttpTransport, - PublicClient, - WalletClient, + type GetContractReturnType, + type Hex, + type HttpTransport, + type PublicClient, + type WalletClient, createPublicClient, createWalletClient, getAddress, @@ -16,15 +16,15 @@ import { hexToBytes, http, } from 'viem'; -import { PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; +import { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; import * as chains from 'viem/chains'; -import { TxSenderConfig } from './config.js'; +import { type TxSenderConfig } from './config.js'; import { - L1PublisherTxSender, - MinimalTransactionReceipt, - L1ProcessArgs as ProcessTxArgs, - TransactionStats, + type L1PublisherTxSender, + type MinimalTransactionReceipt, + type L1ProcessArgs as ProcessTxArgs, + type TransactionStats, } from './l1-publisher.js'; /** diff --git a/yarn-project/sequencer-client/src/receiver.ts b/yarn-project/sequencer-client/src/receiver.ts index f731a8f8504..07db079ba33 100644 --- a/yarn-project/sequencer-client/src/receiver.ts +++ b/yarn-project/sequencer-client/src/receiver.ts @@ -1,4 +1,4 @@ -import { L2Block } from '@aztec/circuit-types'; +import { type L2Block } from '@aztec/circuit-types'; /** * Given the necessary rollup data, verifies it, and updates the underlying state accordingly to advance the state of the system. diff --git a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts index 15ed89103e5..75e4bf22e64 100644 --- a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts @@ -1,4 +1,4 @@ -import { MerkleTreeId, SimulationError, Tx, UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; +import { MerkleTreeId, type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; import { AztecAddress, CallRequest, @@ -20,16 +20,16 @@ import { MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, - PrivateKernelTailCircuitPublicInputs, - Proof, + type PrivateKernelTailCircuitPublicInputs, + type Proof, PublicCallData, - PublicCallRequest, + type PublicCallRequest, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelCircuitPrivateInputs, - PublicKernelCircuitPublicInputs, + type PublicKernelCircuitPublicInputs, PublicKernelData, RETURN_VALUES_LENGTH, ReadRequest, @@ -42,26 +42,26 @@ import { } from '@aztec/circuits.js'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; import { - type AbiType, + type ABIType, type DecodedReturn, type FunctionArtifact, type ProcessReturnValues, decodeReturnValues, } from '@aztec/foundation/abi'; import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { Tuple } from '@aztec/foundation/serialize'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type Tuple } from '@aztec/foundation/serialize'; import { - PublicExecution, - PublicExecutionResult, - PublicExecutor, + type PublicExecution, + type PublicExecutionResult, + type PublicExecutor, collectPublicDataReads, collectPublicDataUpdateRequests, isPublicExecutionResult, } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; import { HintsBuilder } from './hints_builder.js'; import { lastSideEffectCounter } from './utils.js'; @@ -284,7 +284,7 @@ export abstract class AbstractPhaseManager { const paddedReturn = padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH); // TODO(#5450) Need to use the proper return values here - const returnTypes: AbiType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; + const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; const mockArtifact = { returnTypes } as any as FunctionArtifact; currentReturn = decodeReturnValues(mockArtifact, paddedReturn); diff --git a/yarn-project/sequencer-client/src/sequencer/app_logic_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/app_logic_phase_manager.ts index 967e4013ed3..007910a0572 100644 --- a/yarn-project/sequencer-client/src/sequencer/app_logic_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/app_logic_phase_manager.ts @@ -1,10 +1,15 @@ -import { Tx } from '@aztec/circuit-types'; -import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { PublicExecutor, PublicStateDB } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type Tx } from '@aztec/circuit-types'; +import { + type GlobalVariables, + type Header, + type Proof, + type PublicKernelCircuitPublicInputs, +} from '@aztec/circuits.js'; +import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; /** diff --git a/yarn-project/sequencer-client/src/sequencer/hints_builder.ts b/yarn-project/sequencer-client/src/sequencer/hints_builder.ts index 94eca851ae7..b2a581d7696 100644 --- a/yarn-project/sequencer-client/src/sequencer/hints_builder.ts +++ b/yarn-project/sequencer-client/src/sequencer/hints_builder.ts @@ -1,6 +1,6 @@ import { MerkleTreeId } from '@aztec/circuit-types'; import { - Fr, + type Fr, MAX_NEW_NULLIFIERS_PER_TX, type MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX, type MAX_NULLIFIER_READ_REQUESTS_PER_TX, diff --git a/yarn-project/sequencer-client/src/sequencer/phase_manager_factory.ts b/yarn-project/sequencer-client/src/sequencer/phase_manager_factory.ts index 077892fc847..dd4d24c6a82 100644 --- a/yarn-project/sequencer-client/src/sequencer/phase_manager_factory.ts +++ b/yarn-project/sequencer-client/src/sequencer/phase_manager_factory.ts @@ -1,11 +1,11 @@ -import { Tx } from '@aztec/circuit-types'; -import { GlobalVariables, Header, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { PublicExecutor, PublicStateDB } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type Tx } from '@aztec/circuit-types'; +import { type GlobalVariables, type Header, type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; +import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; -import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; +import { type AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; import { AppLogicPhaseManager } from './app_logic_phase_manager.js'; import { SetupPhaseManager } from './setup_phase_manager.js'; import { TailPhaseManager } from './tail_phase_manager.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts index 30653191af7..b1794ec5999 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts @@ -1,7 +1,7 @@ import { EncryptedTxL2Logs, - FunctionCall, - ProcessedTx, + type FunctionCall, + type ProcessedTx, PublicDataWrite, SiblingPath, SimulationError, @@ -13,7 +13,7 @@ import { } from '@aztec/circuit-types'; import { ARGS_LENGTH, - AztecAddress, + type AztecAddress, CallContext, CallRequest, ContractStorageUpdateRequest, @@ -41,14 +41,14 @@ import { } from '@aztec/circuits.js/testing'; import { makeTuple } from '@aztec/foundation/array'; import { arrayNonEmptyLength, padArrayEnd, times } from '@aztec/foundation/collection'; -import { PublicExecution, PublicExecutionResult, PublicExecutor, WASMSimulator } from '@aztec/simulator'; -import { MerkleTreeOperations, TreeInfo } from '@aztec/world-state'; +import { type PublicExecution, type PublicExecutionResult, type PublicExecutor, WASMSimulator } from '@aztec/simulator'; +import { type MerkleTreeOperations, type TreeInfo } from '@aztec/world-state'; import { jest } from '@jest/globals'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB, WorldStatePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB, type WorldStatePublicDB } from '../simulator/public_executor.js'; import { RealPublicKernelCircuitSimulator } from '../simulator/public_kernel.js'; import { PublicProcessor } from './public_processor.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.ts index 0a9fb3fd574..0b451883d7e 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.ts @@ -1,7 +1,7 @@ import { - FailedTx, - ProcessedTx, - SimulationError, + type FailedTx, + type ProcessedTx, + type SimulationError, Tx, makeEmptyProcessedTx, makeProcessedTx, @@ -13,11 +13,11 @@ import { type GlobalVariables, type Header, type KernelCircuitPublicInputs } fro import { type ProcessReturnValues } from '@aztec/foundation/abi'; import { createDebugLogger } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; -import { PublicExecutor, PublicStateDB, SimulationProvider } from '@aztec/simulator'; -import { ContractDataSource } from '@aztec/types/contracts'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { PublicExecutor, type PublicStateDB, type SimulationProvider } from '@aztec/simulator'; +import { type ContractDataSource } from '@aztec/types/contracts'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js'; import { RealPublicKernelCircuitSimulator } from '../simulator/public_kernel.js'; import { type AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts index 522d40d8847..1b875fbbcf2 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts @@ -1,12 +1,12 @@ import { - L1ToL2MessageSource, + type L1ToL2MessageSource, L2Block, - L2BlockSource, + type L2BlockSource, MerkleTreeId, PROVING_STATUS, - ProverClient, - ProvingSuccess, - ProvingTicket, + type ProverClient, + type ProvingSuccess, + type ProvingTicket, makeEmptyProcessedTx, makeProcessedTx, mockTxForRollup, @@ -25,11 +25,11 @@ import { type P2P, P2PClientState } from '@aztec/p2p'; import { type ContractDataSource } from '@aztec/types/contracts'; import { type MerkleTreeOperations, WorldStateRunningState, type WorldStateSynchronizer } from '@aztec/world-state'; -import { MockProxy, mock, mockFn } from 'jest-mock-extended'; +import { type MockProxy, mock, mockFn } from 'jest-mock-extended'; -import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; -import { L1Publisher } from '../index.js'; -import { PublicProcessor, PublicProcessorFactory } from './public_processor.js'; +import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; +import { type L1Publisher } from '../index.js'; +import { type PublicProcessor, type PublicProcessorFactory } from './public_processor.js'; import { Sequencer } from './sequencer.js'; import { TxValidatorFactory } from './tx_validator_factory.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index 4823f48d3fa..7976b9ae6fb 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -1,20 +1,20 @@ -import { L1ToL2MessageSource, L2Block, L2BlockSource, ProcessedTx, Tx } from '@aztec/circuit-types'; -import { BlockProver, PROVING_STATUS } from '@aztec/circuit-types/interfaces'; -import { L2BlockBuiltStats } from '@aztec/circuit-types/stats'; -import { AztecAddress, EthAddress, GlobalVariables } from '@aztec/circuits.js'; +import { type L1ToL2MessageSource, type L2Block, type L2BlockSource, type ProcessedTx, Tx } from '@aztec/circuit-types'; +import { type BlockProver, PROVING_STATUS } from '@aztec/circuit-types/interfaces'; +import { type L2BlockBuiltStats } from '@aztec/circuit-types/stats'; +import { AztecAddress, EthAddress, type GlobalVariables } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; import { Timer, elapsed } from '@aztec/foundation/timer'; -import { P2P } from '@aztec/p2p'; -import { WorldStateStatus, WorldStateSynchronizer } from '@aztec/world-state'; - -import { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; -import { L1Publisher } from '../publisher/l1-publisher.js'; -import { SequencerConfig } from './config.js'; -import { PublicProcessorFactory } from './public_processor.js'; -import { TxValidator } from './tx_validator.js'; -import { TxValidatorFactory } from './tx_validator_factory.js'; +import { type P2P } from '@aztec/p2p'; +import { type WorldStateStatus, type WorldStateSynchronizer } from '@aztec/world-state'; + +import { type GlobalVariableBuilder } from '../global_variable_builder/global_builder.js'; +import { type L1Publisher } from '../publisher/l1-publisher.js'; +import { type SequencerConfig } from './config.js'; +import { type PublicProcessorFactory } from './public_processor.js'; +import { type TxValidator } from './tx_validator.js'; +import { type TxValidatorFactory } from './tx_validator_factory.js'; /** * Sequencer client diff --git a/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.test.ts b/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.test.ts index 48f977df64f..9253ae06055 100644 --- a/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.test.ts @@ -1,14 +1,14 @@ import { mockTx } from '@aztec/circuit-types'; import { CallRequest, GlobalVariables, Header, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX } from '@aztec/circuits.js'; import { makeTuple } from '@aztec/foundation/array'; -import { PublicExecutor } from '@aztec/simulator'; -import { MerkleTreeOperations, TreeInfo } from '@aztec/world-state'; +import { type PublicExecutor } from '@aztec/simulator'; +import { type MerkleTreeOperations, type TreeInfo } from '@aztec/world-state'; import { it } from '@jest/globals'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB, WorldStatePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB, type WorldStatePublicDB } from '../simulator/public_executor.js'; import { SetupPhaseManager } from './setup_phase_manager.js'; class TestSetupPhaseManager extends SetupPhaseManager { diff --git a/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.ts index c5eb00e3c03..43e434d9b02 100644 --- a/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/setup_phase_manager.ts @@ -1,10 +1,15 @@ -import { Tx } from '@aztec/circuit-types'; -import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { PublicExecutor, PublicStateDB } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type Tx } from '@aztec/circuit-types'; +import { + type GlobalVariables, + type Header, + type Proof, + type PublicKernelCircuitPublicInputs, +} from '@aztec/circuits.js'; +import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; /** diff --git a/yarn-project/sequencer-client/src/sequencer/tail_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/tail_phase_manager.ts index 2b1b8cd7483..e41a05b818b 100644 --- a/yarn-project/sequencer-client/src/sequencer/tail_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/tail_phase_manager.ts @@ -14,8 +14,8 @@ import { type Tuple } from '@aztec/foundation/serialize'; import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; export class TailPhaseManager extends AbstractPhaseManager { diff --git a/yarn-project/sequencer-client/src/sequencer/teardown_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/teardown_phase_manager.ts index bc712cb2d41..825d2de2410 100644 --- a/yarn-project/sequencer-client/src/sequencer/teardown_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/teardown_phase_manager.ts @@ -1,10 +1,15 @@ -import { Tx } from '@aztec/circuit-types'; -import { GlobalVariables, Header, Proof, PublicKernelCircuitPublicInputs } from '@aztec/circuits.js'; -import { PublicExecutor, PublicStateDB } from '@aztec/simulator'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type Tx } from '@aztec/circuit-types'; +import { + type GlobalVariables, + type Header, + type Proof, + type PublicKernelCircuitPublicInputs, +} from '@aztec/circuits.js'; +import { type PublicExecutor, type PublicStateDB } from '@aztec/simulator'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { PublicKernelCircuitSimulator } from '../simulator/index.js'; -import { ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; +import { type PublicKernelCircuitSimulator } from '../simulator/index.js'; +import { type ContractsDataSourcePublicDB } from '../simulator/public_executor.js'; import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; /** diff --git a/yarn-project/sequencer-client/src/sequencer/tx_validator.test.ts b/yarn-project/sequencer-client/src/sequencer/tx_validator.test.ts index ed45f99f4f0..ee8bd7c4212 100644 --- a/yarn-project/sequencer-client/src/sequencer/tx_validator.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/tx_validator.test.ts @@ -1,6 +1,6 @@ import { mockTx, mockTxForRollup } from '@aztec/circuit-types'; import { - AztecAddress, + type AztecAddress, CallContext, EthAddress, Fr, @@ -12,11 +12,11 @@ import { import { makeAztecAddress, makeGlobalVariables } from '@aztec/circuits.js/testing'; import { pedersenHash } from '@aztec/foundation/crypto'; import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token'; -import { ContractDataSource } from '@aztec/types/contracts'; +import { type ContractDataSource } from '@aztec/types/contracts'; -import { MockProxy, mock, mockFn } from 'jest-mock-extended'; +import { type MockProxy, mock, mockFn } from 'jest-mock-extended'; -import { NullifierSource, PublicStateSource, TxValidator } from './tx_validator.js'; +import { type NullifierSource, type PublicStateSource, TxValidator } from './tx_validator.js'; describe('TxValidator', () => { let validator: TxValidator; diff --git a/yarn-project/sequencer-client/src/sequencer/tx_validator.ts b/yarn-project/sequencer-client/src/sequencer/tx_validator.ts index df42fec688a..457aedf2d34 100644 --- a/yarn-project/sequencer-client/src/sequencer/tx_validator.ts +++ b/yarn-project/sequencer-client/src/sequencer/tx_validator.ts @@ -1,9 +1,15 @@ -import { ProcessedTx, Tx } from '@aztec/circuit-types'; -import { AztecAddress, EthAddress, Fr, GlobalVariables, PublicCallRequest } from '@aztec/circuits.js'; +import { type ProcessedTx, Tx } from '@aztec/circuit-types'; +import { + type AztecAddress, + type EthAddress, + Fr, + type GlobalVariables, + type PublicCallRequest, +} from '@aztec/circuits.js'; import { pedersenHash } from '@aztec/foundation/crypto'; -import { Logger, createDebugLogger } from '@aztec/foundation/log'; +import { type Logger, createDebugLogger } from '@aztec/foundation/log'; import { getCanonicalGasTokenAddress } from '@aztec/protocol-contracts/gas-token'; -import { ContractDataSource } from '@aztec/types/contracts'; +import { type ContractDataSource } from '@aztec/types/contracts'; import { AbstractPhaseManager, PublicKernelPhase } from './abstract_phase_manager.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/tx_validator_factory.ts b/yarn-project/sequencer-client/src/sequencer/tx_validator_factory.ts index 75a7a7b2ce3..6608071edb9 100644 --- a/yarn-project/sequencer-client/src/sequencer/tx_validator_factory.ts +++ b/yarn-project/sequencer-client/src/sequencer/tx_validator_factory.ts @@ -1,6 +1,6 @@ -import { AztecAddress, EthAddress, Fr, GlobalVariables } from '@aztec/circuits.js'; -import { ContractDataSource } from '@aztec/types/contracts'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type AztecAddress, type EthAddress, type Fr, type GlobalVariables } from '@aztec/circuits.js'; +import { type ContractDataSource } from '@aztec/types/contracts'; +import { type MerkleTreeOperations } from '@aztec/world-state'; import { WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js'; import { TxValidator } from './tx_validator.js'; diff --git a/yarn-project/sequencer-client/src/sequencer/utils.ts b/yarn-project/sequencer-client/src/sequencer/utils.ts index 3f188f16eab..8918c39030b 100644 --- a/yarn-project/sequencer-client/src/sequencer/utils.ts +++ b/yarn-project/sequencer-client/src/sequencer/utils.ts @@ -1,4 +1,4 @@ -import { Tx } from '@aztec/circuit-types'; +import { type Tx } from '@aztec/circuit-types'; import { CallRequest } from '@aztec/circuits.js'; /** diff --git a/yarn-project/sequencer-client/src/simulator/public_executor.ts b/yarn-project/sequencer-client/src/simulator/public_executor.ts index 6ff7728fb1d..d943af10530 100644 --- a/yarn-project/sequencer-client/src/simulator/public_executor.ts +++ b/yarn-project/sequencer-client/src/simulator/public_executor.ts @@ -1,22 +1,31 @@ -import { MerkleTreeId, NullifierMembershipWitness, Tx } from '@aztec/circuit-types'; +import { MerkleTreeId, NullifierMembershipWitness, type Tx } from '@aztec/circuit-types'; import { - AztecAddress, + type AztecAddress, ContractClassRegisteredEvent, ContractInstanceDeployedEvent, - EthAddress, + type EthAddress, Fr, - FunctionSelector, - L1_TO_L2_MSG_TREE_HEIGHT, - NULLIFIER_TREE_HEIGHT, - NullifierLeafPreimage, - PublicDataTreeLeafPreimage, + type FunctionSelector, + type L1_TO_L2_MSG_TREE_HEIGHT, + type NULLIFIER_TREE_HEIGHT, + type NullifierLeafPreimage, + type PublicDataTreeLeafPreimage, } from '@aztec/circuits.js'; import { computeL1ToL2MessageNullifier, computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; import { createDebugLogger } from '@aztec/foundation/log'; import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; -import { CommitmentsDB, MessageLoadOracleInputs, PublicContractsDB, PublicStateDB } from '@aztec/simulator'; -import { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { + type CommitmentsDB, + MessageLoadOracleInputs, + type PublicContractsDB, + type PublicStateDB, +} from '@aztec/simulator'; +import { + type ContractClassPublic, + type ContractDataSource, + type ContractInstanceWithAddress, +} from '@aztec/types/contracts'; +import { type MerkleTreeOperations } from '@aztec/world-state'; /** * Implements the PublicContractsDB using a ContractDataSource. diff --git a/yarn-project/sequencer-client/src/simulator/public_kernel.ts b/yarn-project/sequencer-client/src/simulator/public_kernel.ts index b2edc8c88c3..04700d7c68c 100644 --- a/yarn-project/sequencer-client/src/simulator/public_kernel.ts +++ b/yarn-project/sequencer-client/src/simulator/public_kernel.ts @@ -1,4 +1,4 @@ -import { CircuitSimulationStats } from '@aztec/circuit-types/stats'; +import { type CircuitSimulationStats } from '@aztec/circuit-types/stats'; import { type KernelCircuitPublicInputs, type PublicKernelCircuitPrivateInputs, @@ -21,9 +21,9 @@ import { convertPublicTeardownRollupInputsToWitnessMap, convertPublicTeardownRollupOutputFromWitnessMap, } from '@aztec/noir-protocol-circuits-types'; -import { SimulationProvider, WASMSimulator } from '@aztec/simulator'; +import { type SimulationProvider, WASMSimulator } from '@aztec/simulator'; -import { PublicKernelCircuitSimulator } from './index.js'; +import { type PublicKernelCircuitSimulator } from './index.js'; /** * Implements the PublicKernelCircuitSimulator. diff --git a/yarn-project/sequencer-client/src/simulator/world_state_public_db.test.ts b/yarn-project/sequencer-client/src/simulator/world_state_public_db.test.ts index d33e8a06d56..42a4d2576ae 100644 --- a/yarn-project/sequencer-client/src/simulator/world_state_public_db.test.ts +++ b/yarn-project/sequencer-client/src/simulator/world_state_public_db.test.ts @@ -1,10 +1,10 @@ import { MerkleTreeId } from '@aztec/circuit-types'; import { AztecAddress, Fr, PublicDataTreeLeafPreimage } from '@aztec/circuits.js'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { MerkleTreeOperations } from '@aztec/world-state'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type MerkleTreeOperations } from '@aztec/world-state'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { WorldStatePublicDB } from './public_executor.js'; diff --git a/yarn-project/simulator/src/acvm/acvm.ts b/yarn-project/simulator/src/acvm/acvm.ts index ffa53b6ad05..d33a660e92e 100644 --- a/yarn-project/simulator/src/acvm/acvm.ts +++ b/yarn-project/simulator/src/acvm/acvm.ts @@ -1,18 +1,18 @@ -import { NoirCallStack, SourceCodeLocation } from '@aztec/circuit-types'; -import { FunctionDebugMetadata, OpcodeLocation } from '@aztec/foundation/abi'; +import { type NoirCallStack, type SourceCodeLocation } from '@aztec/circuit-types'; +import { type FunctionDebugMetadata, type OpcodeLocation } from '@aztec/foundation/abi'; import { createDebugLogger } from '@aztec/foundation/log'; import { - ExecutionError, - ForeignCallInput, - ForeignCallOutput, - WasmBlackBoxFunctionSolver, + type ExecutionError, + type ForeignCallInput, + type ForeignCallOutput, + type WasmBlackBoxFunctionSolver, executeCircuitWithBlackBoxSolver, } from '@noir-lang/acvm_js'; import { traverseCauseChain } from '../common/errors.js'; -import { ACVMWitness } from './acvm_types.js'; -import { ORACLE_NAMES } from './oracle/index.js'; +import { type ACVMWitness } from './acvm_types.js'; +import { type ORACLE_NAMES } from './oracle/index.js'; /** * The callback interface for the ACIR. diff --git a/yarn-project/simulator/src/acvm/acvm_types.ts b/yarn-project/simulator/src/acvm/acvm_types.ts index d155d668048..3053d948a0b 100644 --- a/yarn-project/simulator/src/acvm/acvm_types.ts +++ b/yarn-project/simulator/src/acvm/acvm_types.ts @@ -1,4 +1,4 @@ -import { WitnessMap } from '@noir-lang/acvm_js'; +import { type WitnessMap } from '@noir-lang/acvm_js'; /** * ACVMField diff --git a/yarn-project/simulator/src/acvm/deserialize.ts b/yarn-project/simulator/src/acvm/deserialize.ts index 6a04ec9e5b0..74701582330 100644 --- a/yarn-project/simulator/src/acvm/deserialize.ts +++ b/yarn-project/simulator/src/acvm/deserialize.ts @@ -2,7 +2,7 @@ import { Fr } from '@aztec/foundation/fields'; import { getReturnWitness } from '@noir-lang/acvm_js'; -import { ACVMField, ACVMWitness } from './acvm_types.js'; +import { type ACVMField, type ACVMWitness } from './acvm_types.js'; /** * Converts an ACVM field to a Fr. diff --git a/yarn-project/simulator/src/acvm/oracle/debug.ts b/yarn-project/simulator/src/acvm/oracle/debug.ts index e3080d16ac1..655584512e9 100644 --- a/yarn-project/simulator/src/acvm/oracle/debug.ts +++ b/yarn-project/simulator/src/acvm/oracle/debug.ts @@ -1,6 +1,6 @@ -import { ForeignCallInput } from '@noir-lang/acvm_js'; +import { type ForeignCallInput } from '@noir-lang/acvm_js'; -import { ACVMField } from '../acvm_types.js'; +import { type ACVMField } from '../acvm_types.js'; /** * Convert an array of ACVMFields to a string. diff --git a/yarn-project/simulator/src/acvm/oracle/index.ts b/yarn-project/simulator/src/acvm/oracle/index.ts index 56f45c81f70..a89ffce2a1b 100644 --- a/yarn-project/simulator/src/acvm/oracle/index.ts +++ b/yarn-project/simulator/src/acvm/oracle/index.ts @@ -1,4 +1,4 @@ -import { Oracle } from './oracle.js'; +import { type Oracle } from './oracle.js'; export * from './debug.js'; export * from './oracle.js'; diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 812c41bc068..9266daff20e 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -6,11 +6,11 @@ import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr, Point } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { ACVMField } from '../acvm_types.js'; +import { type ACVMField } from '../acvm_types.js'; import { frToBoolean, frToNumber, fromACVMField } from '../deserialize.js'; import { toACVMField, toAcvmEnqueuePublicFunctionResult } from '../serialize.js'; import { acvmFieldMessageToString, oracleDebugCallToFormattedStr } from './debug.js'; -import { TypedOracle } from './typed_oracle.js'; +import { type TypedOracle } from './typed_oracle.js'; /** * A data source that has all the apis required by Aztec.nr. diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index b315f61d371..9d15b4467fd 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -1,26 +1,26 @@ import { - CompleteAddress, - MerkleTreeId, - Note, - NoteStatus, - NullifierMembershipWitness, - PublicDataWitness, - PublicKey, - SiblingPath, - UnencryptedL2Log, + type CompleteAddress, + type MerkleTreeId, + type Note, + type NoteStatus, + type NullifierMembershipWitness, + type PublicDataWitness, + type PublicKey, + type SiblingPath, + type UnencryptedL2Log, } from '@aztec/circuit-types'; import { - GrumpkinPrivateKey, - Header, - L1_TO_L2_MSG_TREE_HEIGHT, - PrivateCallStackItem, - PublicCallRequest, + type GrumpkinPrivateKey, + type Header, + type L1_TO_L2_MSG_TREE_HEIGHT, + type PrivateCallStackItem, + type PublicCallRequest, } from '@aztec/circuits.js'; -import { FunctionSelector } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type FunctionSelector } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; -import { ContractInstance } from '@aztec/types/contracts'; +import { type ContractInstance } from '@aztec/types/contracts'; /** * A pair of public key and secret key. diff --git a/yarn-project/simulator/src/acvm/serialize.ts b/yarn-project/simulator/src/acvm/serialize.ts index c35f16545b1..0e3a1656d05 100644 --- a/yarn-project/simulator/src/acvm/serialize.ts +++ b/yarn-project/simulator/src/acvm/serialize.ts @@ -1,9 +1,9 @@ -import { ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH, PublicCallRequest } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH, type PublicCallRequest } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; -import { ACVMField } from './acvm_types.js'; +import { type ACVMField } from './acvm_types.js'; /** * Adapts the buffer to the field size. diff --git a/yarn-project/simulator/src/avm/avm_context.ts b/yarn-project/simulator/src/avm/avm_context.ts index 3ae5e6dfe3c..269908b3ae1 100644 --- a/yarn-project/simulator/src/avm/avm_context.ts +++ b/yarn-project/simulator/src/avm/avm_context.ts @@ -1,9 +1,9 @@ -import { AztecAddress, FunctionSelector } from '@aztec/circuits.js'; -import { Fr } from '@aztec/foundation/fields'; +import { type AztecAddress, FunctionSelector } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/foundation/fields'; -import { AvmExecutionEnvironment } from './avm_execution_environment.js'; +import { type AvmExecutionEnvironment } from './avm_execution_environment.js'; import { AvmMachineState } from './avm_machine_state.js'; -import { AvmPersistableStateManager } from './journal/journal.js'; +import { type AvmPersistableStateManager } from './journal/journal.js'; /** * An execution context includes the information necessary to initiate AVM diff --git a/yarn-project/simulator/src/avm/avm_execution_environment.ts b/yarn-project/simulator/src/avm/avm_execution_environment.ts index 2381cf2f16b..ee6c9e3d301 100644 --- a/yarn-project/simulator/src/avm/avm_execution_environment.ts +++ b/yarn-project/simulator/src/avm/avm_execution_environment.ts @@ -1,8 +1,8 @@ -import { FunctionSelector, GlobalVariables } from '@aztec/circuits.js'; +import { FunctionSelector, type GlobalVariables } from '@aztec/circuits.js'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; -import { Fr } from '@aztec/foundation/fields'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type Fr } from '@aztec/foundation/fields'; export class AvmContextInputs { static readonly SIZE = 2; diff --git a/yarn-project/simulator/src/avm/avm_machine_state.ts b/yarn-project/simulator/src/avm/avm_machine_state.ts index 5b4888185a6..a7b6f04334f 100644 --- a/yarn-project/simulator/src/avm/avm_machine_state.ts +++ b/yarn-project/simulator/src/avm/avm_machine_state.ts @@ -1,6 +1,6 @@ -import { Fr } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/circuits.js'; -import { GasCost, GasDimensions } from './avm_gas_cost.js'; +import { type GasCost, GasDimensions } from './avm_gas_cost.js'; import { TaggedMemory } from './avm_memory_types.js'; import { AvmContractCallResults } from './avm_message_call_result.js'; import { OutOfGasError } from './errors.js'; diff --git a/yarn-project/simulator/src/avm/avm_memory_types.ts b/yarn-project/simulator/src/avm/avm_memory_types.ts index 7f4b07462a0..a9b2f1f9a5b 100644 --- a/yarn-project/simulator/src/avm/avm_memory_types.ts +++ b/yarn-project/simulator/src/avm/avm_memory_types.ts @@ -1,6 +1,6 @@ import { toBufferBE } from '@aztec/foundation/bigint-buffer'; import { Fr } from '@aztec/foundation/fields'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { strict as assert } from 'assert'; diff --git a/yarn-project/simulator/src/avm/avm_message_call_result.ts b/yarn-project/simulator/src/avm/avm_message_call_result.ts index 3b7b4e87a0f..9585ff75448 100644 --- a/yarn-project/simulator/src/avm/avm_message_call_result.ts +++ b/yarn-project/simulator/src/avm/avm_message_call_result.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * Results of an contract call's execution in the AVM. diff --git a/yarn-project/simulator/src/avm/avm_simulator.ts b/yarn-project/simulator/src/avm/avm_simulator.ts index 5404cded450..2448b5e1baf 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.ts @@ -1,4 +1,4 @@ -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { strict as assert } from 'assert'; diff --git a/yarn-project/simulator/src/avm/errors.ts b/yarn-project/simulator/src/avm/errors.ts index cf3b3294227..403853e7e02 100644 --- a/yarn-project/simulator/src/avm/errors.ts +++ b/yarn-project/simulator/src/avm/errors.ts @@ -1,4 +1,4 @@ -import { AztecAddress } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/circuits.js'; /** * Avm-specific errors should derive from this diff --git a/yarn-project/simulator/src/avm/fixtures/index.ts b/yarn-project/simulator/src/avm/fixtures/index.ts index 88fc65a2de2..cb7fb7e776b 100644 --- a/yarn-project/simulator/src/avm/fixtures/index.ts +++ b/yarn-project/simulator/src/avm/fixtures/index.ts @@ -8,7 +8,12 @@ import { Fr } from '@aztec/foundation/fields'; import { mock } from 'jest-mock-extended'; import merge from 'lodash.merge'; -import { CommitmentsDB, MessageLoadOracleInputs, PublicContractsDB, PublicStateDB } from '../../index.js'; +import { + type CommitmentsDB, + MessageLoadOracleInputs, + type PublicContractsDB, + type PublicStateDB, +} from '../../index.js'; import { AvmContext } from '../avm_context.js'; import { AvmContextInputs, AvmExecutionEnvironment } from '../avm_execution_environment.js'; import { AvmMachineState } from '../avm_machine_state.js'; diff --git a/yarn-project/simulator/src/avm/journal/host_storage.ts b/yarn-project/simulator/src/avm/journal/host_storage.ts index 6d249d49e0d..03f7cfea29b 100644 --- a/yarn-project/simulator/src/avm/journal/host_storage.ts +++ b/yarn-project/simulator/src/avm/journal/host_storage.ts @@ -1,4 +1,4 @@ -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from '../../public/db.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db.js'; /** * Host storage diff --git a/yarn-project/simulator/src/avm/journal/journal.test.ts b/yarn-project/simulator/src/avm/journal/journal.test.ts index 83be8cbf560..302a403d4e5 100644 --- a/yarn-project/simulator/src/avm/journal/journal.test.ts +++ b/yarn-project/simulator/src/avm/journal/journal.test.ts @@ -3,12 +3,12 @@ import { AztecAddress, EthAddress } from '@aztec/circuits.js'; import { EventSelector } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from '../../index.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../index.js'; import { initL1ToL2MessageOracleInput } from '../fixtures/index.js'; import { HostStorage } from './host_storage.js'; -import { AvmPersistableStateManager, JournalData } from './journal.js'; +import { AvmPersistableStateManager, type JournalData } from './journal.js'; describe('journal', () => { let publicDb: MockProxy; diff --git a/yarn-project/simulator/src/avm/journal/journal.ts b/yarn-project/simulator/src/avm/journal/journal.ts index b2709d01d3c..d7274dec92b 100644 --- a/yarn-project/simulator/src/avm/journal/journal.ts +++ b/yarn-project/simulator/src/avm/journal/journal.ts @@ -3,11 +3,11 @@ import { AztecAddress, EthAddress, L2ToL1Message } from '@aztec/circuits.js'; import { EventSelector } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; -import { HostStorage } from './host_storage.js'; +import { type HostStorage } from './host_storage.js'; import { Nullifiers } from './nullifiers.js'; import { PublicStorage } from './public_storage.js'; import { WorldStateAccessTrace } from './trace.js'; -import { TracedL1toL2MessageCheck, TracedNoteHashCheck, TracedNullifierCheck } from './trace_types.js'; +import { type TracedL1toL2MessageCheck, type TracedNoteHashCheck, type TracedNullifierCheck } from './trace_types.js'; /** * Data held within the journal diff --git a/yarn-project/simulator/src/avm/journal/nullifiers.test.ts b/yarn-project/simulator/src/avm/journal/nullifiers.test.ts index 5a459823acc..16f4d359a53 100644 --- a/yarn-project/simulator/src/avm/journal/nullifiers.test.ts +++ b/yarn-project/simulator/src/avm/journal/nullifiers.test.ts @@ -1,8 +1,8 @@ import { Fr } from '@aztec/foundation/fields'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { CommitmentsDB } from '../../index.js'; +import { type CommitmentsDB } from '../../index.js'; import { Nullifiers } from './nullifiers.js'; describe('avm nullifier caching', () => { diff --git a/yarn-project/simulator/src/avm/journal/public_storage.test.ts b/yarn-project/simulator/src/avm/journal/public_storage.test.ts index d8b79fc79c0..33c747977d7 100644 --- a/yarn-project/simulator/src/avm/journal/public_storage.test.ts +++ b/yarn-project/simulator/src/avm/journal/public_storage.test.ts @@ -1,8 +1,8 @@ import { Fr } from '@aztec/foundation/fields'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { PublicStateDB } from '../../index.js'; +import { type PublicStateDB } from '../../index.js'; import { PublicStorage } from './public_storage.js'; describe('avm public storage', () => { diff --git a/yarn-project/simulator/src/avm/journal/trace.test.ts b/yarn-project/simulator/src/avm/journal/trace.test.ts index a7b309fbb30..93231b4b727 100644 --- a/yarn-project/simulator/src/avm/journal/trace.test.ts +++ b/yarn-project/simulator/src/avm/journal/trace.test.ts @@ -1,7 +1,7 @@ import { Fr } from '@aztec/foundation/fields'; import { WorldStateAccessTrace } from './trace.js'; -import { TracedL1toL2MessageCheck, TracedNullifierCheck } from './trace_types.js'; +import { type TracedL1toL2MessageCheck, type TracedNullifierCheck } from './trace_types.js'; describe('world state access trace', () => { let trace: WorldStateAccessTrace; diff --git a/yarn-project/simulator/src/avm/journal/trace.ts b/yarn-project/simulator/src/avm/journal/trace.ts index 620e2e0462c..48e4df34dc7 100644 --- a/yarn-project/simulator/src/avm/journal/trace.ts +++ b/yarn-project/simulator/src/avm/journal/trace.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; -import { TracedL1toL2MessageCheck, TracedNoteHashCheck, TracedNullifierCheck } from './trace_types.js'; +import { type TracedL1toL2MessageCheck, type TracedNoteHashCheck, type TracedNullifierCheck } from './trace_types.js'; export class WorldStateAccessTrace { public accessCounter: number; diff --git a/yarn-project/simulator/src/avm/journal/trace_types.ts b/yarn-project/simulator/src/avm/journal/trace_types.ts index 3d065c4fd7d..f86b51e57e5 100644 --- a/yarn-project/simulator/src/avm/journal/trace_types.ts +++ b/yarn-project/simulator/src/avm/journal/trace_types.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; //export type TracedContractCall = { // callPointer: Fr; diff --git a/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts b/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts index 3976c805a04..9b064a20827 100644 --- a/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/accrued_substate.test.ts @@ -4,8 +4,8 @@ import { EventSelector } from '@aztec/foundation/abi'; import { mock } from 'jest-mock-extended'; -import { CommitmentsDB } from '../../index.js'; -import { AvmContext } from '../avm_context.js'; +import { type CommitmentsDB } from '../../index.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, Uint8 } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { diff --git a/yarn-project/simulator/src/avm/opcodes/addressing_mode.ts b/yarn-project/simulator/src/avm/opcodes/addressing_mode.ts index 97e19d9f083..c3d0308c1c8 100644 --- a/yarn-project/simulator/src/avm/opcodes/addressing_mode.ts +++ b/yarn-project/simulator/src/avm/opcodes/addressing_mode.ts @@ -1,6 +1,6 @@ import { strict as assert } from 'assert'; -import { TaggedMemory } from '../avm_memory_types.js'; +import { type TaggedMemory } from '../avm_memory_types.js'; export enum AddressingMode { DIRECT, diff --git a/yarn-project/simulator/src/avm/opcodes/arithmetic.test.ts b/yarn-project/simulator/src/avm/opcodes/arithmetic.test.ts index 23ba3b19539..10c92d9588c 100644 --- a/yarn-project/simulator/src/avm/opcodes/arithmetic.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/arithmetic.test.ts @@ -1,4 +1,4 @@ -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32, Uint64, Uint128 } from '../avm_memory_types.js'; import { initContext } from '../fixtures/index.js'; import { Add, Div, FieldDiv, Mul, Sub } from './arithmetic.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/arithmetic.ts b/yarn-project/simulator/src/avm/opcodes/arithmetic.ts index 44790a692d8..597ead05cc7 100644 --- a/yarn-project/simulator/src/avm/opcodes/arithmetic.ts +++ b/yarn-project/simulator/src/avm/opcodes/arithmetic.ts @@ -1,6 +1,6 @@ import type { AvmContext } from '../avm_context.js'; -import { GasCost, GasCostConstants, getGasCostMultiplierFromTypeTag, makeGasCost } from '../avm_gas_cost.js'; -import { Field, MemoryValue, TypeTag } from '../avm_memory_types.js'; +import { type GasCost, GasCostConstants, getGasCostMultiplierFromTypeTag, makeGasCost } from '../avm_gas_cost.js'; +import { type Field, type MemoryValue, TypeTag } from '../avm_memory_types.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; import { Instruction } from './instruction.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts b/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts index 8a16f215f03..afd6fa26126 100644 --- a/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/bitwise.test.ts @@ -1,4 +1,4 @@ -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { TypeTag, Uint16, Uint32 } from '../avm_memory_types.js'; import { initContext } from '../fixtures/index.js'; import { And, Not, Or, Shl, Shr, Xor } from './bitwise.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/bitwise.ts b/yarn-project/simulator/src/avm/opcodes/bitwise.ts index 9161c8bb22c..a7aeb0cfe0b 100644 --- a/yarn-project/simulator/src/avm/opcodes/bitwise.ts +++ b/yarn-project/simulator/src/avm/opcodes/bitwise.ts @@ -1,5 +1,5 @@ import type { AvmContext } from '../avm_context.js'; -import { IntegralValue } from '../avm_memory_types.js'; +import { type IntegralValue } from '../avm_memory_types.js'; import { Opcode } from '../serialization/instruction_serialization.js'; import { ThreeOperandInstruction, TwoOperandInstruction } from './instruction_impl.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/comparators.test.ts b/yarn-project/simulator/src/avm/opcodes/comparators.test.ts index 4591a05a195..34ee18be64f 100644 --- a/yarn-project/simulator/src/avm/opcodes/comparators.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/comparators.test.ts @@ -1,4 +1,4 @@ -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32 } from '../avm_memory_types.js'; import { TagCheckError } from '../errors.js'; import { initContext } from '../fixtures/index.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/control_flow.test.ts b/yarn-project/simulator/src/avm/opcodes/control_flow.test.ts index 660c561a3e5..abd6ea2958f 100644 --- a/yarn-project/simulator/src/avm/opcodes/control_flow.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/control_flow.test.ts @@ -1,4 +1,4 @@ -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Uint16 } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { initContext } from '../fixtures/index.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/control_flow.ts b/yarn-project/simulator/src/avm/opcodes/control_flow.ts index 0ebc96b6ccb..4f88e6139f1 100644 --- a/yarn-project/simulator/src/avm/opcodes/control_flow.ts +++ b/yarn-project/simulator/src/avm/opcodes/control_flow.ts @@ -1,5 +1,5 @@ import type { AvmContext } from '../avm_context.js'; -import { IntegralValue } from '../avm_memory_types.js'; +import { type IntegralValue } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Instruction } from './instruction.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/environment_getters.ts b/yarn-project/simulator/src/avm/opcodes/environment_getters.ts index f2ddd5d67f6..b82ed750844 100644 --- a/yarn-project/simulator/src/avm/opcodes/environment_getters.ts +++ b/yarn-project/simulator/src/avm/opcodes/environment_getters.ts @@ -1,4 +1,4 @@ -import { Fr } from '@aztec/circuits.js'; +import { type Fr } from '@aztec/circuits.js'; import type { AvmContext } from '../avm_context.js'; import type { AvmExecutionEnvironment } from '../avm_execution_environment.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts index d6112104d45..9647aaeea3d 100644 --- a/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/external_calls.test.ts @@ -3,15 +3,15 @@ import { Fr } from '@aztec/foundation/fields'; import { jest } from '@jest/globals'; import { mock } from 'jest-mock-extended'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from '../../index.js'; -import { AvmContext } from '../avm_context.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../index.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, Uint8 } from '../avm_memory_types.js'; import { adjustCalldataIndex, initContext } from '../fixtures/index.js'; import { HostStorage } from '../journal/host_storage.js'; import { AvmPersistableStateManager } from '../journal/journal.js'; import { encodeToBytecode } from '../serialization/bytecode_serialization.js'; import { Call, Return, Revert, StaticCall } from './external_calls.js'; -import { Instruction } from './instruction.js'; +import { type Instruction } from './instruction.js'; import { CalldataCopy } from './memory.js'; import { SStore } from './storage.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts index 4b43d1e4a6b..42e6d690e48 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.test.ts @@ -1,6 +1,6 @@ import { keccak, pedersenHash, poseidonHash, sha256 } from '@aztec/foundation/crypto'; -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, Uint32 } from '../avm_memory_types.js'; import { initContext } from '../fixtures/index.js'; import { Addressing, AddressingMode } from './addressing_mode.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/hashing.ts b/yarn-project/simulator/src/avm/opcodes/hashing.ts index e4bc7afd4dd..aecbd4a71a1 100644 --- a/yarn-project/simulator/src/avm/opcodes/hashing.ts +++ b/yarn-project/simulator/src/avm/opcodes/hashing.ts @@ -1,7 +1,7 @@ import { toBigIntBE } from '@aztec/foundation/bigint-buffer'; import { keccak, pedersenHash, poseidonHash, sha256 } from '@aztec/foundation/crypto'; -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field } from '../avm_memory_types.js'; import { Opcode, OperandType } from '../serialization/instruction_serialization.js'; import { Addressing } from './addressing_mode.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/instruction.ts b/yarn-project/simulator/src/avm/opcodes/instruction.ts index 2660052c265..93bf6c307dc 100644 --- a/yarn-project/simulator/src/avm/opcodes/instruction.ts +++ b/yarn-project/simulator/src/avm/opcodes/instruction.ts @@ -1,9 +1,9 @@ import { strict as assert } from 'assert'; import type { AvmContext } from '../avm_context.js'; -import { DynamicGasCost, GasCost, GasCosts } from '../avm_gas_cost.js'; -import { BufferCursor } from '../serialization/buffer_cursor.js'; -import { Opcode, OperandType, deserialize, serialize } from '../serialization/instruction_serialization.js'; +import { DynamicGasCost, type GasCost, GasCosts } from '../avm_gas_cost.js'; +import { type BufferCursor } from '../serialization/buffer_cursor.js'; +import { Opcode, type OperandType, deserialize, serialize } from '../serialization/instruction_serialization.js'; type InstructionConstructor = { new (...args: any[]): Instruction; diff --git a/yarn-project/simulator/src/avm/opcodes/memory.test.ts b/yarn-project/simulator/src/avm/opcodes/memory.test.ts index 0b8102f98c7..c133f4a4c04 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.test.ts @@ -1,6 +1,6 @@ import { Fr } from '@aztec/foundation/fields'; -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field, TypeTag, Uint8, Uint16, Uint32, Uint64, Uint128 } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { adjustCalldataIndex, initContext, initExecutionEnvironment } from '../fixtures/index.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/memory.ts b/yarn-project/simulator/src/avm/opcodes/memory.ts index 87a5ccdd465..74137183d8b 100644 --- a/yarn-project/simulator/src/avm/opcodes/memory.ts +++ b/yarn-project/simulator/src/avm/opcodes/memory.ts @@ -1,5 +1,5 @@ import type { AvmContext } from '../avm_context.js'; -import { GasCost, GasCostConstants, getGasCostMultiplierFromTypeTag, makeGasCost } from '../avm_gas_cost.js'; +import { type GasCost, GasCostConstants, getGasCostMultiplierFromTypeTag, makeGasCost } from '../avm_gas_cost.js'; import { Field, TaggedMemory, TypeTag } from '../avm_memory_types.js'; import { InstructionExecutionError } from '../errors.js'; import { BufferCursor } from '../serialization/buffer_cursor.js'; diff --git a/yarn-project/simulator/src/avm/opcodes/storage.test.ts b/yarn-project/simulator/src/avm/opcodes/storage.test.ts index ab98f3e7140..79b0bb3f0d7 100644 --- a/yarn-project/simulator/src/avm/opcodes/storage.test.ts +++ b/yarn-project/simulator/src/avm/opcodes/storage.test.ts @@ -1,12 +1,12 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { AvmContext } from '../avm_context.js'; +import { type AvmContext } from '../avm_context.js'; import { Field } from '../avm_memory_types.js'; import { initContext, initExecutionEnvironment } from '../fixtures/index.js'; -import { AvmPersistableStateManager } from '../journal/journal.js'; +import { type AvmPersistableStateManager } from '../journal/journal.js'; import { SLoad, SStore, StaticCallStorageAlterError } from './storage.js'; describe('Storage Instructions', () => { diff --git a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts index a9d8f08bec2..82641334b25 100644 --- a/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts +++ b/yarn-project/simulator/src/avm/serialization/bytecode_serialization.test.ts @@ -1,9 +1,9 @@ import { strict as assert } from 'assert'; import { Add, Address, Call, StaticCall, Sub } from '../opcodes/index.js'; -import { BufferCursor } from './buffer_cursor.js'; -import { InstructionSet, decodeFromBytecode, encodeToBytecode } from './bytecode_serialization.js'; -import { Opcode } from './instruction_serialization.js'; +import { type BufferCursor } from './buffer_cursor.js'; +import { type InstructionSet, decodeFromBytecode, encodeToBytecode } from './bytecode_serialization.js'; +import { type Opcode } from './instruction_serialization.js'; class InstA { constructor(private n: number) {} diff --git a/yarn-project/simulator/src/avm/temporary_executor_migration.ts b/yarn-project/simulator/src/avm/temporary_executor_migration.ts index dcdedf77ca2..a5cc697761e 100644 --- a/yarn-project/simulator/src/avm/temporary_executor_migration.ts +++ b/yarn-project/simulator/src/avm/temporary_executor_migration.ts @@ -3,16 +3,16 @@ import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; import { ContractStorageRead, ContractStorageUpdateRequest, - GlobalVariables, + type GlobalVariables, L2ToL1Message, - ReadRequest, + type ReadRequest, SideEffect, - SideEffectLinkedToNoteHash, + type SideEffectLinkedToNoteHash, } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; import { createSimulationError } from '../common/errors.js'; -import { PublicExecution, PublicExecutionResult } from '../public/execution.js'; +import { type PublicExecution, type PublicExecutionResult } from '../public/execution.js'; import { AvmExecutionEnvironment } from './avm_execution_environment.js'; import { type AvmContractCallResults } from './avm_message_call_result.js'; import { type JournalData } from './journal/journal.js'; diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 8586f777ae1..3f626293121 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -1,37 +1,37 @@ import { - AuthWitness, - AztecNode, + type AuthWitness, + type AztecNode, EncryptedFunctionL2Logs, EncryptedL2Log, L1NotePayload, Note, - NoteStatus, + type NoteStatus, TaggedNote, UnencryptedFunctionL2Logs, - UnencryptedL2Log, + type UnencryptedL2Log, } from '@aztec/circuit-types'; import { CallContext, FunctionData, FunctionSelector, - Header, + type Header, NoteHashReadRequestMembershipWitness, PublicCallRequest, - SideEffect, + type SideEffect, TxContext, } from '@aztec/circuits.js'; -import { Grumpkin } from '@aztec/circuits.js/barretenberg'; +import { type Grumpkin } from '@aztec/circuits.js/barretenberg'; import { computePublicDataTreeLeafSlot, computeUniqueCommitment, siloNoteHash } from '@aztec/circuits.js/hash'; -import { FunctionAbi, FunctionArtifact, countArgumentsSize } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr, Point } from '@aztec/foundation/fields'; +import { type FunctionAbi, type FunctionArtifact, countArgumentsSize } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { Fr, type Point } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { NoteData, toACVMWitness } from '../acvm/index.js'; -import { PackedArgsCache } from '../common/packed_args_cache.js'; -import { DBOracle } from './db_oracle.js'; -import { ExecutionNoteCache } from './execution_note_cache.js'; -import { ExecutionResult, NoteAndSlot } from './execution_result.js'; +import { type NoteData, toACVMWitness } from '../acvm/index.js'; +import { type PackedArgsCache } from '../common/packed_args_cache.js'; +import { type DBOracle } from './db_oracle.js'; +import { type ExecutionNoteCache } from './execution_note_cache.js'; +import { type ExecutionResult, type NoteAndSlot } from './execution_result.js'; import { pickNotes } from './pick_notes.js'; import { executePrivateFunction } from './private_execution.js'; import { ViewDataOracle } from './view_data_oracle.js'; diff --git a/yarn-project/simulator/src/client/db_oracle.ts b/yarn-project/simulator/src/client/db_oracle.ts index 9f6462e331a..4338f4c3a9b 100644 --- a/yarn-project/simulator/src/client/db_oracle.ts +++ b/yarn-project/simulator/src/client/db_oracle.ts @@ -1,13 +1,19 @@ -import { L2Block, MerkleTreeId, NoteStatus, NullifierMembershipWitness, PublicDataWitness } from '@aztec/circuit-types'; -import { CompleteAddress, Header } from '@aztec/circuits.js'; -import { FunctionArtifactWithDebugMetadata, FunctionSelector } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; -import { Fr } from '@aztec/foundation/fields'; -import { ContractInstance } from '@aztec/types/contracts'; - -import { KeyPair, NoteData } from '../acvm/index.js'; -import { CommitmentsDB } from '../public/db.js'; +import { + type L2Block, + type MerkleTreeId, + type NoteStatus, + type NullifierMembershipWitness, + type PublicDataWitness, +} from '@aztec/circuit-types'; +import { type CompleteAddress, type Header } from '@aztec/circuits.js'; +import { type FunctionArtifactWithDebugMetadata, type FunctionSelector } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; +import { type Fr } from '@aztec/foundation/fields'; +import { type ContractInstance } from '@aztec/types/contracts'; + +import { type KeyPair, type NoteData } from '../acvm/index.js'; +import { type CommitmentsDB } from '../public/db.js'; /** * Error thrown when a contract is not found in the database. diff --git a/yarn-project/simulator/src/client/execution_note_cache.ts b/yarn-project/simulator/src/client/execution_note_cache.ts index ad4be3e8c34..67752a52a29 100644 --- a/yarn-project/simulator/src/client/execution_note_cache.ts +++ b/yarn-project/simulator/src/client/execution_note_cache.ts @@ -1,8 +1,8 @@ import { siloNullifier } from '@aztec/circuits.js/hash'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -import { NoteData } from '../acvm/index.js'; +import { type NoteData } from '../acvm/index.js'; /** * Data that's accessible by all the function calls in an execution. diff --git a/yarn-project/simulator/src/client/execution_result.test.ts b/yarn-project/simulator/src/client/execution_result.test.ts index f09c5bf0744..0938c50af58 100644 --- a/yarn-project/simulator/src/client/execution_result.test.ts +++ b/yarn-project/simulator/src/client/execution_result.test.ts @@ -7,7 +7,7 @@ import { import { AztecAddress, PrivateCallStackItem } from '@aztec/circuits.js'; import { EventSelector } from '@aztec/foundation/abi'; -import { ExecutionResult, collectEncryptedLogs, collectUnencryptedLogs } from './execution_result.js'; +import { type ExecutionResult, collectEncryptedLogs, collectUnencryptedLogs } from './execution_result.js'; function emptyExecutionResult(): ExecutionResult { return { diff --git a/yarn-project/simulator/src/client/execution_result.ts b/yarn-project/simulator/src/client/execution_result.ts index 4fccc6e8e01..5118b28d607 100644 --- a/yarn-project/simulator/src/client/execution_result.ts +++ b/yarn-project/simulator/src/client/execution_result.ts @@ -1,9 +1,13 @@ -import { EncryptedFunctionL2Logs, Note, UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; -import { NoteHashReadRequestMembershipWitness, PrivateCallStackItem, PublicCallRequest } from '@aztec/circuits.js'; -import { DecodedReturn } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type EncryptedFunctionL2Logs, type Note, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; +import { + type NoteHashReadRequestMembershipWitness, + type PrivateCallStackItem, + type PublicCallRequest, +} from '@aztec/circuits.js'; +import { type DecodedReturn } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; -import { ACVMField } from '../acvm/index.js'; +import { type ACVMField } from '../acvm/index.js'; /** * The contents of a new note. diff --git a/yarn-project/simulator/src/client/pick_notes.ts b/yarn-project/simulator/src/client/pick_notes.ts index 4531a487ef6..26e65e64616 100644 --- a/yarn-project/simulator/src/client/pick_notes.ts +++ b/yarn-project/simulator/src/client/pick_notes.ts @@ -1,4 +1,4 @@ -import { Comparator, Note } from '@aztec/circuit-types'; +import { Comparator, type Note } from '@aztec/circuit-types'; import { Fr } from '@aztec/foundation/fields'; export interface PropertySelector { diff --git a/yarn-project/simulator/src/client/private_execution.test.ts b/yarn-project/simulator/src/client/private_execution.test.ts index 07ca3f34c8c..379bb25504e 100644 --- a/yarn-project/simulator/src/client/private_execution.test.ts +++ b/yarn-project/simulator/src/client/private_execution.test.ts @@ -1,4 +1,4 @@ -import { AztecNode, L1ToL2Message, Note, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecNode, type L1ToL2Message, Note, PackedArguments, TxExecutionRequest } from '@aztec/circuit-types'; import { AppendOnlyTreeSnapshot, CallContext, @@ -21,7 +21,7 @@ import { import { computeCommitmentNonce, computeMessageSecretHash, computeVarArgsHash } from '@aztec/circuits.js/hash'; import { makeHeader } from '@aztec/circuits.js/testing'; import { - FunctionArtifact, + type FunctionArtifact, FunctionSelector, encodeArguments, getFunctionArtifact, @@ -33,10 +33,10 @@ import { times } from '@aztec/foundation/collection'; import { pedersenHash, randomInt } from '@aztec/foundation/crypto'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr, GrumpkinScalar } from '@aztec/foundation/fields'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type FieldsOf } from '@aztec/foundation/types'; import { openTmpStore } from '@aztec/kv-store/utils'; -import { AppendOnlyTree, Pedersen, StandardTree, newTree } from '@aztec/merkle-tree'; +import { type AppendOnlyTree, Pedersen, StandardTree, newTree } from '@aztec/merkle-tree'; import { ChildContractArtifact, ImportTestContractArtifact, @@ -47,13 +47,13 @@ import { } from '@aztec/noir-contracts.js'; import { jest } from '@jest/globals'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { toFunctionSelector } from 'viem'; -import { KeyPair, MessageLoadOracleInputs } from '../acvm/index.js'; +import { type KeyPair, MessageLoadOracleInputs } from '../acvm/index.js'; import { buildL1ToL2Message } from '../test/utils.js'; import { computeSlotForMapping } from '../utils.js'; -import { DBOracle } from './db_oracle.js'; +import { type DBOracle } from './db_oracle.js'; import { collectUnencryptedLogs } from './execution_result.js'; import { AcirSimulator } from './simulator.js'; diff --git a/yarn-project/simulator/src/client/private_execution.ts b/yarn-project/simulator/src/client/private_execution.ts index e04173d7336..2eb822b4b7a 100644 --- a/yarn-project/simulator/src/client/private_execution.ts +++ b/yarn-project/simulator/src/client/private_execution.ts @@ -1,5 +1,5 @@ import { type FunctionData, PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js'; -import { type AbiType, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; +import { type ABIType, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; @@ -7,8 +7,8 @@ import { createDebugLogger } from '@aztec/foundation/log'; import { extractReturnWitness } from '../acvm/deserialize.js'; import { Oracle, acvm, extractCallStack } from '../acvm/index.js'; import { ExecutionError } from '../common/errors.js'; -import { ClientExecutionContext } from './client_execution_context.js'; -import { ExecutionResult } from './execution_result.js'; +import { type ClientExecutionContext } from './client_execution_context.js'; +import { type ExecutionResult } from './execution_result.js'; import { AcirSimulator } from './simulator.js'; /** @@ -55,7 +55,7 @@ export async function executePrivateFunction( // Mocking the return type to be an array of 4 fields // TODO: @LHerskind must be updated as we are progressing with the macros to get the information - const returnTypes: AbiType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; + const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; const mockArtifact = { ...artifact, returnTypes }; const returnValues = decodeReturnValues(mockArtifact, publicInputs.returnValues); diff --git a/yarn-project/simulator/src/client/simulator.test.ts b/yarn-project/simulator/src/client/simulator.test.ts index 636f3349fb5..4bb3dc3d3f3 100644 --- a/yarn-project/simulator/src/client/simulator.test.ts +++ b/yarn-project/simulator/src/client/simulator.test.ts @@ -1,15 +1,19 @@ -import { AztecNode, Note } from '@aztec/circuit-types'; +import { type AztecNode, Note } from '@aztec/circuit-types'; import { CompleteAddress } from '@aztec/circuits.js'; import { computeUniqueCommitment, siloNoteHash } from '@aztec/circuits.js/hash'; -import { ABIParameterVisibility, FunctionArtifactWithDebugMetadata, getFunctionArtifact } from '@aztec/foundation/abi'; +import { + ABIParameterVisibility, + type FunctionArtifactWithDebugMetadata, + getFunctionArtifact, +} from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash } from '@aztec/foundation/crypto'; import { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields'; import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { DBOracle } from './db_oracle.js'; +import { type DBOracle } from './db_oracle.js'; import { AcirSimulator } from './simulator.js'; describe('Simulator', () => { diff --git a/yarn-project/simulator/src/client/simulator.ts b/yarn-project/simulator/src/client/simulator.ts index 4c1e829c8e6..6f7058a59bb 100644 --- a/yarn-project/simulator/src/client/simulator.ts +++ b/yarn-project/simulator/src/client/simulator.ts @@ -1,26 +1,26 @@ -import { AztecNode, FunctionCall, Note, TxExecutionRequest } from '@aztec/circuit-types'; +import { type AztecNode, type FunctionCall, type Note, type TxExecutionRequest } from '@aztec/circuit-types'; import { CallContext, FunctionData } from '@aztec/circuits.js'; import { Grumpkin } from '@aztec/circuits.js/barretenberg'; import { - ArrayType, - FunctionArtifactWithDebugMetadata, + type ArrayType, + type FunctionArtifactWithDebugMetadata, FunctionSelector, FunctionType, encodeArguments, } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { EthAddress } from '@aztec/foundation/eth-address'; +import { type EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { WasmBlackBoxFunctionSolver, createBlackBoxSolver } from '@noir-lang/acvm_js'; +import { type WasmBlackBoxFunctionSolver, createBlackBoxSolver } from '@noir-lang/acvm_js'; import { createSimulationError } from '../common/errors.js'; import { PackedArgsCache } from '../common/packed_args_cache.js'; import { ClientExecutionContext } from './client_execution_context.js'; -import { DBOracle } from './db_oracle.js'; +import { type DBOracle } from './db_oracle.js'; import { ExecutionNoteCache } from './execution_note_cache.js'; -import { ExecutionResult } from './execution_result.js'; +import { type ExecutionResult } from './execution_result.js'; import { executePrivateFunction } from './private_execution.js'; import { executeUnconstrainedFunction } from './unconstrained_execution.js'; import { ViewDataOracle } from './view_data_oracle.js'; diff --git a/yarn-project/simulator/src/client/unconstrained_execution.test.ts b/yarn-project/simulator/src/client/unconstrained_execution.test.ts index b4997ddba21..dea57f9e00b 100644 --- a/yarn-project/simulator/src/client/unconstrained_execution.test.ts +++ b/yarn-project/simulator/src/client/unconstrained_execution.test.ts @@ -1,4 +1,4 @@ -import { AztecNode, FunctionCall, Note } from '@aztec/circuit-types'; +import { type AztecNode, type FunctionCall, Note } from '@aztec/circuit-types'; import { CompleteAddress, FunctionData, Header } from '@aztec/circuits.js'; import { FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; @@ -7,7 +7,7 @@ import { StatefulTestContractArtifact } from '@aztec/noir-contracts.js/StatefulT import { mock } from 'jest-mock-extended'; -import { DBOracle } from './db_oracle.js'; +import { type DBOracle } from './db_oracle.js'; import { AcirSimulator } from './simulator.js'; describe('Unconstrained Execution test suite', () => { diff --git a/yarn-project/simulator/src/client/unconstrained_execution.ts b/yarn-project/simulator/src/client/unconstrained_execution.ts index 19b78bec0f5..352c3a52e62 100644 --- a/yarn-project/simulator/src/client/unconstrained_execution.ts +++ b/yarn-project/simulator/src/client/unconstrained_execution.ts @@ -1,14 +1,14 @@ -import { FunctionData } from '@aztec/circuits.js'; -import { DecodedReturn, FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr } from '@aztec/foundation/fields'; +import { type FunctionData } from '@aztec/circuits.js'; +import { type DecodedReturn, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; import { extractReturnWitness } from '../acvm/deserialize.js'; import { Oracle, acvm, extractCallStack, toACVMWitness } from '../acvm/index.js'; import { ExecutionError } from '../common/errors.js'; import { AcirSimulator } from './simulator.js'; -import { ViewDataOracle } from './view_data_oracle.js'; +import { type ViewDataOracle } from './view_data_oracle.js'; // docs:start:execute_unconstrained_function /** diff --git a/yarn-project/simulator/src/client/view_data_oracle.ts b/yarn-project/simulator/src/client/view_data_oracle.ts index 5e6f33e3b6a..92fac26f4ad 100644 --- a/yarn-project/simulator/src/client/view_data_oracle.ts +++ b/yarn-project/simulator/src/client/view_data_oracle.ts @@ -1,21 +1,21 @@ import { - AuthWitness, - AztecNode, - CompleteAddress, + type AuthWitness, + type AztecNode, + type CompleteAddress, MerkleTreeId, - NoteStatus, - NullifierMembershipWitness, - PublicDataWitness, + type NoteStatus, + type NullifierMembershipWitness, + type PublicDataWitness, } from '@aztec/circuit-types'; -import { Header } from '@aztec/circuits.js'; +import { type Header } from '@aztec/circuits.js'; import { siloNullifier } from '@aztec/circuits.js/hash'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { ContractInstance } from '@aztec/types/contracts'; +import { type ContractInstance } from '@aztec/types/contracts'; -import { NoteData, TypedOracle } from '../acvm/index.js'; -import { DBOracle } from './db_oracle.js'; +import { type NoteData, TypedOracle } from '../acvm/index.js'; +import { type DBOracle } from './db_oracle.js'; import { pickNotes } from './pick_notes.js'; /** diff --git a/yarn-project/simulator/src/common/errors.ts b/yarn-project/simulator/src/common/errors.ts index 722819537a2..1d0bdf18402 100644 --- a/yarn-project/simulator/src/common/errors.ts +++ b/yarn-project/simulator/src/common/errors.ts @@ -1,4 +1,4 @@ -import { FailingFunction, NoirCallStack, SimulationError } from '@aztec/circuit-types'; +import { type FailingFunction, type NoirCallStack, SimulationError } from '@aztec/circuit-types'; /** * An error that occurred during the execution of a function. diff --git a/yarn-project/simulator/src/public/avm_executor.test.ts b/yarn-project/simulator/src/public/avm_executor.test.ts index 23f31610c1a..89cfdd48988 100644 --- a/yarn-project/simulator/src/public/avm_executor.test.ts +++ b/yarn-project/simulator/src/public/avm_executor.test.ts @@ -1,13 +1,13 @@ -import { AztecAddress, CallContext, EthAddress, FunctionData, FunctionSelector, Header } from '@aztec/circuits.js'; +import { AztecAddress, CallContext, EthAddress, FunctionData, FunctionSelector, type Header } from '@aztec/circuits.js'; import { makeHeader } from '@aztec/circuits.js/testing'; import { randomInt } from '@aztec/foundation/crypto'; import { Fr } from '@aztec/foundation/fields'; import { AvmTestContractArtifact } from '@aztec/noir-contracts.js'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from './db.js'; -import { PublicExecution } from './execution.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db.js'; +import { type PublicExecution } from './execution.js'; import { PublicExecutor } from './executor.js'; describe('AVM WitGen and Proof Generation', () => { diff --git a/yarn-project/simulator/src/public/db.ts b/yarn-project/simulator/src/public/db.ts index 3e05d7212f8..88d2a66025a 100644 --- a/yarn-project/simulator/src/public/db.ts +++ b/yarn-project/simulator/src/public/db.ts @@ -1,10 +1,10 @@ -import { NullifierMembershipWitness } from '@aztec/circuit-types'; -import { EthAddress, FunctionSelector, L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr } from '@aztec/foundation/fields'; -import { ContractInstanceWithAddress } from '@aztec/types/contracts'; +import { type NullifierMembershipWitness } from '@aztec/circuit-types'; +import { type EthAddress, type FunctionSelector, type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/foundation/fields'; +import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; -import { MessageLoadOracleInputs } from '../acvm/index.js'; +import { type MessageLoadOracleInputs } from '../acvm/index.js'; /** * Database interface for providing access to public state. diff --git a/yarn-project/simulator/src/public/execution.ts b/yarn-project/simulator/src/public/execution.ts index d0a5e387b06..96ac9e84e97 100644 --- a/yarn-project/simulator/src/public/execution.ts +++ b/yarn-project/simulator/src/public/execution.ts @@ -1,16 +1,16 @@ -import { SimulationError, UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; +import { type SimulationError, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; import { - AztecAddress, - ContractStorageRead, - ContractStorageUpdateRequest, - Fr, - L2ToL1Message, - PublicCallRequest, + type AztecAddress, + type ContractStorageRead, + type ContractStorageUpdateRequest, + type Fr, + type L2ToL1Message, + type PublicCallRequest, PublicDataRead, PublicDataUpdateRequest, - ReadRequest, - SideEffect, - SideEffectLinkedToNoteHash, + type ReadRequest, + type SideEffect, + type SideEffectLinkedToNoteHash, } from '@aztec/circuits.js'; import { computePublicDataTreeLeafSlot, computePublicDataTreeValue } from '@aztec/circuits.js/hash'; diff --git a/yarn-project/simulator/src/public/executor.ts b/yarn-project/simulator/src/public/executor.ts index a954eab8be0..f37814cfd92 100644 --- a/yarn-project/simulator/src/public/executor.ts +++ b/yarn-project/simulator/src/public/executor.ts @@ -1,5 +1,5 @@ import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types'; -import { Fr, GlobalVariables, Header, PublicCircuitPublicInputs } from '@aztec/circuits.js'; +import { Fr, type GlobalVariables, type Header, PublicCircuitPublicInputs } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; import { spawn } from 'child_process'; @@ -21,8 +21,8 @@ import { AcirSimulator } from '../client/simulator.js'; import { ExecutionError, createSimulationError } from '../common/errors.js'; import { SideEffectCounter } from '../common/index.js'; import { PackedArgsCache } from '../common/packed_args_cache.js'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from './db.js'; -import { PublicExecution, PublicExecutionResult, checkValidStaticCall } from './execution.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db.js'; +import { type PublicExecution, type PublicExecutionResult, checkValidStaticCall } from './execution.js'; import { PublicExecutionContext } from './public_execution_context.js'; /** diff --git a/yarn-project/simulator/src/public/index.test.ts b/yarn-project/simulator/src/public/index.test.ts index 03f6a631f9b..d5c33178652 100644 --- a/yarn-project/simulator/src/public/index.test.ts +++ b/yarn-project/simulator/src/public/index.test.ts @@ -1,10 +1,10 @@ -import { L1ToL2Message, NullifierMembershipWitness, SiblingPath } from '@aztec/circuit-types'; +import { type L1ToL2Message, NullifierMembershipWitness, SiblingPath } from '@aztec/circuit-types'; import { AppendOnlyTreeSnapshot, CallContext, FunctionData, GlobalVariables, - Header, + type Header, L1_TO_L2_MSG_TREE_HEIGHT, L2ToL1Message, NULLIFIER_TREE_HEIGHT, @@ -13,7 +13,7 @@ import { } from '@aztec/circuits.js'; import { siloNullifier } from '@aztec/circuits.js/hash'; import { makeHeader } from '@aztec/circuits.js/testing'; -import { FunctionArtifact, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; +import { type FunctionArtifact, FunctionSelector, encodeArguments } from '@aztec/foundation/abi'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { pedersenHash, randomInt } from '@aztec/foundation/crypto'; import { EthAddress } from '@aztec/foundation/eth-address'; @@ -25,15 +25,15 @@ import { ParentContractArtifact } from '@aztec/noir-contracts.js/Parent'; import { TestContractArtifact } from '@aztec/noir-contracts.js/Test'; import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token'; -import { MockProxy, mock } from 'jest-mock-extended'; +import { type MockProxy, mock } from 'jest-mock-extended'; import { type MemDown, default as memdown } from 'memdown'; import { toFunctionSelector } from 'viem'; import { MessageLoadOracleInputs } from '../index.js'; import { buildL1ToL2Message } from '../test/utils.js'; import { computeSlotForMapping } from '../utils.js'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from './db.js'; -import { PublicExecution } from './execution.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db.js'; +import { type PublicExecution } from './execution.js'; import { PublicExecutor } from './executor.js'; export const createMemDown = () => (memdown as any)() as MemDown; diff --git a/yarn-project/simulator/src/public/public_execution_context.ts b/yarn-project/simulator/src/public/public_execution_context.ts index ab54bf1c792..b999d27ad13 100644 --- a/yarn-project/simulator/src/public/public_execution_context.ts +++ b/yarn-project/simulator/src/public/public_execution_context.ts @@ -1,15 +1,25 @@ -import { NullifierMembershipWitness, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types'; -import { CallContext, FunctionData, FunctionSelector, GlobalVariables, Header } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { + type NullifierMembershipWitness, + UnencryptedFunctionL2Logs, + type UnencryptedL2Log, +} from '@aztec/circuit-types'; +import { + CallContext, + FunctionData, + type FunctionSelector, + type GlobalVariables, + type Header, +} from '@aztec/circuits.js'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; -import { ContractInstance } from '@aztec/types/contracts'; +import { type ContractInstance } from '@aztec/types/contracts'; import { TypedOracle, toACVMWitness } from '../acvm/index.js'; -import { PackedArgsCache, SideEffectCounter } from '../common/index.js'; -import { CommitmentsDB, PublicContractsDB, PublicStateDB } from './db.js'; -import { PublicExecution, PublicExecutionResult, checkValidStaticCall } from './execution.js'; +import { type PackedArgsCache, type SideEffectCounter } from '../common/index.js'; +import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from './db.js'; +import { type PublicExecution, type PublicExecutionResult, checkValidStaticCall } from './execution.js'; import { executePublicFunction } from './executor.js'; import { ContractStorageActionsCollector } from './state_actions.js'; diff --git a/yarn-project/simulator/src/public/state_actions.ts b/yarn-project/simulator/src/public/state_actions.ts index dd995566e30..a4b63c54a60 100644 --- a/yarn-project/simulator/src/public/state_actions.ts +++ b/yarn-project/simulator/src/public/state_actions.ts @@ -1,8 +1,8 @@ import { ContractStorageRead, ContractStorageUpdateRequest } from '@aztec/circuits.js'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; -import { PublicStateDB } from './db.js'; +import { type PublicStateDB } from './db.js'; /** * Implements read/write operations on a contract public storage, collecting diff --git a/yarn-project/simulator/src/simulator/acvm_native.ts b/yarn-project/simulator/src/simulator/acvm_native.ts index ec777bdea39..df1df4a1be6 100644 --- a/yarn-project/simulator/src/simulator/acvm_native.ts +++ b/yarn-project/simulator/src/simulator/acvm_native.ts @@ -1,11 +1,11 @@ import { randomBytes } from '@aztec/foundation/crypto'; -import { NoirCompiledCircuit } from '@aztec/types/noir'; +import { type NoirCompiledCircuit } from '@aztec/types/noir'; -import { WitnessMap } from '@noir-lang/types'; +import { type WitnessMap } from '@noir-lang/types'; import * as proc from 'child_process'; import fs from 'fs/promises'; -import { SimulationProvider } from './simulation_provider.js'; +import { type SimulationProvider } from './simulation_provider.js'; /** * Parses a TOML format witness map string into a Map structure diff --git a/yarn-project/simulator/src/simulator/acvm_wasm.ts b/yarn-project/simulator/src/simulator/acvm_wasm.ts index cdf49df7f5a..16e83ddda1b 100644 --- a/yarn-project/simulator/src/simulator/acvm_wasm.ts +++ b/yarn-project/simulator/src/simulator/acvm_wasm.ts @@ -1,9 +1,13 @@ -import { NoirCompiledCircuit } from '@aztec/types/noir'; +import { type NoirCompiledCircuit } from '@aztec/types/noir'; -import { WasmBlackBoxFunctionSolver, createBlackBoxSolver, executeCircuitWithBlackBoxSolver } from '@noir-lang/acvm_js'; -import { WitnessMap } from '@noir-lang/types'; +import { + type WasmBlackBoxFunctionSolver, + createBlackBoxSolver, + executeCircuitWithBlackBoxSolver, +} from '@noir-lang/acvm_js'; +import { type WitnessMap } from '@noir-lang/types'; -import { SimulationProvider } from './simulation_provider.js'; +import { type SimulationProvider } from './simulation_provider.js'; let solver: Promise; diff --git a/yarn-project/simulator/src/simulator/simulation_provider.ts b/yarn-project/simulator/src/simulator/simulation_provider.ts index a9fd9266351..e0a087fcc37 100644 --- a/yarn-project/simulator/src/simulator/simulation_provider.ts +++ b/yarn-project/simulator/src/simulator/simulation_provider.ts @@ -1,6 +1,6 @@ -import { NoirCompiledCircuit } from '@aztec/types/noir'; +import { type NoirCompiledCircuit } from '@aztec/types/noir'; -import { WitnessMap } from '@noir-lang/types'; +import { type WitnessMap } from '@noir-lang/types'; /** * Low level simulation interface diff --git a/yarn-project/simulator/src/test/utils.ts b/yarn-project/simulator/src/test/utils.ts index 1e0118b9c97..5b611e84602 100644 --- a/yarn-project/simulator/src/test/utils.ts +++ b/yarn-project/simulator/src/test/utils.ts @@ -1,5 +1,5 @@ import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/circuit-types'; -import { AztecAddress, EthAddress, Fr } from '@aztec/circuits.js'; +import { type AztecAddress, EthAddress, type Fr } from '@aztec/circuits.js'; import { computeMessageSecretHash } from '@aztec/circuits.js/hash'; import { sha256ToField } from '@aztec/foundation/crypto'; diff --git a/yarn-project/simulator/src/utils.ts b/yarn-project/simulator/src/utils.ts index 9dc93abe392..380222fa578 100644 --- a/yarn-project/simulator/src/utils.ts +++ b/yarn-project/simulator/src/utils.ts @@ -1,5 +1,5 @@ import { pedersenHash } from '@aztec/foundation/crypto'; -import { Fr } from '@aztec/foundation/fields'; +import { type Fr } from '@aztec/foundation/fields'; /** * Computes the resulting storage slot for an entry in a mapping. diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index e17124e709f..c2b57c17e7e 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -1,7 +1,7 @@ import { type ABIParameter, type ABIParameterVisibility, - type AbiType, + type ABIType, type ContractArtifact, type FunctionArtifact, FunctionType, @@ -13,7 +13,7 @@ import { AZTEC_PRIVATE_ATTRIBUTE, AZTEC_PUBLIC_ATTRIBUTE, AZTEC_PUBLIC_VM_ATTRIBUTE, - NoirCompiledContract, + type NoirCompiledContract, } from '../noir/index.js'; import { mockVerificationKey } from './mocked_keys.js'; @@ -135,7 +135,7 @@ function generateFunctionArtifact(fn: NoirCompiledContractFunction): FunctionArt } // If the function is secret, the return is the public inputs, which should be omitted - let returnTypes: AbiType[] = []; + let returnTypes: ABIType[] = []; if (functionType !== 'secret' && fn.abi.return_type) { returnTypes = [fn.abi.return_type.abi_type]; } @@ -191,7 +191,7 @@ function generateContractArtifact(contract: NoirCompiledContract, aztecNrVersion return { name: contract.name, functions: contract.functions.map(generateFunctionArtifact), - outputs: contract.outputs, + events: contract.events, fileMap: contract.file_map, aztecNrVersion, }; diff --git a/yarn-project/types/src/contracts/contract_class.ts b/yarn-project/types/src/contracts/contract_class.ts index a532dfb9e1c..a7869382f3f 100644 --- a/yarn-project/types/src/contracts/contract_class.ts +++ b/yarn-project/types/src/contracts/contract_class.ts @@ -1,5 +1,5 @@ -import { FunctionSelector } from '@aztec/foundation/abi'; -import { Fr } from '@aztec/foundation/fields'; +import { type FunctionSelector } from '@aztec/foundation/abi'; +import { type Fr } from '@aztec/foundation/fields'; const VERSION = 1 as const; diff --git a/yarn-project/types/src/contracts/contract_data_source.ts b/yarn-project/types/src/contracts/contract_data_source.ts index c9d438cd24e..e785b948639 100644 --- a/yarn-project/types/src/contracts/contract_data_source.ts +++ b/yarn-project/types/src/contracts/contract_data_source.ts @@ -1,9 +1,9 @@ -import { FunctionSelector } from '@aztec/foundation/abi'; -import { AztecAddress } from '@aztec/foundation/aztec-address'; -import { Fr } from '@aztec/foundation/fields'; +import { type FunctionSelector } from '@aztec/foundation/abi'; +import { type AztecAddress } from '@aztec/foundation/aztec-address'; +import { type Fr } from '@aztec/foundation/fields'; -import { ContractClassPublic, PublicFunction } from './contract_class.js'; -import { ContractInstanceWithAddress } from './contract_instance.js'; +import { type ContractClassPublic, type PublicFunction } from './contract_class.js'; +import { type ContractInstanceWithAddress } from './contract_instance.js'; export interface ContractDataSource { /** diff --git a/yarn-project/types/src/contracts/contract_instance.ts b/yarn-project/types/src/contracts/contract_instance.ts index 354857b6b61..8f14656bc90 100644 --- a/yarn-project/types/src/contracts/contract_instance.ts +++ b/yarn-project/types/src/contracts/contract_instance.ts @@ -2,7 +2,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { BufferReader, numToUInt8, serializeToBuffer } from '@aztec/foundation/serialize'; -import { FieldsOf } from '@aztec/foundation/types'; +import { type FieldsOf } from '@aztec/foundation/types'; const VERSION = 1 as const; diff --git a/yarn-project/types/src/interfaces/node-info.ts b/yarn-project/types/src/interfaces/node-info.ts index 48d77996d89..b4c96b6cedb 100644 --- a/yarn-project/types/src/interfaces/node-info.ts +++ b/yarn-project/types/src/interfaces/node-info.ts @@ -1,4 +1,4 @@ -import { L1ContractAddresses } from '@aztec/ethereum'; +import { type L1ContractAddresses } from '@aztec/ethereum'; /** * Provides basic information about the running node. diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index 56a449d8ef0..c244ee69995 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -1,10 +1,10 @@ import { type ABIParameter, type ABIParameterVisibility, - type AbiType, - type AbiValue, + type ABIType, type DebugFileMap, type DebugInfo, + type EventAbi, } from '@aztec/foundation/abi'; export const AZTEC_PRIVATE_ATTRIBUTE = 'aztec(private)'; @@ -27,7 +27,7 @@ export interface NoirFunctionAbi { /** * The type of the return value. */ - abi_type: AbiType; + abi_type: ABIType; /** * The visibility of the return value. */ @@ -68,10 +68,7 @@ export interface NoirCompiledContract { /** The functions of the contract. */ functions: NoirFunctionEntry[]; /** The events of the contract */ - outputs: { - structs: Record; - globals: Record; - }; + events: EventAbi[]; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } diff --git a/yarn-project/types/src/test/fixtures.ts b/yarn-project/types/src/test/fixtures.ts index 4395b58033d..9796b24cb12 100644 --- a/yarn-project/types/src/test/fixtures.ts +++ b/yarn-project/types/src/test/fixtures.ts @@ -1,11 +1,11 @@ -import { ContractArtifact } from '@aztec/foundation/abi'; +import { type ContractArtifact } from '@aztec/foundation/abi'; import { readFileSync } from 'fs'; import { dirname, resolve } from 'path'; import { fileURLToPath } from 'url'; import { loadContractArtifact } from '../abi/contract_artifact.js'; -import { NoirCompiledContract } from '../noir/index.js'; +import { type NoirCompiledContract } from '../noir/index.js'; // Copied from the build output for the contract `Benchmarking` in noir-contracts export function getSampleContractArtifact(): ContractArtifact { diff --git a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts index 4da1279012b..1ccdb134c64 100644 --- a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts +++ b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.test.ts @@ -1,17 +1,17 @@ -import { L1ToL2MessageSource, L2Block, L2BlockSource, MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; +import { type L1ToL2MessageSource, L2Block, type L2BlockSource, MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; import { Fr } from '@aztec/circuits.js'; import { L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js/constants'; import { randomInt } from '@aztec/foundation/crypto'; import { createDebugLogger } from '@aztec/foundation/log'; import { sleep } from '@aztec/foundation/sleep'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type AztecKVStore } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { INITIAL_LEAF, Pedersen, SHA256Trunc, StandardTree } from '@aztec/merkle-tree'; import { jest } from '@jest/globals'; import { mock } from 'jest-mock-extended'; -import { MerkleTreeDb, MerkleTrees, WorldStateConfig } from '../index.js'; +import { type MerkleTreeDb, type MerkleTrees, type WorldStateConfig } from '../index.js'; import { ServerWorldStateSynchronizer } from './server_world_state_synchronizer.js'; import { WorldStateRunningState } from './world_state_synchronizer.js'; diff --git a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts index 001fd91abc2..548c37a0f19 100644 --- a/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts +++ b/yarn-project/world-state/src/synchronizer/server_world_state_synchronizer.ts @@ -1,19 +1,27 @@ -import { L1ToL2MessageSource, L2Block, L2BlockDownloader, L2BlockSource } from '@aztec/circuit-types'; -import { L2BlockHandledStats } from '@aztec/circuit-types/stats'; +import { type L1ToL2MessageSource, type L2Block, L2BlockDownloader, type L2BlockSource } from '@aztec/circuit-types'; +import { type L2BlockHandledStats } from '@aztec/circuit-types/stats'; import { L1_TO_L2_MSG_SUBTREE_HEIGHT } from '@aztec/circuits.js/constants'; import { Fr } from '@aztec/foundation/fields'; import { SerialQueue } from '@aztec/foundation/fifo'; import { createDebugLogger } from '@aztec/foundation/log'; import { elapsed } from '@aztec/foundation/timer'; -import { AztecKVStore, AztecSingleton } from '@aztec/kv-store'; +import { type AztecKVStore, type AztecSingleton } from '@aztec/kv-store'; import { openTmpStore } from '@aztec/kv-store/utils'; import { SHA256Trunc, StandardTree } from '@aztec/merkle-tree'; -import { HandleL2BlockAndMessagesResult, MerkleTreeOperations, MerkleTrees } from '../world-state-db/index.js'; +import { + type HandleL2BlockAndMessagesResult, + type MerkleTreeOperations, + type MerkleTrees, +} from '../world-state-db/index.js'; import { MerkleTreeOperationsFacade } from '../world-state-db/merkle_tree_operations_facade.js'; import { MerkleTreeSnapshotOperationsFacade } from '../world-state-db/merkle_tree_snapshot_operations_facade.js'; -import { WorldStateConfig } from './config.js'; -import { WorldStateRunningState, WorldStateStatus, WorldStateSynchronizer } from './world_state_synchronizer.js'; +import { type WorldStateConfig } from './config.js'; +import { + WorldStateRunningState, + type WorldStateStatus, + type WorldStateSynchronizer, +} from './world_state_synchronizer.js'; /** * Synchronizes the world state with the L2 blocks from a L2BlockSource. diff --git a/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts b/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts index 51b8e1d4880..24dfa22226c 100644 --- a/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts +++ b/yarn-project/world-state/src/synchronizer/world_state_synchronizer.ts @@ -1,4 +1,4 @@ -import { MerkleTreeOperations } from '../world-state-db/index.js'; +import { type MerkleTreeOperations } from '../world-state-db/index.js'; /** * Defines the possible states of the world state synchronizer. diff --git a/yarn-project/world-state/src/world-state-db/merkle_tree_db.ts b/yarn-project/world-state/src/world-state-db/merkle_tree_db.ts index 7df7a084f32..19cadde30a3 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_tree_db.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_tree_db.ts @@ -1,8 +1,8 @@ -import { MerkleTreeId } from '@aztec/circuit-types'; -import { Fr, MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } from '@aztec/circuits.js'; -import { IndexedTreeSnapshot, TreeSnapshot } from '@aztec/merkle-tree'; +import { type MerkleTreeId } from '@aztec/circuit-types'; +import { type Fr, MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } from '@aztec/circuits.js'; +import { type IndexedTreeSnapshot, type TreeSnapshot } from '@aztec/merkle-tree'; -import { MerkleTreeOperations } from './merkle_tree_operations.js'; +import { type MerkleTreeOperations } from './merkle_tree_operations.js'; /** * diff --git a/yarn-project/world-state/src/world-state-db/merkle_tree_operations.ts b/yarn-project/world-state/src/world-state-db/merkle_tree_operations.ts index 3cacb652fe0..fd6fc5801c0 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_tree_operations.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_tree_operations.ts @@ -1,8 +1,8 @@ -import { L2Block, MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; -import { Fr, Header, NullifierLeafPreimage, StateReference } from '@aztec/circuits.js'; +import { type L2Block, type MerkleTreeId, type SiblingPath } from '@aztec/circuit-types'; +import { type Fr, type Header, type NullifierLeafPreimage, type StateReference } from '@aztec/circuits.js'; import { createDebugLogger } from '@aztec/foundation/log'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { AppendOnlyTree, BatchInsertionResult, IndexedTree } from '@aztec/merkle-tree'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type AppendOnlyTree, type BatchInsertionResult, type IndexedTree } from '@aztec/merkle-tree'; /** * Type alias for the nullifier tree ID. diff --git a/yarn-project/world-state/src/world-state-db/merkle_tree_operations_facade.ts b/yarn-project/world-state/src/world-state-db/merkle_tree_operations_facade.ts index aad3c019a6b..d26a7d12b66 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_tree_operations_facade.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_tree_operations_facade.ts @@ -1,15 +1,15 @@ -import { L2Block, MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; -import { Fr, Header, NullifierLeafPreimage, StateReference } from '@aztec/circuits.js'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { BatchInsertionResult } from '@aztec/merkle-tree'; +import { type L2Block, type MerkleTreeId, type SiblingPath } from '@aztec/circuit-types'; +import { type Fr, type Header, type NullifierLeafPreimage, type StateReference } from '@aztec/circuits.js'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type BatchInsertionResult } from '@aztec/merkle-tree'; -import { MerkleTreeDb } from './merkle_tree_db.js'; +import { type MerkleTreeDb } from './merkle_tree_db.js'; import { - HandleL2BlockAndMessagesResult, - IndexedTreeId, - MerkleTreeLeafType, - MerkleTreeOperations, - TreeInfo, + type HandleL2BlockAndMessagesResult, + type IndexedTreeId, + type MerkleTreeLeafType, + type MerkleTreeOperations, + type TreeInfo, } from './merkle_tree_operations.js'; /** diff --git a/yarn-project/world-state/src/world-state-db/merkle_tree_snapshot_operations_facade.ts b/yarn-project/world-state/src/world-state-db/merkle_tree_snapshot_operations_facade.ts index 188213d66c7..850899e7d0c 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_tree_snapshot_operations_facade.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_tree_snapshot_operations_facade.ts @@ -1,15 +1,15 @@ -import { MerkleTreeId, SiblingPath } from '@aztec/circuit-types'; -import { AppendOnlyTreeSnapshot, Fr, Header, PartialStateReference, StateReference } from '@aztec/circuits.js'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { BatchInsertionResult, IndexedTreeSnapshot } from '@aztec/merkle-tree'; +import { MerkleTreeId, type SiblingPath } from '@aztec/circuit-types'; +import { AppendOnlyTreeSnapshot, Fr, type Header, PartialStateReference, StateReference } from '@aztec/circuits.js'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type BatchInsertionResult, type IndexedTreeSnapshot } from '@aztec/merkle-tree'; -import { MerkleTreeDb, TreeSnapshots } from './merkle_tree_db.js'; +import { type MerkleTreeDb, type TreeSnapshots } from './merkle_tree_db.js'; import { - HandleL2BlockAndMessagesResult, - IndexedTreeId, - MerkleTreeLeafType, - MerkleTreeOperations, - TreeInfo, + type HandleL2BlockAndMessagesResult, + type IndexedTreeId, + type MerkleTreeLeafType, + type MerkleTreeOperations, + type TreeInfo, } from './merkle_tree_operations.js'; /** diff --git a/yarn-project/world-state/src/world-state-db/merkle_trees.ts b/yarn-project/world-state/src/world-state-db/merkle_trees.ts index e99b9c455e4..9eb62d43696 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_trees.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_trees.ts @@ -25,36 +25,36 @@ import { } from '@aztec/circuits.js'; import { padArrayEnd } from '@aztec/foundation/collection'; import { SerialQueue } from '@aztec/foundation/fifo'; -import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; -import { IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; -import { AztecKVStore } from '@aztec/kv-store'; +import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log'; +import { type IndexedTreeLeafPreimage } from '@aztec/foundation/trees'; +import { type AztecKVStore } from '@aztec/kv-store'; import { - AppendOnlyTree, - BatchInsertionResult, - IndexedTree, + type AppendOnlyTree, + type BatchInsertionResult, + type IndexedTree, Pedersen, StandardIndexedTree, StandardTree, - UpdateOnlyTree, + type UpdateOnlyTree, getTreeMeta, loadTree, newTree, } from '@aztec/merkle-tree'; -import { Hasher } from '@aztec/types/interfaces'; +import { type Hasher } from '@aztec/types/interfaces'; import { INITIAL_NULLIFIER_TREE_SIZE, INITIAL_PUBLIC_DATA_TREE_SIZE, - MerkleTreeDb, - TreeSnapshots, + type MerkleTreeDb, + type TreeSnapshots, } from './merkle_tree_db.js'; import { - HandleL2BlockAndMessagesResult, - IndexedTreeId, - MerkleTreeLeafType, - MerkleTreeMap, - MerkleTreeOperations, - TreeInfo, + type HandleL2BlockAndMessagesResult, + type IndexedTreeId, + type MerkleTreeLeafType, + type MerkleTreeMap, + type MerkleTreeOperations, + type TreeInfo, } from './merkle_tree_operations.js'; import { MerkleTreeOperationsFacade } from './merkle_tree_operations_facade.js'; From 874f65171987fc6041e13baf835e3b44606dbef1 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:14:06 +0000 Subject: [PATCH 060/123] =?UTF-8?q?reverted=20extraneous=20changes=C3=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yarn-project/aztec.js/src/contract/checker.ts | 8 +- .../aztec.js/src/contract/contract.test.ts | 5 +- .../aztec.js/src/contract/contract_base.ts | 44 ++++++++++- yarn-project/aztec.js/src/index.ts | 2 + yarn-project/circuit-types/src/mocks.ts | 5 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- .../src/contract/artifact_hash.test.ts | 2 +- .../circuits.js/src/contract/artifact_hash.ts | 2 +- yarn-project/cli/src/encoding.ts | 4 +- yarn-project/cli/src/test/mocks.ts | 5 +- .../end-to-end/src/e2e_2_pxes.test.ts | 12 ++- .../src/e2e_blacklist_token_contract.test.ts | 6 +- .../end-to-end/src/e2e_cheat_codes.test.ts | 12 +-- .../src/e2e_crowdfunding_and_claim.test.ts | 11 ++- .../src/e2e_escrow_contract.test.ts | 11 +-- yarn-project/end-to-end/src/e2e_fees.test.ts | 7 +- .../src/e2e_lending_contract.test.ts | 7 +- .../e2e_multiple_accounts_1_enc_key.test.ts | 7 +- .../src/e2e_non_contract_account.test.ts | 6 +- .../end-to-end/src/e2e_note_getter.test.ts | 2 +- .../end-to-end/src/e2e_persistence.test.ts | 14 ++-- .../src/e2e_sandbox_example.test.ts | 16 ++-- .../end-to-end/src/e2e_token_contract.test.ts | 7 +- .../src/guides/dapp_testing.test.ts | 25 ++---- .../writing_an_account_contract.test.ts | 12 ++- .../src/shared/cross_chain_test_harness.ts | 6 +- yarn-project/foundation/src/abi/abi.ts | 75 ++++++++++++------ yarn-project/foundation/src/abi/decoder.ts | 6 +- yarn-project/foundation/src/abi/encoder.ts | 6 +- yarn-project/foundation/src/abi/utils.ts | 12 +-- .../src/contract-interface-gen/typescript.ts | 76 +++++++++++++++++++ .../nested-call-private-kernel-init.hex | 2 +- .../nested-call-private-kernel-inner.hex | 2 +- .../nested-call-private-kernel-ordering.hex | 2 +- .../src/scripts/generate_ts_from_abi.ts | 8 +- .../src/sequencer/abstract_phase_manager.ts | 4 +- .../simulator/src/client/private_execution.ts | 4 +- .../types/src/abi/contract_artifact.ts | 6 +- yarn-project/types/src/noir/index.ts | 11 ++- 39 files changed, 302 insertions(+), 152 deletions(-) diff --git a/yarn-project/aztec.js/src/contract/checker.ts b/yarn-project/aztec.js/src/contract/checker.ts index 438bef2048c..e6c449cfb75 100644 --- a/yarn-project/aztec.js/src/contract/checker.ts +++ b/yarn-project/aztec.js/src/contract/checker.ts @@ -1,4 +1,4 @@ -import { type ABIType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; +import { type AbiType, type BasicType, type ContractArtifact, type StructType } from '@aztec/foundation/abi'; /** * Represents a type derived from input type T with the 'kind' property removed. @@ -51,10 +51,10 @@ export function abiChecker(artifact: ContractArtifact) { * Throws an error if the type has an unrecognized kind or incorrectly formed attributes. * Additionally, checks nested types for array and struct kinds. * - * @param type - The ABIType object representing the type of the ABI function parameter. + * @param type - The AbiType object representing the type of the ABI function parameter. * @returns A boolean value indicating whether the type is valid or not. */ -function abiParameterTypeChecker(type: ABIType): boolean { +function abiParameterTypeChecker(type: AbiType): boolean { switch (type.kind) { case 'field': case 'boolean': @@ -73,7 +73,7 @@ function abiParameterTypeChecker(type: ABIType): boolean { } /** - * Check if the structure of the ABIType 'struct' is valid by ensuring field names are strings + * Check if the structure of the AbiType 'struct' is valid by ensuring field names are strings * and their type attribute passes the abiParameterTypeChecker. Returns true on successful validation, * otherwise throws an error providing insight into the incorrect formation in the struct. * diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index ea338b82c62..af425afcc90 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -100,7 +100,10 @@ describe('Contract Class', () => { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/aztec.js/src/contract/contract_base.ts b/yarn-project/aztec.js/src/contract/contract_base.ts index a49a7205c13..5758973849e 100644 --- a/yarn-project/aztec.js/src/contract/contract_base.ts +++ b/yarn-project/aztec.js/src/contract/contract_base.ts @@ -1,4 +1,4 @@ -import { computePartialAddress } from '@aztec/circuits.js'; +import { type Fr, computePartialAddress } from '@aztec/circuits.js'; import { type ContractArtifact, type FunctionArtifact, FunctionSelector } from '@aztec/foundation/abi'; import { type ContractInstanceWithAddress } from '@aztec/types/contracts'; @@ -16,6 +16,48 @@ export type ContractMethod = ((...args: any[]) => ContractFunctionInteraction) & readonly selector: FunctionSelector; }; +/** + * Type representing a field layout in the storage of a contract. + */ +type FieldLayout = { + /** + * Slot in which the field is stored. + */ + slot: Fr; + /** + * Type being stored at the slot + */ + typ: string; +}; + +/** + * Type representing a note in use in the contract. + */ +type ContractNote = { + /** + * Note identifier + */ + id: Fr; + /** + * Type of the note + */ + typ: string; +}; + +/** + * Type representing the storage layout of a contract. + */ +export type ContractStorageLayout = { + [K in T]: FieldLayout; +}; + +/** + * Type representing the notes used in a contract. + */ +export type ContractNotes = { + [K in T]: ContractNote; +}; + /** * Abstract implementation of a contract extended by the Contract class and generated contract types. */ diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 646c5488bf9..e7cc7c0ba20 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -25,6 +25,8 @@ export { Contract, ContractBase, ContractMethod, + ContractStorageLayout, + ContractNotes, SentTx, BatchCall, DeployMethod, diff --git a/yarn-project/circuit-types/src/mocks.ts b/yarn-project/circuit-types/src/mocks.ts index 60f9e378c2c..2bca46b6f83 100644 --- a/yarn-project/circuit-types/src/mocks.ts +++ b/yarn-project/circuit-types/src/mocks.ts @@ -99,7 +99,10 @@ export const mockSimulatedTx = (seed = 1, hasLogs = true) => { export const randomContractArtifact = (): ContractArtifact => ({ name: randomBytes(4).toString('hex'), functions: [], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }); diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 0e91499c822..646e313092c 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x1ad693effc2a4a40fdf5911ff29e19d2b6cd3cf73e6c3685519a6fb783144dcbn; +export const DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index d279fd47428..d24a449c845 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x12ee05255924ea5eed79c7fe41f57a5309e40d6c9861efac8a8986dac6145a63"`, + `"0x1bf24d2106579f84afb2c55647aa66d0c37401e82952577ada09044c02220f81"`, ); }); }); diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.ts b/yarn-project/circuits.js/src/contract/artifact_hash.ts index e590084a51e..ba6a259b48f 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.ts @@ -60,7 +60,7 @@ export function computeArtifactHashPreimage(artifact: ContractArtifact) { export function computeArtifactMetadataHash(artifact: ContractArtifact) { // TODO(@spalladino): Should we use the sorted event selectors instead? They'd need to be unique for that. - const metadata = { name: artifact.name, events: artifact.events }; + const metadata = { name: artifact.name, outputs: artifact.outputs }; return sha256Fr(Buffer.from(JSON.stringify(metadata), 'utf-8')); } diff --git a/yarn-project/cli/src/encoding.ts b/yarn-project/cli/src/encoding.ts index b06c9301b6e..e10f843814d 100644 --- a/yarn-project/cli/src/encoding.ts +++ b/yarn-project/cli/src/encoding.ts @@ -1,4 +1,4 @@ -import { type ABIParameter, type ABIType, type StructType } from '@aztec/foundation/abi'; +import { type ABIParameter, type AbiType, type StructType } from '@aztec/foundation/abi'; import { Fr } from '@aztec/foundation/fields'; /** @@ -29,7 +29,7 @@ export function parseStructString(str: string, abiType: StructType) { * @param abiType - The type as described by the contract's ABI. * @returns The encoded argument. */ -function encodeArg(arg: string, abiType: ABIType, name: string): any { +function encodeArg(arg: string, abiType: AbiType, name: string): any { const { kind } = abiType; if (kind === 'field' || kind === 'integer') { let res: bigint; diff --git a/yarn-project/cli/src/test/mocks.ts b/yarn-project/cli/src/test/mocks.ts index 1ca54bbee68..1c56cf0dba2 100644 --- a/yarn-project/cli/src/test/mocks.ts +++ b/yarn-project/cli/src/test/mocks.ts @@ -65,6 +65,9 @@ export const mockContractArtifact: ContractArtifact = { debugSymbols: '', }, ], - events: [], + outputs: { + structs: {}, + globals: {}, + }, fileMap: {}, }; diff --git a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts index 2091acb648a..be7d4c330f2 100644 --- a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts +++ b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts @@ -106,11 +106,15 @@ describe('e2e_2_pxes', () => { const receipt = await contract.methods.mint_private(balance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(balance), secretHash]); - const extendedNote = new ExtendedNote(note, recipient, contract.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + recipient, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await contract.methods.redeem_shield(recipient, balance, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts index 622fb312b72..1877d7a3c40 100644 --- a/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_blacklist_token_contract.test.ts @@ -87,15 +87,13 @@ describe('e2e_blacklist_token_contract', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(4); // The storage slot of `pending_shields` is 4. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenBlacklistContract.storage.pending_shields.slot, + TokenBlacklistContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts index f6f5568ec1c..ae795631c10 100644 --- a/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts +++ b/yarn-project/end-to-end/src/e2e_cheat_codes.test.ts @@ -224,21 +224,23 @@ describe('e2e_cheat_codes', () => { // docs:start:pxe_add_note const note = new Note([new Fr(mintAmount), secretHash]); - const pendingShieldStorageSlot = new Fr(5n); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const extendedNote = new ExtendedNote( note, admin.address, token.address, - pendingShieldStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); // docs:end:pxe_add_note // check if note was added to pending shield: - const notes = await cc.aztec.loadPrivate(admin.address, token.address, pendingShieldStorageSlot); + const notes = await cc.aztec.loadPrivate( + admin.address, + token.address, + TokenContract.storage.pending_shields.slot, + ); const values = notes.map(note => note.items[0]); const balance = values.reduce((sum, current) => sum + current.toBigInt(), 0n); expect(balance).toEqual(mintAmount); diff --git a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts index 1556d2b40ce..fd47b6b9515 100644 --- a/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts +++ b/yarn-project/end-to-end/src/e2e_crowdfunding_and_claim.test.ts @@ -64,10 +64,15 @@ describe('e2e_crowdfunding_and_claim', () => { txHash: TxHash, address: AztecAddress, ) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), address, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); }; diff --git a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts index 90a6e59a747..0fa784969d5 100644 --- a/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_escrow_contract.test.ts @@ -21,9 +21,6 @@ import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { setup } from './fixtures/utils.js'; describe('e2e_escrow_contract', () => { - const pendingShieldsStorageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - let pxe: PXE; let wallet: AccountWallet; let recipientWallet: AccountWallet; @@ -76,8 +73,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -127,8 +124,8 @@ describe('e2e_escrow_contract', () => { note, owner, token.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_fees.test.ts b/yarn-project/end-to-end/src/e2e_fees.test.ts index 3b11f865776..0a5ba7c3147 100644 --- a/yarn-project/end-to-end/src/e2e_fees.test.ts +++ b/yarn-project/end-to-end/src/e2e_fees.test.ts @@ -671,16 +671,13 @@ describe('e2e_fees', () => { }; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, e2eContext.accounts[accountIndex].address, bananaCoin.address, - storageSlot, - noteTypeId, + BananaCoin.storage.pending_shields.slot, + BananaCoin.notes.TransparentNote.id, txHash, ); await e2eContext.wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index 8a5ce3cd3fd..ae1b3956ee6 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -103,17 +103,14 @@ describe('e2e_lending_contract', () => { const b = asset.methods.mint_private(mintAmount, secretHash).send(); await Promise.all([a, b].map(tx => tx.wait())); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const txHash = await b.getTxHash(); const extendedNote = new ExtendedNote( note, accounts[0].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index 921cb5c321b..10fa2c76cda 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -63,16 +63,13 @@ describe('e2e_multiple_accounts_1_enc_key', () => { const receipt = await token.methods.mint_private(initialBalance, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialBalance), secretHash]); const extendedNote = new ExtendedNote( note, accounts[0].address, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts index cc9fb6f70b7..65a56eb1d1b 100644 --- a/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts +++ b/yarn-project/end-to-end/src/e2e_non_contract_account.test.ts @@ -80,15 +80,13 @@ describe('e2e_non_contract_account', () => { // Add the note const note = new Note([new Fr(value)]); - const storageSlot = new Fr(1); - const noteTypeId = new Fr(7010510110810078111116101n); // FieldNote const extendedNote = new ExtendedNote( note, wallet.getCompleteAddress().address, contract.address, - storageSlot, - noteTypeId, + TestContract.storage.example_constant.slot, + TestContract.notes.FieldNote.id, txHash, ); await wallet.addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/e2e_note_getter.test.ts b/yarn-project/end-to-end/src/e2e_note_getter.test.ts index 48320d81ac9..27e6be2c03a 100644 --- a/yarn-project/end-to-end/src/e2e_note_getter.test.ts +++ b/yarn-project/end-to-end/src/e2e_note_getter.test.ts @@ -159,7 +159,7 @@ describe('e2e_note_getter', () => { const VALUE = 5; // To prevent tests from interacting with one another, we'll have each use a different storage slot. - let storageSlot: number = 2; + let storageSlot = TestContract.storage.example_set.slot.toNumber(); beforeEach(() => { storageSlot += 1; diff --git a/yarn-project/end-to-end/src/e2e_persistence.test.ts b/yarn-project/end-to-end/src/e2e_persistence.test.ts index a4a6d216181..cc44b29499f 100644 --- a/yarn-project/end-to-end/src/e2e_persistence.test.ts +++ b/yarn-project/end-to-end/src/e2e_persistence.test.ts @@ -330,12 +330,14 @@ async function addPendingShieldNoteToPXE( secretHash: Fr, txHash: TxHash, ) { - // The storage slot of `pending_shields` is 5. - // TODO AlexG, this feels brittle - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); - const extendedNote = new ExtendedNote(note, wallet.getAddress(), asset, storageSlot, noteTypeId, txHash); + const extendedNote = new ExtendedNote( + note, + wallet.getAddress(), + asset, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + txHash, + ); await wallet.addNote(extendedNote); } diff --git a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts index 389a8f2b58e..28416e0d248 100644 --- a/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts +++ b/yarn-project/end-to-end/src/e2e_sandbox_example.test.ts @@ -76,12 +76,16 @@ describe('e2e_sandbox_example', () => { const receipt = await tokenContractAlice.methods.mint_private(initialSupply, aliceSecretHash).send().wait(); // Add the newly created "pending shield" note to PXE - const pendingShieldsStorageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(initialSupply), aliceSecretHash]); await pxe.addNote( - new ExtendedNote(note, alice, contract.address, pendingShieldsStorageSlot, noteTypeId, receipt.txHash), + new ExtendedNote( + note, + alice, + contract.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ), ); // Make the tokens spendable by redeeming them using the secret (converts the "pending shield note" created above @@ -153,8 +157,8 @@ describe('e2e_sandbox_example', () => { bobPendingShield, bob, contract.address, - pendingShieldsStorageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, mintPrivateReceipt.txHash, ), ); diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index 2c985d5e1f5..5fde4adfe1b 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -38,16 +38,13 @@ describe('e2e_token_contract', () => { let tokenSim: TokenSimulator; const addPendingShieldNoteToPXE = async (accountIndex: number, amount: bigint, secretHash: Fr, txHash: TxHash) => { - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(amount), secretHash]); const extendedNote = new ExtendedNote( note, accounts[accountIndex].address, asset.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await wallets[accountIndex].addNote(extendedNote); diff --git a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts index 4e3ee9f7a7c..8cde4b58e96 100644 --- a/yarn-project/end-to-end/src/guides/dapp_testing.test.ts +++ b/yarn-project/end-to-end/src/guides/dapp_testing.test.ts @@ -50,16 +50,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); // The storage slot of `pending_shields` is 5. - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -94,16 +91,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, recipientAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -159,16 +153,13 @@ describe('guides/dapp/testing', () => { const secretHash = computeMessageSecretHash(secret); const receipt = await token.methods.mint_private(100n, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); const extendedNote = new ExtendedNote( note, ownerAddress, token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, receipt.txHash, ); await pxe.addNote(extendedNote); @@ -177,8 +168,8 @@ describe('guides/dapp/testing', () => { // docs:start:calc-slot cheats = CheatCodes.create(ETHEREUM_HOST, pxe); - // The balances mapping is defined on storage slot 3 and is indexed by user address - ownerSlot = cheats.aztec.computeSlotInMap(3n, ownerAddress); + // The balances mapping is indexed by user address + ownerSlot = cheats.aztec.computeSlotInMap(TokenContract.storage.balances.slot, ownerAddress); // docs:end:calc-slot }, 90_000); diff --git a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts index 185455ce4cd..7f7237b6da6 100644 --- a/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts +++ b/yarn-project/end-to-end/src/guides/writing_an_account_contract.test.ts @@ -73,11 +73,15 @@ describe('guides/writing_an_account_contract', () => { const mintAmount = 50n; const receipt = await token.methods.mint_private(mintAmount, secretHash).send().wait(); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote - const note = new Note([new Fr(mintAmount), secretHash]); - const extendedNote = new ExtendedNote(note, address, token.address, storageSlot, noteTypeId, receipt.txHash); + const extendedNote = new ExtendedNote( + note, + address, + token.address, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, + receipt.txHash, + ); await pxe.addNote(extendedNote); await token.methods.redeem_shield({ address }, mintAmount, secret).send().wait(); diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index 78bfdb7ee73..c7ba3f88a82 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -423,15 +423,13 @@ export class CrossChainTestHarness { async addPendingShieldNoteToPXE(shieldAmount: bigint, secretHash: Fr, txHash: TxHash) { this.logger('Adding note to PXE'); - const storageSlot = new Fr(5); - const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // TransparentNote const note = new Note([new Fr(shieldAmount), secretHash]); const extendedNote = new ExtendedNote( note, this.ownerAddress, this.l2Token.address, - storageSlot, - noteTypeId, + TokenContract.storage.pending_shields.slot, + TokenContract.notes.TransparentNote.id, txHash, ); await this.pxeService.addNote(extendedNote); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index c93e099f3e3..d88b489e858 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -2,6 +2,48 @@ import { inflate } from 'pako'; import { type FunctionSelector } from './function_selector.js'; +/** + * A basic value. + */ +export interface BasicValue { + /** + * The kind of the value. + */ + kind: T; + value: V; +} + +/** + * An exported value. + */ +export type AbiValue = + | BasicValue<'boolean', boolean> + | BasicValue<'string', string> + | BasicValue<'array', AbiValue[]> + | TupleValue + | IntegerValue + | FieldValue + | StructValue; + +export type TypedStructFieldValue = { name: string; value: T }; + +export interface StructValue { + kind: 'struct'; + fields: TypedStructFieldValue[]; +} + +export interface TupleValue { + fields: AbiValue[]; +} + +export interface FieldValue extends BasicValue<'field', string> { + sign: boolean; +} + +export interface IntegerValue extends BasicValue<'integer', string> { + sign: boolean; +} + /** * A named type. */ @@ -13,7 +55,7 @@ export interface ABIVariable { /** * The type of the variable. */ - type: ABIType; + type: AbiType; } /** @@ -47,7 +89,7 @@ export interface BasicType { /** * A variable type. */ -export type ABIType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; +export type AbiType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType; /** * An integer type. @@ -74,7 +116,7 @@ export interface ArrayType extends BasicType<'array'> { /** * The type of the array elements. */ - type: ABIType; + type: AbiType; } /** @@ -101,24 +143,6 @@ export interface StructType extends BasicType<'struct'> { path: string; } -/** - * A contract event. - */ -export interface EventAbi { - /** - * The event name. - */ - name: string; - /** - * Fully qualified name of the event. - */ - path: string; - /** - * The fields of the event. - */ - fields: ABIVariable[]; -} - /** * Aztec.nr function types. */ @@ -151,7 +175,7 @@ export interface FunctionAbi { /** * The types of the return values. */ - returnTypes: ABIType[]; + returnTypes: AbiType[]; /** * Whether the function is flagged as an initializer. */ @@ -256,9 +280,12 @@ export interface ContractArtifact { */ functions: FunctionArtifact[]; /** - * The events of the contract. + * The outputs of the contract. */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** * The map of file ID to the source code and path of the file. diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index 69bab60b6c5..deafe602ae1 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -1,6 +1,6 @@ import { AztecAddress } from '../aztec-address/index.js'; import { type Fr } from '../fields/index.js'; -import { type ABIParameter, type ABIType, type ABIVariable, type FunctionArtifact } from './abi.js'; +import { type ABIParameter, type ABIVariable, type AbiType, type FunctionArtifact } from './abi.js'; import { isAztecAddressStruct } from './utils.js'; /** @@ -21,7 +21,7 @@ class ReturnValuesDecoder { * @param abiType - The type of the return value. * @returns The decoded return value. */ - private decodeReturn(abiType: ABIType): DecodedReturn { + private decodeReturn(abiType: AbiType): DecodedReturn { switch (abiType.kind) { case 'field': return this.getNextField().toBigInt(); @@ -115,7 +115,7 @@ export class FunctionSignatureDecoder { * @param param - The parameter type to decode. * @returns A string representing the parameter type. */ - private getParameterType(param: ABIType): string { + private getParameterType(param: AbiType): string { switch (param.kind) { case 'field': return 'Field'; diff --git a/yarn-project/foundation/src/abi/encoder.ts b/yarn-project/foundation/src/abi/encoder.ts index 7ca7260db68..119554935af 100644 --- a/yarn-project/foundation/src/abi/encoder.ts +++ b/yarn-project/foundation/src/abi/encoder.ts @@ -1,5 +1,5 @@ import { Fr } from '../fields/index.js'; -import { type ABIType, type FunctionAbi } from './abi.js'; +import { type AbiType, type FunctionAbi } from './abi.js'; import { isAddressStruct, isFunctionSelectorStruct, isWrappedFieldStruct } from './utils.js'; /** @@ -11,7 +11,7 @@ class ArgumentEncoder { constructor(private abi: FunctionAbi, private args: any[]) {} - static typeSize(abiType: ABIType): number { + static typeSize(abiType: AbiType): number { switch (abiType.kind) { case 'field': case 'boolean': @@ -36,7 +36,7 @@ class ArgumentEncoder { * @param arg - The value to encode. * @param name - Name. */ - private encodeArgument(abiType: ABIType, arg: any, name?: string) { + private encodeArgument(abiType: AbiType, arg: any, name?: string) { if (arg === undefined || arg == null) { throw new Error(`Undefined argument ${name ?? 'unnamed'} of type ${abiType.kind}`); } diff --git a/yarn-project/foundation/src/abi/utils.ts b/yarn-project/foundation/src/abi/utils.ts index 1959d5762b8..7bc8c55ce5e 100644 --- a/yarn-project/foundation/src/abi/utils.ts +++ b/yarn-project/foundation/src/abi/utils.ts @@ -1,11 +1,11 @@ -import { type ABIType } from './abi.js'; +import { type AbiType } from './abi.js'; /** * Returns whether the ABI type is an Aztec or Ethereum Address defined in Aztec.nr. * @param abiType - Type to check. * @returns Boolean. */ -export function isAddressStruct(abiType: ABIType) { +export function isAddressStruct(abiType: AbiType) { return isEthAddressStruct(abiType) || isAztecAddressStruct(abiType); } @@ -14,7 +14,7 @@ export function isAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isEthAddressStruct(abiType: ABIType) { +export function isEthAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::EthAddress'); } @@ -23,7 +23,7 @@ export function isEthAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isAztecAddressStruct(abiType: ABIType) { +export function isAztecAddressStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('address::AztecAddress'); } @@ -32,7 +32,7 @@ export function isAztecAddressStruct(abiType: ABIType) { * @param abiType - Type to check. * @returns Boolean. */ -export function isFunctionSelectorStruct(abiType: ABIType) { +export function isFunctionSelectorStruct(abiType: AbiType) { return abiType.kind === 'struct' && abiType.path.endsWith('types::abis::function_selector::FunctionSelector'); } @@ -40,7 +40,7 @@ export function isFunctionSelectorStruct(abiType: ABIType) { * Returns whether the ABI type is a struct with a single `inner` field. * @param abiType - Type to check. */ -export function isWrappedFieldStruct(abiType: ABIType) { +export function isWrappedFieldStruct(abiType: AbiType) { return ( abiType.kind === 'struct' && abiType.fields.length === 1 && diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index 1a77f8916cb..da5e9cd6e8f 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -1,7 +1,12 @@ import { type ABIParameter, + type BasicValue, type ContractArtifact, type FunctionArtifact, + type IntegerValue, + type StructValue, + type TupleValue, + type TypedStructFieldValue, getDefaultInitializer, isAztecAddressStruct, isEthAddressStruct, @@ -180,6 +185,69 @@ function generateAbiStatement(name: string, artifactImportPath: string) { return stmts.join('\n'); } +/** + * Generates a getter for the contract's storage layout. + * @param input - The contract artifact. + */ +function generateStorageLayoutGetter(input: ContractArtifact) { + const storage = input.outputs.globals.storage ? (input.outputs.globals.storage[0] as StructValue) : { fields: [] }; + const storageFields = storage.fields as TypedStructFieldValue[]; + const storageFieldsUnionType = storageFields.map(f => `'${f.name}'`).join(' | '); + const layout = storageFields + .map( + ({ + name, + value: { + fields: [slot, typ], + }, + }) => + `${name}: { + slot: new Fr(${(slot.value as IntegerValue).value}n), + typ: "${(typ.value as BasicValue<'string', string>).value}", + } + `, + ) + .join(',\n'); + return storageFields.length > 0 + ? ` + public static get storage(): ContractStorageLayout<${storageFieldsUnionType}> { + return { + ${layout} + } as ContractStorageLayout<${storageFieldsUnionType}>; + } + ` + : ''; +} + +/** + * Generates a getter for the contract notes + * @param input - The contract artifact. + */ +function generateNotesGetter(input: ContractArtifact) { + const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as TupleValue[]) : []; + const notesUnionType = notes.map(n => `'${(n.fields[1] as BasicValue<'string', string>).value}'`).join(' | '); + + const noteMetadata = notes + .map( + ({ fields: [id, typ] }) => + `${(typ as BasicValue<'string', string>).value}: { + id: new Fr(${(id as IntegerValue).value}n), + } + `, + ) + .join(',\n'); + return notes.length > 0 + ? ` + public static get notes(): ContractNotes<${notesUnionType}> { + const notes = this.artifact.outputs.globals.notes ? (this.artifact.outputs.globals.notes as any) : []; + return { + ${noteMetadata} + } as ContractNotes<${notesUnionType}>; + } + ` + : ''; +} + /** * Generates the typescript code to represent a contract. * @param input - The compiled Noir artifact. @@ -193,6 +261,8 @@ export function generateTypescriptContractInterface(input: ContractArtifact, art const at = artifactImportPath && generateAt(input.name); const artifactStatement = artifactImportPath && generateAbiStatement(input.name, artifactImportPath); const artifactGetter = artifactImportPath && generateArtifactGetter(input.name); + const storageLayoutGetter = artifactImportPath && generateStorageLayoutGetter(input); + const notesGetter = artifactImportPath && generateNotesGetter(input); return ` /* Autogenerated file, do not edit! */ @@ -208,6 +278,8 @@ import { ContractFunctionInteraction, ContractInstanceWithAddress, ContractMethod, + ContractStorageLayout, + ContractNotes, DeployMethod, EthAddress, EthAddressLike, @@ -235,6 +307,10 @@ export class ${input.name}Contract extends ContractBase { ${artifactGetter} + ${storageLayoutGetter} + + ${notesGetter} + /** Type-safe wrappers for the public methods exposed by the contract. */ public methods!: { ${methods.join('\n')} diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex index cb7d5e1e941..65b8a78378c 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-init.hex @@ -1 +1 @@ -1b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440100000000000000000000000000000000000000000000000000000000000000001b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe0000000000000000000000000000000000000000af9f8c4400000000000129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006405a2f172d23668f5d0e473fc6e20a7bc413ff8e25bf2f37a93c52944a9ca000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400cf1745125bf6bc7dfd0952044d8ec041a34c30484c7ae54b62190ba401ed4f00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2aea4cf50b44bff835585c789cc9a3da218ab694bbfac045c7d98903fa07f17e2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fa250c191116c5c384b5e1b0a5e9595e1a587a6a2eb0070e025d990c6140c650f588c65eb313ea390c4218be4f0b16f55fd4c0b698f155ff9e926b6ec31987f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +1b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da00000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abeaf9f8c440100000000000000000000000000000000000000000000000000000000000000001b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe0000000000000000000000000000000000000000af9f8c4400000000000129ebc2741445eb983df31d46aa9d1420503be87e38699590078cc8423c2956da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006405a2f172d23668f5d0e473fc6e20a7bc413ff8e25bf2f37a93c52944a9ca000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003579f468b2283611cc4d7adfbb93b8a4815d93ac0b1e1d11dace012cf73c7aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b6092dfb7983a9166e759272a47d07a3e19f3c5861dde76f4d83b0e93792abe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400cf1745125bf6bc7dfd0952044d8ec041a34c30484c7ae54b62190ba401ed4f00e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2aea4cf50b44bff835585c789cc9a3da218ab694bbfac045c7d98903fa07f17e2ed0c3709ab5a017cfd2280a8a68eaad16474d2ec26cfb1e7d998a6b32a03a050fa250c191116c5c384b5e1b0a5e9595e1a587a6a2eb0070e025d990c6140c650f588c65eb313ea390c4218be4f0b16f55fd4c0b698f155ff9e926b6ec31987f00000000000000000000000000000000000000000000000000000000000000022b09ad2b1765e61b2203cd359f9b833c9c611271e5c80df92c35ef522d3731e42706fc59cda1c448173c4a7739dca4fd4325c970e6f035ed9929fd84719533bb0bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex index abdf33a7ab4..36a4e460001 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-inner.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080d109eb0144373702b0884ca6fd311f532ec3069ceda18ce4ea6943ac9f44ea219729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002ce761f492d4cd1e04716beb3ec03610fc127e5e941abc34f6f81cfb4361bba71fe37d55e04c02ab4c4bd77a9f0d353537c0783895a08e32e4a923a49fa26932148ae7ed365399e8541720c7297453e6721ef288850730cecad40b08eb71f1e7097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd0906bca10119729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000421f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2ade7319c2af1088ff40b65dcbd2c33a9ec6b2ec9714702671d027225acde4c916f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2b0a05c5d781d619d9f365dd3d1ad613833d45fd61b7c1b7ff19c0eb1de71a4700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302a294d29fe57739dcb819868c91ec90b8f0b0e4904aaf91101d5235e5a90a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c008d4d695766a616808caa331119da14269ac3271c251dec3a11df896131ba2c000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000080d109eb0144373702b0884ca6fd311f532ec3069ceda18ce4ea6943ac9f44ea219729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000002ce761f492d4cd1e04716beb3ec03610fc127e5e941abc34f6f81cfb4361bba71fe37d55e04c02ab4c4bd77a9f0d353537c0783895a08e32e4a923a49fa26932148ae7ed365399e8541720c7297453e6721ef288850730cecad40b08eb71f1e7097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd0906bca10119729edb807e590592b68c8e5b84a11a2efbaf9ed9730a92f6f0b37ee6157df6097c5850cb897f93f42e40360f253dc91b9b81fb7818e22892775e99599b67fd00000000000000000000000000000000000000000906bca10000000000032898402da2fa95f47c47763fe5b171ff3155bd31e5af88d9823bccb26b6701540000000000000000000000000000000000000000000000000000000000007a6a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b800e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b80000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000421f00cdea7ee56beefe8e6288fa9bfeda87e95d6c49f4d71e30af287de407ff400000003000000000000000000000000000000000000000000000000000000000000000100a42bd0aeed340ce9e773b8a5075778fb3507870cc39bf44f36dca64e55647d00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f8000000030260b922baed38a917874a307a1ba117274855832a68ae2ea5e17d81d07e05c8c000001800c3b5fdf5dfb3e7695fee942e9d3ae9f0b1bd29b67c85a8e84bf6a1b1e8b97aa000002000572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000001000000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000660d8e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f2ade7319c2af1088ff40b65dcbd2c33a9ec6b2ec9714702671d027225acde4c916f4c3cfebc402192ca89c515cea27dd91691ad7b7ce5ceee2e354fc3ea0e9b427b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed2b0a05c5d781d619d9f365dd3d1ad613833d45fd61b7c1b7ff19c0eb1de71a4700000000000000000000000000000000000000000000000000000000000000002452a14c748981acff167dba9088770b6c2c2dc34677295a1974f2c247236ba11e904e4d0a67667f8faaa89198f5e89684e213bc99a83c3b20888d5854d3dd320bcd1f91cf7bdd471d0a30c58c4706f3fdab3807a954b8f5b5e3bfec87d001bb06e62084ee7b602fe9abc15632dda3269f56fb0c6e12519a2eb2ec897091919d03c9e2e67178ac638746f068907e6677b4cc7a9592ef234ab6ab518f17efffa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex index 485074a1922..a472db0a21f 100644 --- a/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex +++ b/yarn-project/noir-protocol-circuits-types/src/fixtures/nested-call-private-kernel-ordering.hex @@ -1 +1 @@ -0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000abd4337bcdcbdf216eba2e0b858216d72437971ae2354052c10987ef1833f8b0d00b20e11d8f1af2c9fa2a6bc4a700213b85237423eee25c3231329e1a0c9282c14960355c61973b2491a51302b95207d8ef78ee00fb192158bbe6c7f8e1202063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000001000000bd300000bd400000bd500000bd600000bd700000bd800000bd900000bda00000bdb00000bdc00000bdd00000bde00000bdf00000be000000be100000be20000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009bbe8e24f6af63140eec106701bfa85a0369d7867636f862c180106544a07c006003947a07e21c81ce2062539d6d6864fe999b58b03fc46f6c190d9eac9b390000000000000000000000000000000000000000000000000000000000000138000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000000016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000000000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000000800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b0000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007a6900000000000000000000000000000000000000000000000000000000000000010000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000000abd4337bcdcbdf216eba2e0b858216d72437971ae2354052c10987ef1833f8b0d00b20e11d8f1af2c9fa2a6bc4a700213b85237423eee25c3231329e1a0c9282c14960355c61973b2491a51302b95207d8ef78ee00fb192158bbe6c7f8e1202063ab95226f62ced5b0279a5f67fbc25ae4c9692c40ddfa8c2f5905041b1d77e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000234186448896c6a32b6b07ca8aff31e24cad89898b0ff31c2ee2ca29663af7fa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f95aa9d5d0af78a4d9e4bec46f9a81e75b4fd9f67523422bb4b6e5f0d5be154000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011b061f7c46db8c9f35f68521619a97428f4ccf1d6812f11e3439b183292817a700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000008000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts index d42d36f9092..8b8f29d890f 100644 --- a/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/noir-protocol-circuits-types/src/scripts/generate_ts_from_abi.ts @@ -1,4 +1,4 @@ -import { type ABIType } from '@aztec/foundation/abi'; +import { type AbiType } from '@aztec/foundation/abi'; import { createConsoleLogger } from '@aztec/foundation/log'; import { type NoirCompiledCircuit, type NoirFunctionAbi } from '@aztec/types/noir'; @@ -50,7 +50,7 @@ function addIfUnique(item: PrimitiveTypesUsed) { * @param type - The ABI type to convert. * @returns The typescript code to define the type. */ -function abiTypeToTs(type: ABIType): string { +function abiTypeToTs(type: AbiType): string { switch (type.kind) { case 'integer': { let tsIntType = ''; @@ -107,7 +107,7 @@ function getLastComponentOfPath(str: string): string { * @param output - The set of structs that we have already generated bindings for. * @returns The TypeScript code to define the struct. */ -function generateStructInterfaces(type: ABIType, output: Set): string { +function generateStructInterfaces(type: AbiType, output: Set): string { let result = ''; // Edge case to handle the array of structs case. @@ -124,7 +124,7 @@ function generateStructInterfaces(type: ABIType, output: Set): string { // List of structs encountered while viewing this type that we need to generate // bindings for. - const typesEncountered = new Set(); + const typesEncountered = new Set(); // Codegen the struct and then its fields, so that the structs fields // are defined before the struct itself. diff --git a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts index 75e4bf22e64..da083c15b97 100644 --- a/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts +++ b/yarn-project/sequencer-client/src/sequencer/abstract_phase_manager.ts @@ -42,7 +42,7 @@ import { } from '@aztec/circuits.js'; import { computeVarArgsHash } from '@aztec/circuits.js/hash'; import { - type ABIType, + type AbiType, type DecodedReturn, type FunctionArtifact, type ProcessReturnValues, @@ -284,7 +284,7 @@ export abstract class AbstractPhaseManager { const paddedReturn = padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH); // TODO(#5450) Need to use the proper return values here - const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; + const returnTypes: AbiType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; const mockArtifact = { returnTypes } as any as FunctionArtifact; currentReturn = decodeReturnValues(mockArtifact, paddedReturn); diff --git a/yarn-project/simulator/src/client/private_execution.ts b/yarn-project/simulator/src/client/private_execution.ts index 2eb822b4b7a..1c6e7fee97b 100644 --- a/yarn-project/simulator/src/client/private_execution.ts +++ b/yarn-project/simulator/src/client/private_execution.ts @@ -1,5 +1,5 @@ import { type FunctionData, PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js'; -import { type ABIType, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; +import { type AbiType, type FunctionArtifactWithDebugMetadata, decodeReturnValues } from '@aztec/foundation/abi'; import { type AztecAddress } from '@aztec/foundation/aztec-address'; import { Fr } from '@aztec/foundation/fields'; import { createDebugLogger } from '@aztec/foundation/log'; @@ -55,7 +55,7 @@ export async function executePrivateFunction( // Mocking the return type to be an array of 4 fields // TODO: @LHerskind must be updated as we are progressing with the macros to get the information - const returnTypes: ABIType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; + const returnTypes: AbiType[] = [{ kind: 'array', length: 4, type: { kind: 'field' } }]; const mockArtifact = { ...artifact, returnTypes }; const returnValues = decodeReturnValues(mockArtifact, publicInputs.returnValues); diff --git a/yarn-project/types/src/abi/contract_artifact.ts b/yarn-project/types/src/abi/contract_artifact.ts index c2b57c17e7e..b1b5ca3d8ac 100644 --- a/yarn-project/types/src/abi/contract_artifact.ts +++ b/yarn-project/types/src/abi/contract_artifact.ts @@ -1,7 +1,7 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, + type AbiType, type ContractArtifact, type FunctionArtifact, FunctionType, @@ -135,7 +135,7 @@ function generateFunctionArtifact(fn: NoirCompiledContractFunction): FunctionArt } // If the function is secret, the return is the public inputs, which should be omitted - let returnTypes: ABIType[] = []; + let returnTypes: AbiType[] = []; if (functionType !== 'secret' && fn.abi.return_type) { returnTypes = [fn.abi.return_type.abi_type]; } @@ -191,7 +191,7 @@ function generateContractArtifact(contract: NoirCompiledContract, aztecNrVersion return { name: contract.name, functions: contract.functions.map(generateFunctionArtifact), - events: contract.events, + outputs: contract.outputs, fileMap: contract.file_map, aztecNrVersion, }; diff --git a/yarn-project/types/src/noir/index.ts b/yarn-project/types/src/noir/index.ts index c244ee69995..56a449d8ef0 100644 --- a/yarn-project/types/src/noir/index.ts +++ b/yarn-project/types/src/noir/index.ts @@ -1,10 +1,10 @@ import { type ABIParameter, type ABIParameterVisibility, - type ABIType, + type AbiType, + type AbiValue, type DebugFileMap, type DebugInfo, - type EventAbi, } from '@aztec/foundation/abi'; export const AZTEC_PRIVATE_ATTRIBUTE = 'aztec(private)'; @@ -27,7 +27,7 @@ export interface NoirFunctionAbi { /** * The type of the return value. */ - abi_type: ABIType; + abi_type: AbiType; /** * The visibility of the return value. */ @@ -68,7 +68,10 @@ export interface NoirCompiledContract { /** The functions of the contract. */ functions: NoirFunctionEntry[]; /** The events of the contract */ - events: EventAbi[]; + outputs: { + structs: Record; + globals: Record; + }; /** The map of file ID to the source code and path of the file. */ file_map: DebugFileMap; } From d428f414038679561e8e79e5c098e809c6eecc65 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:17:42 +0000 Subject: [PATCH 061/123] =?UTF-8?q?reverted=20extraneous=20changes=C3=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 6 +-- .github/workflows/publish_base_images.yml | 39 +++++++++++++++++++ avm-transpiler/Earthfile | 8 ++-- boxes/Earthfile | 14 +++---- noir-projects/Earthfile | 2 +- noir/Earthfile | 14 +++---- .../aztec_macros/src/utils/hir_utils.rs | 39 ++++++++++++------- .../src/monomorphization/mod.rs | 1 + scripts/earthly-cloud | 3 ++ 9 files changed, 90 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/publish_base_images.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af99c18155f..d42849a778a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -151,7 +151,7 @@ jobs: - name: Test working-directory: ./barretenberg/cpp/ run: | - earthly-cloud build ${{ matrix.environment }} --no-output +test + earthly-cloud test ${{ matrix.environment }} --no-output +test # All benchmarks, purposefully ran sequential on a machine # they should use parallelism within the benchmark, but only one thing should run at a time @@ -195,8 +195,8 @@ jobs: # Use bench_mode=cache to read the pushed build above - name: Client IVC Bench working-directory: ./barretenberg/cpp/ - run: earthly-cloud bench x86 --no-output +bench-client-ivc + run: earthly-cloud bench x86 --no-output +bench-client-ivc --bench_mode=cache - name: Ultrahonk Bench working-directory: ./barretenberg/cpp/ - run: earthly-cloud bench x86 --no-output +bench-ultra-honk + run: earthly-cloud bench x86 --no-output +bench-ultra-honk --bench_mode=cache diff --git a/.github/workflows/publish_base_images.yml b/.github/workflows/publish_base_images.yml new file mode 100644 index 00000000000..c2f52ab39b5 --- /dev/null +++ b/.github/workflows/publish_base_images.yml @@ -0,0 +1,39 @@ +# Publishes our base images with custom installs or builds etc +# These publish a multi-arch image by first publishing with x86, and then with arm +# This is a bit of a hack, but earthly needs to see both image types to make a multiplatform image +# and its easiest for arm to just pull the x86 image after. +name: Publish Base Images +on: + workflow_dispatch: {} + +jobs: + publish: + runs-on: ubuntu-latest + env: + EARTHLY_TOKEN: ${{ secrets.EARTHLY_TOKEN }} + # cancel if reran on same PR if exists, otherwise if on same commit + concurrency: + group: publish-base-images-${{ github.event.pull_request.number || github.ref_name }} + cancel-in-progress: ${{ github.ref_name != 'master' }} + steps: + - uses: earthly/actions-setup@v1 + with: + version: v0.8.5 + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + submodules: recursive + + - name: Setup + working-directory: ./scripts + run: ./setup_env.sh ${{ secrets.DOCKERHUB_PASSWORD }} ${{ github.actor }} + + - name: Publish Barretenberg Base Images + working-directory: ./barretenberg/cpp + run: | + # see note above about how this creates a multiplatform image + earthly-cloud build x86 --push +build-base + earthly-cloud build arm --push +build-base + diff --git a/avm-transpiler/Earthfile b/avm-transpiler/Earthfile index d00a7bf9823..b2c77f9b3f9 100644 --- a/avm-transpiler/Earthfile +++ b/avm-transpiler/Earthfile @@ -3,10 +3,10 @@ IMPORT ../noir AS noir # we rely on noir source, which this image has FROM noir+nargo -# move noir contents to /build/noir -RUN mv /build /noir && mkdir /build && mv /noir /build +# move noir contents to /usr/src/noir +RUN mv /usr/src /noir && mkdir /usr/src && mv /noir /usr/src # work in avm-transpiler -WORKDIR /build/avm-transpiler +WORKDIR /usr/src/avm-transpiler RUN apt-get update && apt-get install -y git @@ -24,5 +24,5 @@ build: run: #TODO needed? FROM ubuntu:focal - COPY +build/avm-transpiler /build/avm-transpiler + COPY +build/avm-transpiler /usr/src/avm-transpiler ENTRYPOINT ["sh", "-c"] diff --git a/boxes/Earthfile b/boxes/Earthfile index c8a92975bb7..e96e5e681c8 100644 --- a/boxes/Earthfile +++ b/boxes/Earthfile @@ -5,14 +5,14 @@ build: # We need yarn. Start fresh container. FROM node:18.19.0 RUN apt update && apt install netcat-openbsd - COPY ../yarn-project+build/build /build - COPY ../noir/+nargo/nargo /build/noir/noir-repo/target/release/nargo - COPY ../noir-projects/+build/aztec-nr /build/noir-projects/aztec-nr - COPY ../noir-projects/+build/noir-protocol-circuits/crates/types /build/noir-projects/noir-protocol-circuits/crates/types - WORKDIR /build/boxes + COPY ../yarn-project+build/build /usr/src + COPY ../noir/+nargo/nargo /usr/src/noir/noir-repo/target/release/nargo + COPY ../noir-projects/+build/aztec-nr /usr/src/noir-projects/aztec-nr + COPY ../noir-projects/+build/noir-protocol-circuits/crates/types /usr/src/noir-projects/noir-protocol-circuits/crates/types + WORKDIR /usr/src/boxes COPY . . - ENV AZTEC_NARGO=/build/noir/noir-repo/target/release/nargo - ENV AZTEC_CLI=/build/yarn-project/cli/aztec-cli-dest + ENV AZTEC_NARGO=/usr/src/noir/noir-repo/target/release/nargo + ENV AZTEC_CLI=/usr/src/yarn-project/cli/aztec-cli-dest RUN yarn && yarn build RUN npx -y playwright@1.42 install --with-deps ENTRYPOINT ["/bin/sh", "-c"] \ No newline at end of file diff --git a/noir-projects/Earthfile b/noir-projects/Earthfile index 51d82e444c9..c5decbbbeab 100644 --- a/noir-projects/Earthfile +++ b/noir-projects/Earthfile @@ -6,7 +6,7 @@ COPY ../noir/+nargo/nargo /usr/bin/nargo # Install transpiler COPY ../avm-transpiler/+build/avm-transpiler /usr/bin/avm-transpiler -WORKDIR /build +WORKDIR /usr/src/noir-projects # Copy source. COPY --dir aztec-nr noir-contracts noir-protocol-circuits . diff --git a/noir/Earthfile b/noir/Earthfile index a6496804ecc..62345056e0e 100644 --- a/noir/Earthfile +++ b/noir/Earthfile @@ -3,7 +3,7 @@ VERSION 0.8 nargo: FROM rust:bullseye RUN apt update && apt install -y libc++1 - WORKDIR /build + WORKDIR /usr/src # Relevant source (TODO finer-grained 'tooling') COPY --dir \ noir-repo/acvm-repo \ @@ -21,8 +21,8 @@ nargo: COPY ./scripts/bootstrap_native.sh ./scripts/bootstrap_native.sh RUN ./scripts/bootstrap_native.sh RUN echo CONTENT HASH $COMMIT_HASH | tee .content-hash - SAVE ARTIFACT /build/noir-repo/target/release/nargo nargo - SAVE ARTIFACT /build/noir-repo/target/release/acvm acvm + SAVE ARTIFACT /usr/src/noir-repo/target/release/nargo nargo + SAVE ARTIFACT /usr/src/noir-repo/target/release/acvm acvm SAVE IMAGE aztecprotocol/nargo packages: @@ -34,9 +34,9 @@ packages: # `noir-repo` is nested inside of `noir` so we copy `bb.js` as such to account # for the extra nested folder specified in portalled package paths - COPY ../barretenberg/ts/+build/build /build/../barretenberg/ts + COPY ../barretenberg/ts/+build/build /usr/src/../barretenberg/ts - WORKDIR /build + WORKDIR /usr/src # Relevant source (TODO finer-grained) COPY --dir \ @@ -77,8 +77,8 @@ run: # Install Tini as nargo doesn't handle signals properly. # Install git as nargo needs it to clone. RUN apt-get update && apt-get install -y git tini && rm -rf /var/lib/apt/lists/* && apt-get clean - COPY +build/. /build - ENTRYPOINT ["/usr/bin/tini", "--", "/build/nargo"] + COPY +build/. /usr/src + ENTRYPOINT ["/usr/bin/tini", "--", "/usr/src/nargo"] build: BUILD +nargo diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 91509549e6a..c4414e6419b 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -17,22 +17,33 @@ use super::ast_utils::is_custom_attribute; pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec<(String, StructId)> { context .def_map(crate_id) - .map(|def_map| { - def_map - .modules() - .iter() - .flat_map(|(_, module)| { - module.type_definitions().filter_map(|typ| { - if let ModuleDefId::TypeId(struct_id) = typ { - Some(struct_id) + .expect("ICE: Missing crate in def_map") + .modules() + .iter() + .flat_map(|(_, module)| { + module.type_definitions().filter_map(move |typ| { + if let ModuleDefId::TypeId(struct_id) = typ { + let module_id = struct_id.module_id(); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), struct_id); + let path = if path.contains("::") { + let prefix = if &module_id.krate == context.root_crate_id() { + "crate" } else { - None - } - }) - }) - .collect() + "dep" + }; + format!("{}::{}", prefix, path) + } else { + path + }; + + Some((path, struct_id)) + } else { + None + } + }) }) - .unwrap_or(vec![]) + .collect() } pub fn collect_crate_functions(crate_id: &CrateId, context: &HirContext) -> Vec { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/monomorphization/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/monomorphization/mod.rs index ba5ee930ef3..c6ab681db6c 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/monomorphization/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/monomorphization/mod.rs @@ -827,6 +827,7 @@ impl<'interner> Monomorphizer<'interner> { if let ImplKind::TraitMethod(method, _, _) = ident.impl_kind { return Ok(self.resolve_trait_method_reference(expr_id, typ, method)); } + let definition = self.interner.definition(ident.id); let ident = match &definition.kind { DefinitionKind::Function(func_id) => { diff --git a/scripts/earthly-cloud b/scripts/earthly-cloud index 320d9e49b4f..d2a0e39bc2c 100755 --- a/scripts/earthly-cloud +++ b/scripts/earthly-cloud @@ -38,6 +38,9 @@ elif [ "$RUNNER_TYPE" == "bench" ] ; then SIZE=2xlarge NUMBER_OF_RUNNERS=1 # MAX_PARALLELISM=1 +elif [ "$RUNNER_TYPE" == "test" ] ; then + SIZE=4xlarge + NUMBER_OF_RUNNERS=1 fi # Flag to determine if -i is present From 78a218d6a9be72eacc2ab3e0751d3c18ea7809f3 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:28:33 +0000 Subject: [PATCH 062/123] wip --- noir/noir-repo/aztec_macros/src/lib.rs | 5 +- .../kernel/private_kernel_tail_data.ts | 66 ------------------- 2 files changed, 3 insertions(+), 68 deletions(-) delete mode 100644 yarn-project/circuits.js/src/structs/kernel/private_kernel_tail_data.ts diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 973ac5550db..3a328a20b34 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -134,6 +134,8 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result Result, - ) {} - - static fromBuffer(buffer: Buffer | BufferReader): PrivateKernelTailData { - const reader = BufferReader.asReader(buffer); - return new this( - reader.readObject(PrivateKernelTailCircuitPublicInputs), - reader.readObject(Proof), - reader.readObject(VerificationKey), - reader.readNumber(), - reader.readArray(VK_TREE_HEIGHT, Fr), - ); - } - - static empty(): PrivateKernelTailData { - return new this( - PrivateKernelTailCircuitPublicInputs.empty(), - makeEmptyProof(), - VerificationKey.makeFake(), - 0, - makeTuple(VK_TREE_HEIGHT, Fr.zero), - ); - } - - /** - * Serialize this as a buffer. - * @returns The buffer. - */ - toBuffer() { - return serializeToBuffer(this.publicInputs, this.proof, this.vk, this.vkIndex, this.vkPath); - } -} From 7a2d04141958a71d8f5f694d8fa307d782a046af Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 09:30:41 +0000 Subject: [PATCH 063/123] removed repeated block --- .../noirc_frontend/src/hir/def_map/mod.rs | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs index 4dce79ccf81..7c0090ff95b 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/def_map/mod.rs @@ -246,35 +246,6 @@ impl CrateDefMap { } }); - let mut outputs = - ContractOutputs { structs: HashMap::new(), globals: HashMap::new() }; - - interner.get_all_globals().iter().for_each(|global_info| { - interner.global_attributes(&global_info.id).iter().for_each(|attr| { - if let SecondaryAttribute::Abi(tag) = attr { - if let Some(tagged) = outputs.globals.get_mut(tag) { - tagged.push(global_info.id); - } else { - outputs.globals.insert(tag.to_string(), vec![global_info.id]); - } - } - }); - }); - - module.type_definitions().for_each(|id| { - if let ModuleDefId::TypeId(struct_id) = id { - interner.struct_attributes(&struct_id).iter().for_each(|attr| { - if let SecondaryAttribute::Abi(tag) = attr { - if let Some(tagged) = outputs.structs.get_mut(tag) { - tagged.push(struct_id); - } else { - outputs.structs.insert(tag.to_string(), vec![struct_id]); - } - } - }); - } - }); - let name = self.get_module_path(id, module.parent); Some(Contract { name, location: module.location, functions, outputs }) } else { From f35d058094ab431c8dd29f1d303fc6e54ab46f68 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 10:11:12 +0000 Subject: [PATCH 064/123] wip --- .../contracts/child_contract/src/main.nr | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 2dd28252f54..694b0e4a07e 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -4,7 +4,8 @@ contract Child { use dep::aztec::{ context::{PublicContext, Context}, protocol_types::{abis::{call_context::CallContext}}, - note::{note_getter_options::NoteGetterOptions, note_header::NoteHeader} + note::{note_getter_options::NoteGetterOptions, note_header::NoteHeader}, + protocol_types::traits::Deserialize }; use dep::value_note::value_note::ValueNote; @@ -15,7 +16,6 @@ contract Child { } struct ChildInterface { - target_contract: dep::aztec::protocol_types::address::AztecAddress, value: fn[(dep::aztec::context::Context, dep::aztec::protocol_types::address::AztecAddress)](Field) -> [Field; 4], // value_internal: fn(Field) -> Field, // pub_get_value: fn(Field) -> Field, @@ -34,9 +34,12 @@ contract Child { target_contract: dep::aztec::protocol_types::address::AztecAddress ) -> Self { Self { - target_contract, - value: | input: Field | { - context.private.unwrap().call_private_function(target_contract, dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), [input]) + value: | input | { + context.private.unwrap().call_private_function( + target_contract, + dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), + [input] + ) } } } From f339ffbe5ef7b3c0cd475afb8d6df8688475bb8a Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 12:53:42 +0000 Subject: [PATCH 065/123] updated artifact hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index d24a449c845..5fed46b7a23 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x1bf24d2106579f84afb2c55647aa66d0c37401e82952577ada09044c02220f81"`, + `"0x07500295cf2f26d453ed661a37e1972b34143542d717b68d5259e8612b2bc281"`, ); }); }); From a29a4e125c1211e747c550dd4be9f5d0463c976e Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 14:05:22 +0000 Subject: [PATCH 066/123] wip --- .../contracts/child_contract/src/main.nr | 26 +++---- .../src/transforms/contract_interface.rs | 72 ++++++++++++------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 694b0e4a07e..ba1bf63ad19 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -28,19 +28,19 @@ contract Child { // set_value_twice_with_nested_last: fn() -> () } - impl ChildInterface { - fn new( - context: dep::aztec::context::Context, - target_contract: dep::aztec::protocol_types::address::AztecAddress - ) -> Self { - Self { - value: | input | { - context.private.unwrap().call_private_function( - target_contract, - dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), - [input] - ) - } + #[contract_library_method] + fn at( + context: dep::aztec::context::Context, + target_contract: dep::aztec::protocol_types::address::AztecAddress + ) -> ChildInterface { + ChildInterface { + value: | input | { + context.private.unwrap().call_private_function( + target_contract, + dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), + [input] + ) + } } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 239920e0acb..b099cbc8afc 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -2,6 +2,8 @@ use noirc_frontend::{parse_program, parser::SortedModule, NoirFunction}; use crate::utils::errors::AztecMacroError; +fn compute_fn_signature(func: &NoirFunction) -> String {} + pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, String, String) { let (fn_name, fn_type) = ( func.name().to_string(), @@ -12,28 +14,50 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, St .map(|param| param.typ.to_string().replace("plain::", "")) .collect::>() .join(", "), - func.return_type() + "[Field; 4]" // func.return_type() ), ); - let fn_source = format!( - "|{}| {{ - context.call_{}_function(target_contract, [{}]) - }}", - func.parameters() - .iter() - .map(|param| format!( + let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature(func)); + let fn_parameters = func + .parameters() + .iter() + .map(|param| { + format!( "{}: {}", param.pattern.name_ident().0.contents, param.typ.to_string().replace("plain::", "") - )) - .collect::>() - .join(", "), - if aztec_visibility == "Private" { "private" } else { "public" }, - func.parameters() - .iter() - .map(|param| param.pattern.name_ident().0.contents.clone()) - .collect::>() - .join(", "), + ) + }) + .collect::>() + .join(", "); + let call_args = func + .parameters() + .iter() + .map(|param| param.pattern.name_ident().0.contents.clone()) + .collect::>() + .join(", "); + let context_call = if aztec_visibility == "Private" { + format!( + "context.private.unwrap().call_private_function(target_contract, {}, [{}])", + fn_signature, call_args + ) + } else { + format!( + " + if context.private.is_some() {{ + context.private.unwrap().call_private_function(target_contract, {0}, [{1}]) + }} else {{ + context.public.unwrap().call_public_function(target_contract, {0}, [{1}]) + }} + ", + fn_signature, call_args + ) + }; + let fn_source = format!( + "|{}| {{ + {} + }}", + fn_parameters, context_call ); (fn_name, fn_type, fn_source) } @@ -46,17 +70,15 @@ pub fn generate_contract_interface( let contract_interface = format!( " struct {0}Interface {{ - target_contract: dep::aztec::protocol_types::address::AztecAddress, {1} }} - impl {0}Interface {{ - fn new( - context: T, - target_contract: dep::aztec::protocol_types::address::AztecAddress - ) -> Self where T: dep::aztec::context::Context {{ - Self {{ - target_contract, + #[contract_library_method] + fn at( + context: dep::aztec::context::Context, + target_contract: dep::aztec::protocol_types::address::AztecAddress + ) -> {0}Interface {{ + {0}Interface {{ {2} }} }} From 3e7cf153fa490b53f495159be23772972e7428bc Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 19:32:15 +0000 Subject: [PATCH 067/123] updated artifact hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 07797e892c5..c28e99ce60e 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x255f1f3fe15bca5603b4b5681cf22e6115f75bcc76e0322e8f41a9d3dd68a5b5"`, + `"0x001544b091ce13bd967234b51fb8ddad21b93b86b336ccc665f4f43013433530"`, ); }); }); From 9524c9c2dd0a6d3453a80eb4834a5174a21e50c6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 4 Apr 2024 19:38:37 +0000 Subject: [PATCH 068/123] merge conflicts --- l1-contracts/test/fixtures/empty_block_1.json | 20 ------------------- l1-contracts/test/fixtures/mixed_block_0.json | 14 ------------- l1-contracts/test/fixtures/mixed_block_1.json | 20 ------------------- 3 files changed, 54 deletions(-) diff --git a/l1-contracts/test/fixtures/empty_block_1.json b/l1-contracts/test/fixtures/empty_block_1.json index 3da524961f1..17d734e428c 100644 --- a/l1-contracts/test/fixtures/empty_block_1.json +++ b/l1-contracts/test/fixtures/empty_block_1.json @@ -8,11 +8,7 @@ "l2ToL1Messages": [] }, "block": { -<<<<<<< HEAD - "archive": "0x3001938a3a14e570fcef203fed86922f26d800ba16de970dda2c79b53e00d98e", -======= "archive": "0x220677d238ea4407e12e9c0caa76bf6753ecfa88d10a80107f73f6005b5d5c3b", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "body": "0x00000000", "txsEffectsHash": "0x00df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d2493896", "decodedHeader": { @@ -25,16 +21,6 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, -<<<<<<< HEAD - "timestamp": 1712156044, - "version": 1, - "coinbase": "0xa86846f83e832f596a2575fa0fadf051f59f35ef", - "feeRecipient": "0x0392a445bb48845060833694abdc7e11273534936d5cd3309979d250900171d1" - }, - "lastArchive": { - "nextAvailableLeafIndex": 2, - "root": "0x12be3a62847b854788fa85e8f7a63c4b3b6e511c357f592c2c5d7520fc3c1dea" -======= "timestamp": 1712154039, "version": 1, "coinbase": "0x89c70d339816591366d159b0ea442faf8af62682", @@ -43,7 +29,6 @@ "lastArchive": { "nextAvailableLeafIndex": 2, "root": "0x0335fb6ef6a421a73ba4b4f124f6bf1101333cdb1ade05bc7cac1e83885a8df4" ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 }, "stateReference": { "l1ToL2MessageTree": { @@ -66,13 +51,8 @@ } } }, -<<<<<<< HEAD - "header": "0x12be3a62847b854788fa85e8f7a63c4b3b6e511c357f592c2c5d7520fc3c1dea00000002000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d6d8ca86846f83e832f596a2575fa0fadf051f59f35ef0392a445bb48845060833694abdc7e11273534936d5cd3309979d250900171d1", - "publicInputsHash": "0x004464a6d3e7c1ee5233b3e58cbd7d8e74af343f57dd5843c3ab0c3ac2aa38a5", -======= "header": "0x0335fb6ef6a421a73ba4b4f124f6bf1101333cdb1ade05bc7cac1e83885a8df400000002000000000000000000000000000000000000000000000000000000000000000100df6b1c97b9e01113fa0363d9ff71c85addc74e92b22d433b2fb082d249389600089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c0007638bb56b6dda2b64b8f76841114ac3a87a1820030e2e16772c4d294879c31864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f800000002016642d9ccd8346c403aa4c3fa451178b22534a27035cdaa6ec34ae53b29c50cb000001000bcfa3e9f1a8922ee92c6dc964d6595907c1804a86753774322b468f69d4f278000001800572c8db882674dd026b8877fbba1b700a4407da3ae9ce5fa43215a28163362b000000c00000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d65b789c70d339816591366d159b0ea442faf8af626820ff93b075ef4b1480ce807a2c3c0b9ca9b3bca8de09a33ae658acb21e8107f50", "publicInputsHash": "0x00dbd8f31a147084243681f36208343c03b5415482040df2682a6ad175c3de0c", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "numTxs": 0 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_0.json b/l1-contracts/test/fixtures/mixed_block_0.json index 0145f1b8919..f641395879b 100644 --- a/l1-contracts/test/fixtures/mixed_block_0.json +++ b/l1-contracts/test/fixtures/mixed_block_0.json @@ -34,11 +34,7 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x24a38ff73459da6e5dfe8d76e9dae1807a54405fb02b5c361ff4163d77c4123c", -======= "archive": "0x09f29521bc963745249448decb15306f61091d7d78eac78b927def53eb5d2a57", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "body": "0x0000000400400000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014100000000000000000000000000000000000000000000000000000000000001420000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000014400000000000000000000000000000000000000000000000000000000000001450000000000000000000000000000000000000000000000000000000000000146000000000000000000000000000000000000000000000000000000000000014700000000000000000000000000000000000000000000000000000000000001480000000000000000000000000000000000000000000000000000000000000149000000000000000000000000000000000000000000000000000000000000014a000000000000000000000000000000000000000000000000000000000000014b000000000000000000000000000000000000000000000000000000000000014c000000000000000000000000000000000000000000000000000000000000014d000000000000000000000000000000000000000000000000000000000000014e000000000000000000000000000000000000000000000000000000000000014f0000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000015100000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000153000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000001550000000000000000000000000000000000000000000000000000000000000156000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000159000000000000000000000000000000000000000000000000000000000000015a000000000000000000000000000000000000000000000000000000000000015b000000000000000000000000000000000000000000000000000000000000015c000000000000000000000000000000000000000000000000000000000000015d000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000015f0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000001620000000000000000000000000000000000000000000000000000000000000163000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000001650000000000000000000000000000000000000000000000000000000000000166000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000001680000000000000000000000000000000000000000000000000000000000000169000000000000000000000000000000000000000000000000000000000000016a000000000000000000000000000000000000000000000000000000000000016b000000000000000000000000000000000000000000000000000000000000016c000000000000000000000000000000000000000000000000000000000000016d000000000000000000000000000000000000000000000000000000000000016e000000000000000000000000000000000000000000000000000000000000016f0000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000017100000000000000000000000000000000000000000000000000000000000001720000000000000000000000000000000000000000000000000000000000000173000000000000000000000000000000000000000000000000000000000000017400000000000000000000000000000000000000000000000000000000000001750000000000000000000000000000000000000000000000000000000000000176000000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000001780000000000000000000000000000000000000000000000000000000000000179000000000000000000000000000000000000000000000000000000000000017a000000000000000000000000000000000000000000000000000000000000017b000000000000000000000000000000000000000000000000000000000000017c000000000000000000000000000000000000000000000000000000000000017d000000000000000000000000000000000000000000000000000000000000017e000000000000000000000000000000000000000000000000000000000000017f3f0000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f0000000000000000000000000000000000000000000000000000000000000270000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002720000000000000000000000000000000000000000000000000000000000000273000000000000000000000000000000000000000000000000000000000000027400000000000000000000000000000000000000000000000000000000000002750000000000000000000000000000000000000000000000000000000000000276000000000000000000000000000000000000000000000000000000000000027700000000000000000000000000000000000000000000000000000000000002780000000000000000000000000000000000000000000000000000000000000279000000000000000000000000000000000000000000000000000000000000027a000000000000000000000000000000000000000000000000000000000000027b000000000000000000000000000000000000000000000000000000000000027c000000000000000000000000000000000000000000000000000000000000027d000000000000000000000000000000000000000000000000000000000000027e0200000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000341200000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000541000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000542000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000544000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000545000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000054700000000000000000000000000000000000000000000000000000000000005510000000000000000000000000000000000000000000000000000000000000548000000000000000000000000000000000000000000000000000000000000055200000000000000000000000000000000000000000000000000000000000005490000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000054a0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000054b0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000054c0000000000000000000000000000000000000000000000000000000000000556000000000000000000000000000000000000000000000000000000000000054d0000000000000000000000000000000000000000000000000000000000000557000000000000000000000000000000000000000000000000000000000000054e0000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000054f00000000000000000000000000000000000000000000000000000000000005590000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055a0000000000000000000000000000000000000000000000000000000000000551000000000000000000000000000000000000000000000000000000000000055b0000000000000000000000000000000000000000000000000000000000000552000000000000000000000000000000000000000000000000000000000000055c0000000000000000000000000000000000000000000000000000000000000553000000000000000000000000000000000000000000000000000000000000055d0000000000000000000000000000000000000000000000000000000000000554000000000000000000000000000000000000000000000000000000000000055e0000000000000000000000000000000000000000000000000000000000000555000000000000000000000000000000000000000000000000000000000000055f00000000000000000000000000000000000000000000000000000000000005560000000000000000000000000000000000000000000000000000000000000560000000000000000000000000000000000000000000000000000000000000055700000000000000000000000000000000000000000000000000000000000005610000000000000000000000000000000000000000000000000000000000000558000000000000000000000000000000000000000000000000000000000000056200000000000000000000000000000000000000000000000000000000000005590000000000000000000000000000000000000000000000000000000000000563000000000000000000000000000000000000000000000000000000000000055a0000000000000000000000000000000000000000000000000000000000000564000000000000000000000000000000000000000000000000000000000000055b0000000000000000000000000000000000000000000000000000000000000565000000000000000000000000000000000000000000000000000000000000055c0000000000000000000000000000000000000000000000000000000000000566000000000000000000000000000000000000000000000000000000000000055d0000000000000000000000000000000000000000000000000000000000000567000000000000000000000000000000000000000000000000000000000000055e0000000000000000000000000000000000000000000000000000000000000568000000000000000000000000000000000000000000000000000000000000055f0000000000000000000000000000000000000000000000000000000000000569000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000001820000000000000000000000000000000000000000000000000000000000000183000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000001850000000000000000000000000000000000000000000000000000000000000186000000000000000000000000000000000000000000000000000000000000018700000000000000000000000000000000000000000000000000000000000001880000000000000000000000000000000000000000000000000000000000000189000000000000000000000000000000000000000000000000000000000000018a000000000000000000000000000000000000000000000000000000000000018b000000000000000000000000000000000000000000000000000000000000018c000000000000000000000000000000000000000000000000000000000000018d000000000000000000000000000000000000000000000000000000000000018e000000000000000000000000000000000000000000000000000000000000018f0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000019100000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000193000000000000000000000000000000000000000000000000000000000000019400000000000000000000000000000000000000000000000000000000000001950000000000000000000000000000000000000000000000000000000000000196000000000000000000000000000000000000000000000000000000000000019700000000000000000000000000000000000000000000000000000000000001980000000000000000000000000000000000000000000000000000000000000199000000000000000000000000000000000000000000000000000000000000019a000000000000000000000000000000000000000000000000000000000000019b000000000000000000000000000000000000000000000000000000000000019c000000000000000000000000000000000000000000000000000000000000019d000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000019f00000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001a100000000000000000000000000000000000000000000000000000000000001a200000000000000000000000000000000000000000000000000000000000001a300000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000001a500000000000000000000000000000000000000000000000000000000000001a600000000000000000000000000000000000000000000000000000000000001a700000000000000000000000000000000000000000000000000000000000001a800000000000000000000000000000000000000000000000000000000000001a900000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000001ab00000000000000000000000000000000000000000000000000000000000001ac00000000000000000000000000000000000000000000000000000000000001ad00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000001af00000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001b100000000000000000000000000000000000000000000000000000000000001b200000000000000000000000000000000000000000000000000000000000001b300000000000000000000000000000000000000000000000000000000000001b400000000000000000000000000000000000000000000000000000000000001b500000000000000000000000000000000000000000000000000000000000001b600000000000000000000000000000000000000000000000000000000000001b700000000000000000000000000000000000000000000000000000000000001b800000000000000000000000000000000000000000000000000000000000001b900000000000000000000000000000000000000000000000000000000000001ba00000000000000000000000000000000000000000000000000000000000001bb00000000000000000000000000000000000000000000000000000000000001bc00000000000000000000000000000000000000000000000000000000000001bd00000000000000000000000000000000000000000000000000000000000001be00000000000000000000000000000000000000000000000000000000000001bf3f0000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b700000000000000000000000000000000000000000000000000000000000002b800000000000000000000000000000000000000000000000000000000000002b900000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000002bb00000000000000000000000000000000000000000000000000000000000002bc00000000000000000000000000000000000000000000000000000000000002bd00000000000000000000000000000000000000000000000000000000000002be0200000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000381200000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000581000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000582000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000584000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000585000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005860000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000058700000000000000000000000000000000000000000000000000000000000005910000000000000000000000000000000000000000000000000000000000000588000000000000000000000000000000000000000000000000000000000000059200000000000000000000000000000000000000000000000000000000000005890000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000058a0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000058b0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000058c0000000000000000000000000000000000000000000000000000000000000596000000000000000000000000000000000000000000000000000000000000058d0000000000000000000000000000000000000000000000000000000000000597000000000000000000000000000000000000000000000000000000000000058e0000000000000000000000000000000000000000000000000000000000000598000000000000000000000000000000000000000000000000000000000000058f00000000000000000000000000000000000000000000000000000000000005990000000000000000000000000000000000000000000000000000000000000590000000000000000000000000000000000000000000000000000000000000059a0000000000000000000000000000000000000000000000000000000000000591000000000000000000000000000000000000000000000000000000000000059b0000000000000000000000000000000000000000000000000000000000000592000000000000000000000000000000000000000000000000000000000000059c0000000000000000000000000000000000000000000000000000000000000593000000000000000000000000000000000000000000000000000000000000059d0000000000000000000000000000000000000000000000000000000000000594000000000000000000000000000000000000000000000000000000000000059e0000000000000000000000000000000000000000000000000000000000000595000000000000000000000000000000000000000000000000000000000000059f000000000000000000000000000000000000000000000000000000000000059600000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000000059700000000000000000000000000000000000000000000000000000000000005a1000000000000000000000000000000000000000000000000000000000000059800000000000000000000000000000000000000000000000000000000000005a2000000000000000000000000000000000000000000000000000000000000059900000000000000000000000000000000000000000000000000000000000005a3000000000000000000000000000000000000000000000000000000000000059a00000000000000000000000000000000000000000000000000000000000005a4000000000000000000000000000000000000000000000000000000000000059b00000000000000000000000000000000000000000000000000000000000005a5000000000000000000000000000000000000000000000000000000000000059c00000000000000000000000000000000000000000000000000000000000005a6000000000000000000000000000000000000000000000000000000000000059d00000000000000000000000000000000000000000000000000000000000005a7000000000000000000000000000000000000000000000000000000000000059e00000000000000000000000000000000000000000000000000000000000005a8000000000000000000000000000000000000000000000000000000000000059f00000000000000000000000000000000000000000000000000000000000005a90000000000000000004000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c300000000000000000000000000000000000000000000000000000000000001c400000000000000000000000000000000000000000000000000000000000001c500000000000000000000000000000000000000000000000000000000000001c600000000000000000000000000000000000000000000000000000000000001c700000000000000000000000000000000000000000000000000000000000001c800000000000000000000000000000000000000000000000000000000000001c900000000000000000000000000000000000000000000000000000000000001ca00000000000000000000000000000000000000000000000000000000000001cb00000000000000000000000000000000000000000000000000000000000001cc00000000000000000000000000000000000000000000000000000000000001cd00000000000000000000000000000000000000000000000000000000000001ce00000000000000000000000000000000000000000000000000000000000001cf00000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001d100000000000000000000000000000000000000000000000000000000000001d200000000000000000000000000000000000000000000000000000000000001d300000000000000000000000000000000000000000000000000000000000001d400000000000000000000000000000000000000000000000000000000000001d500000000000000000000000000000000000000000000000000000000000001d600000000000000000000000000000000000000000000000000000000000001d700000000000000000000000000000000000000000000000000000000000001d800000000000000000000000000000000000000000000000000000000000001d900000000000000000000000000000000000000000000000000000000000001da00000000000000000000000000000000000000000000000000000000000001db00000000000000000000000000000000000000000000000000000000000001dc00000000000000000000000000000000000000000000000000000000000001dd00000000000000000000000000000000000000000000000000000000000001de00000000000000000000000000000000000000000000000000000000000001df00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001e100000000000000000000000000000000000000000000000000000000000001e200000000000000000000000000000000000000000000000000000000000001e300000000000000000000000000000000000000000000000000000000000001e400000000000000000000000000000000000000000000000000000000000001e500000000000000000000000000000000000000000000000000000000000001e600000000000000000000000000000000000000000000000000000000000001e700000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001e900000000000000000000000000000000000000000000000000000000000001ea00000000000000000000000000000000000000000000000000000000000001eb00000000000000000000000000000000000000000000000000000000000001ec00000000000000000000000000000000000000000000000000000000000001ed00000000000000000000000000000000000000000000000000000000000001ee00000000000000000000000000000000000000000000000000000000000001ef00000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000001f100000000000000000000000000000000000000000000000000000000000001f200000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f500000000000000000000000000000000000000000000000000000000000001f600000000000000000000000000000000000000000000000000000000000001f700000000000000000000000000000000000000000000000000000000000001f800000000000000000000000000000000000000000000000000000000000001f900000000000000000000000000000000000000000000000000000000000001fa00000000000000000000000000000000000000000000000000000000000001fb00000000000000000000000000000000000000000000000000000000000001fc00000000000000000000000000000000000000000000000000000000000001fd00000000000000000000000000000000000000000000000000000000000001fe00000000000000000000000000000000000000000000000000000000000001ff3f00000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f700000000000000000000000000000000000000000000000000000000000002f800000000000000000000000000000000000000000000000000000000000002f900000000000000000000000000000000000000000000000000000000000002fa00000000000000000000000000000000000000000000000000000000000002fb00000000000000000000000000000000000000000000000000000000000002fc00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000002fe0200000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c12000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005c100000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005c200000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005c300000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005c400000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005c500000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005c600000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005c700000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005c800000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005c900000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005ca00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005cb00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005cc00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005cd00000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005ce00000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005cf00000000000000000000000000000000000000000000000000000000000005d900000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005da00000000000000000000000000000000000000000000000000000000000005d100000000000000000000000000000000000000000000000000000000000005db00000000000000000000000000000000000000000000000000000000000005d200000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000005d300000000000000000000000000000000000000000000000000000000000005dd00000000000000000000000000000000000000000000000000000000000005d400000000000000000000000000000000000000000000000000000000000005de00000000000000000000000000000000000000000000000000000000000005d500000000000000000000000000000000000000000000000000000000000005df00000000000000000000000000000000000000000000000000000000000005d600000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000005d700000000000000000000000000000000000000000000000000000000000005e100000000000000000000000000000000000000000000000000000000000005d800000000000000000000000000000000000000000000000000000000000005e200000000000000000000000000000000000000000000000000000000000005d900000000000000000000000000000000000000000000000000000000000005e300000000000000000000000000000000000000000000000000000000000005da00000000000000000000000000000000000000000000000000000000000005e400000000000000000000000000000000000000000000000000000000000005db00000000000000000000000000000000000000000000000000000000000005e500000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000005e600000000000000000000000000000000000000000000000000000000000005dd00000000000000000000000000000000000000000000000000000000000005e700000000000000000000000000000000000000000000000000000000000005de00000000000000000000000000000000000000000000000000000000000005e800000000000000000000000000000000000000000000000000000000000005df00000000000000000000000000000000000000000000000000000000000005e9000000000000000000400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000203000000000000000000000000000000000000000000000000000000000000020400000000000000000000000000000000000000000000000000000000000002050000000000000000000000000000000000000000000000000000000000000206000000000000000000000000000000000000000000000000000000000000020700000000000000000000000000000000000000000000000000000000000002080000000000000000000000000000000000000000000000000000000000000209000000000000000000000000000000000000000000000000000000000000020a000000000000000000000000000000000000000000000000000000000000020b000000000000000000000000000000000000000000000000000000000000020c000000000000000000000000000000000000000000000000000000000000020d000000000000000000000000000000000000000000000000000000000000020e000000000000000000000000000000000000000000000000000000000000020f0000000000000000000000000000000000000000000000000000000000000210000000000000000000000000000000000000000000000000000000000000021100000000000000000000000000000000000000000000000000000000000002120000000000000000000000000000000000000000000000000000000000000213000000000000000000000000000000000000000000000000000000000000021400000000000000000000000000000000000000000000000000000000000002150000000000000000000000000000000000000000000000000000000000000216000000000000000000000000000000000000000000000000000000000000021700000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000219000000000000000000000000000000000000000000000000000000000000021a000000000000000000000000000000000000000000000000000000000000021b000000000000000000000000000000000000000000000000000000000000021c000000000000000000000000000000000000000000000000000000000000021d000000000000000000000000000000000000000000000000000000000000021e000000000000000000000000000000000000000000000000000000000000021f0000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000022100000000000000000000000000000000000000000000000000000000000002220000000000000000000000000000000000000000000000000000000000000223000000000000000000000000000000000000000000000000000000000000022400000000000000000000000000000000000000000000000000000000000002250000000000000000000000000000000000000000000000000000000000000226000000000000000000000000000000000000000000000000000000000000022700000000000000000000000000000000000000000000000000000000000002280000000000000000000000000000000000000000000000000000000000000229000000000000000000000000000000000000000000000000000000000000022a000000000000000000000000000000000000000000000000000000000000022b000000000000000000000000000000000000000000000000000000000000022c000000000000000000000000000000000000000000000000000000000000022d000000000000000000000000000000000000000000000000000000000000022e000000000000000000000000000000000000000000000000000000000000022f0000000000000000000000000000000000000000000000000000000000000230000000000000000000000000000000000000000000000000000000000000023100000000000000000000000000000000000000000000000000000000000002320000000000000000000000000000000000000000000000000000000000000233000000000000000000000000000000000000000000000000000000000000023400000000000000000000000000000000000000000000000000000000000002350000000000000000000000000000000000000000000000000000000000000236000000000000000000000000000000000000000000000000000000000000023700000000000000000000000000000000000000000000000000000000000002380000000000000000000000000000000000000000000000000000000000000239000000000000000000000000000000000000000000000000000000000000023a000000000000000000000000000000000000000000000000000000000000023b000000000000000000000000000000000000000000000000000000000000023c000000000000000000000000000000000000000000000000000000000000023d000000000000000000000000000000000000000000000000000000000000023e000000000000000000000000000000000000000000000000000000000000023f3f0000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f0000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000033100000000000000000000000000000000000000000000000000000000000003320000000000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000000033400000000000000000000000000000000000000000000000000000000000003350000000000000000000000000000000000000000000000000000000000000336000000000000000000000000000000000000000000000000000000000000033700000000000000000000000000000000000000000000000000000000000003380000000000000000000000000000000000000000000000000000000000000339000000000000000000000000000000000000000000000000000000000000033a000000000000000000000000000000000000000000000000000000000000033b000000000000000000000000000000000000000000000000000000000000033c000000000000000000000000000000000000000000000000000000000000033d000000000000000000000000000000000000000000000000000000000000033e0200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000401200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000601000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000602000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000603000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000604000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006060000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000060700000000000000000000000000000000000000000000000000000000000006110000000000000000000000000000000000000000000000000000000000000608000000000000000000000000000000000000000000000000000000000000061200000000000000000000000000000000000000000000000000000000000006090000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000060a0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000060b0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000060c0000000000000000000000000000000000000000000000000000000000000616000000000000000000000000000000000000000000000000000000000000060d0000000000000000000000000000000000000000000000000000000000000617000000000000000000000000000000000000000000000000000000000000060e0000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000060f00000000000000000000000000000000000000000000000000000000000006190000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000061a0000000000000000000000000000000000000000000000000000000000000611000000000000000000000000000000000000000000000000000000000000061b0000000000000000000000000000000000000000000000000000000000000612000000000000000000000000000000000000000000000000000000000000061c0000000000000000000000000000000000000000000000000000000000000613000000000000000000000000000000000000000000000000000000000000061d0000000000000000000000000000000000000000000000000000000000000614000000000000000000000000000000000000000000000000000000000000061e0000000000000000000000000000000000000000000000000000000000000615000000000000000000000000000000000000000000000000000000000000061f00000000000000000000000000000000000000000000000000000000000006160000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000061700000000000000000000000000000000000000000000000000000000000006210000000000000000000000000000000000000000000000000000000000000618000000000000000000000000000000000000000000000000000000000000062200000000000000000000000000000000000000000000000000000000000006190000000000000000000000000000000000000000000000000000000000000623000000000000000000000000000000000000000000000000000000000000061a0000000000000000000000000000000000000000000000000000000000000624000000000000000000000000000000000000000000000000000000000000061b0000000000000000000000000000000000000000000000000000000000000625000000000000000000000000000000000000000000000000000000000000061c0000000000000000000000000000000000000000000000000000000000000626000000000000000000000000000000000000000000000000000000000000061d0000000000000000000000000000000000000000000000000000000000000627000000000000000000000000000000000000000000000000000000000000061e0000000000000000000000000000000000000000000000000000000000000628000000000000000000000000000000000000000000000000000000000000061f00000000000000000000000000000000000000000000000000000000000006290000000000000000", "txsEffectsHash": "0x0097a976d5a0b2aa3ea4f9a657d4a8534ed793f49287da441c5d301adfd10d2a", "decodedHeader": { @@ -53,13 +49,8 @@ "chainId": 31337, "timestamp": 0, "version": 1, -<<<<<<< HEAD - "coinbase": "0xae6d3af458ef9902e5f934279af0ed5dc579aabd", - "feeRecipient": "0x23cce787fffdf2216853b5b6120b92cd1e969cef605eb9ce871741ae3099838f" -======= "coinbase": "0xaf5ce49368d2524d87ff35287adc41f92f95aec2", "feeRecipient": "0x0ae585d980bbc19fc5ebf8e25f3a72c71d81ce9066aef0c7d5cf956a23a3a835" ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 }, "lastArchive": { "nextAvailableLeafIndex": 1, @@ -86,13 +77,8 @@ } } }, -<<<<<<< HEAD - "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020097a976d5a0b2aa3ea4f9a657d4a8534ed793f49287da441c5d301adfd10d2a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000100d944282e11bdcfa5e8f2b55fe80db4c586087bfc10e0bbba5724d30b8c15e2e0000010001c16141039343d4d403501e66deecff1b024bd76794820a43dc3424087813a20000018028d06967b6a4a1cc3c799fb6f008b63a2ffecd5034b81aa10792a6659f8aca22000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ae6d3af458ef9902e5f934279af0ed5dc579aabd23cce787fffdf2216853b5b6120b92cd1e969cef605eb9ce871741ae3099838f", - "publicInputsHash": "0x009b5b917c6499adc70cd8a7d4dab3beedecbb29055f11160e31b679c287eb71", -======= "header": "0x1e3523d3bd50ae6204e1ec2ee1bdf8af4c6217ec80900052d2cf4259379dd1300000000100000000000000000000000000000000000000000000000000000000000000020097a976d5a0b2aa3ea4f9a657d4a8534ed793f49287da441c5d301adfd10d2a00089a9d421a82c4a25f7acbebe69e638d5b064fa8a60e018793dcb0be53752c00198704eb051da0e43ff1a9b3285f168389ba3dd93f8ec1f75f6cafcadbaeb61864fcdaa80ff2719154fa7c8a9050662972707168d69eac9db6fd3110829f80000000100d944282e11bdcfa5e8f2b55fe80db4c586087bfc10e0bbba5724d30b8c15e2e0000010001c16141039343d4d403501e66deecff1b024bd76794820a43dc3424087813a20000018028d06967b6a4a1cc3c799fb6f008b63a2ffecd5034b81aa10792a6659f8aca22000000c00000000000000000000000000000000000000000000000000000000000007a69000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000af5ce49368d2524d87ff35287adc41f92f95aec20ae585d980bbc19fc5ebf8e25f3a72c71d81ce9066aef0c7d5cf956a23a3a835", "publicInputsHash": "0x00eb799633d2ef96d5d6006cc130dfd504c5525a265d2eef8db0d9f36eee4415", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "numTxs": 4 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_block_1.json b/l1-contracts/test/fixtures/mixed_block_1.json index bcf31fddc3e..4478ba73f41 100644 --- a/l1-contracts/test/fixtures/mixed_block_1.json +++ b/l1-contracts/test/fixtures/mixed_block_1.json @@ -34,11 +34,7 @@ ] }, "block": { -<<<<<<< HEAD - "archive": "0x0300a43b8575525d1fa83ad1e269e7266fb8a46a29726e6f0d38433b7c00b90e", -======= "archive": "0x1ca3119ec11c5af45681398e50023edb8a3cb979a42c58ea89f43d81a31b9273", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "body": "0x0000000400400000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000024100000000000000000000000000000000000000000000000000000000000002420000000000000000000000000000000000000000000000000000000000000243000000000000000000000000000000000000000000000000000000000000024400000000000000000000000000000000000000000000000000000000000002450000000000000000000000000000000000000000000000000000000000000246000000000000000000000000000000000000000000000000000000000000024700000000000000000000000000000000000000000000000000000000000002480000000000000000000000000000000000000000000000000000000000000249000000000000000000000000000000000000000000000000000000000000024a000000000000000000000000000000000000000000000000000000000000024b000000000000000000000000000000000000000000000000000000000000024c000000000000000000000000000000000000000000000000000000000000024d000000000000000000000000000000000000000000000000000000000000024e000000000000000000000000000000000000000000000000000000000000024f0000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000025100000000000000000000000000000000000000000000000000000000000002520000000000000000000000000000000000000000000000000000000000000253000000000000000000000000000000000000000000000000000000000000025400000000000000000000000000000000000000000000000000000000000002550000000000000000000000000000000000000000000000000000000000000256000000000000000000000000000000000000000000000000000000000000025700000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000000000000000000000259000000000000000000000000000000000000000000000000000000000000025a000000000000000000000000000000000000000000000000000000000000025b000000000000000000000000000000000000000000000000000000000000025c000000000000000000000000000000000000000000000000000000000000025d000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000000025f0000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000026100000000000000000000000000000000000000000000000000000000000002620000000000000000000000000000000000000000000000000000000000000263000000000000000000000000000000000000000000000000000000000000026400000000000000000000000000000000000000000000000000000000000002650000000000000000000000000000000000000000000000000000000000000266000000000000000000000000000000000000000000000000000000000000026700000000000000000000000000000000000000000000000000000000000002680000000000000000000000000000000000000000000000000000000000000269000000000000000000000000000000000000000000000000000000000000026a000000000000000000000000000000000000000000000000000000000000026b000000000000000000000000000000000000000000000000000000000000026c000000000000000000000000000000000000000000000000000000000000026d000000000000000000000000000000000000000000000000000000000000026e000000000000000000000000000000000000000000000000000000000000026f0000000000000000000000000000000000000000000000000000000000000270000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002720000000000000000000000000000000000000000000000000000000000000273000000000000000000000000000000000000000000000000000000000000027400000000000000000000000000000000000000000000000000000000000002750000000000000000000000000000000000000000000000000000000000000276000000000000000000000000000000000000000000000000000000000000027700000000000000000000000000000000000000000000000000000000000002780000000000000000000000000000000000000000000000000000000000000279000000000000000000000000000000000000000000000000000000000000027a000000000000000000000000000000000000000000000000000000000000027b000000000000000000000000000000000000000000000000000000000000027c000000000000000000000000000000000000000000000000000000000000027d000000000000000000000000000000000000000000000000000000000000027e000000000000000000000000000000000000000000000000000000000000027f3f0000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000034100000000000000000000000000000000000000000000000000000000000003420000000000000000000000000000000000000000000000000000000000000343000000000000000000000000000000000000000000000000000000000000034400000000000000000000000000000000000000000000000000000000000003450000000000000000000000000000000000000000000000000000000000000346000000000000000000000000000000000000000000000000000000000000034700000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000349000000000000000000000000000000000000000000000000000000000000034a000000000000000000000000000000000000000000000000000000000000034b000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000000000000000000000000000000000000000034d000000000000000000000000000000000000000000000000000000000000034e000000000000000000000000000000000000000000000000000000000000034f0000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000035100000000000000000000000000000000000000000000000000000000000003520000000000000000000000000000000000000000000000000000000000000353000000000000000000000000000000000000000000000000000000000000035400000000000000000000000000000000000000000000000000000000000003550000000000000000000000000000000000000000000000000000000000000356000000000000000000000000000000000000000000000000000000000000035700000000000000000000000000000000000000000000000000000000000003580000000000000000000000000000000000000000000000000000000000000359000000000000000000000000000000000000000000000000000000000000035a000000000000000000000000000000000000000000000000000000000000035b000000000000000000000000000000000000000000000000000000000000035c000000000000000000000000000000000000000000000000000000000000035d000000000000000000000000000000000000000000000000000000000000035e000000000000000000000000000000000000000000000000000000000000035f0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000036100000000000000000000000000000000000000000000000000000000000003620000000000000000000000000000000000000000000000000000000000000363000000000000000000000000000000000000000000000000000000000000036400000000000000000000000000000000000000000000000000000000000003650000000000000000000000000000000000000000000000000000000000000366000000000000000000000000000000000000000000000000000000000000036700000000000000000000000000000000000000000000000000000000000003680000000000000000000000000000000000000000000000000000000000000369000000000000000000000000000000000000000000000000000000000000036a000000000000000000000000000000000000000000000000000000000000036b000000000000000000000000000000000000000000000000000000000000036c000000000000000000000000000000000000000000000000000000000000036d000000000000000000000000000000000000000000000000000000000000036e000000000000000000000000000000000000000000000000000000000000036f0000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000037100000000000000000000000000000000000000000000000000000000000003720000000000000000000000000000000000000000000000000000000000000373000000000000000000000000000000000000000000000000000000000000037400000000000000000000000000000000000000000000000000000000000003750000000000000000000000000000000000000000000000000000000000000376000000000000000000000000000000000000000000000000000000000000037700000000000000000000000000000000000000000000000000000000000003780000000000000000000000000000000000000000000000000000000000000379000000000000000000000000000000000000000000000000000000000000037a000000000000000000000000000000000000000000000000000000000000037b000000000000000000000000000000000000000000000000000000000000037c000000000000000000000000000000000000000000000000000000000000037d000000000000000000000000000000000000000000000000000000000000037e0200000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000441200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000641000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000642000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000643000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000644000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000645000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006460000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000064700000000000000000000000000000000000000000000000000000000000006510000000000000000000000000000000000000000000000000000000000000648000000000000000000000000000000000000000000000000000000000000065200000000000000000000000000000000000000000000000000000000000006490000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000064a0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000064b0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000064c0000000000000000000000000000000000000000000000000000000000000656000000000000000000000000000000000000000000000000000000000000064d0000000000000000000000000000000000000000000000000000000000000657000000000000000000000000000000000000000000000000000000000000064e0000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000064f00000000000000000000000000000000000000000000000000000000000006590000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000065a0000000000000000000000000000000000000000000000000000000000000651000000000000000000000000000000000000000000000000000000000000065b0000000000000000000000000000000000000000000000000000000000000652000000000000000000000000000000000000000000000000000000000000065c0000000000000000000000000000000000000000000000000000000000000653000000000000000000000000000000000000000000000000000000000000065d0000000000000000000000000000000000000000000000000000000000000654000000000000000000000000000000000000000000000000000000000000065e0000000000000000000000000000000000000000000000000000000000000655000000000000000000000000000000000000000000000000000000000000065f00000000000000000000000000000000000000000000000000000000000006560000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000065700000000000000000000000000000000000000000000000000000000000006610000000000000000000000000000000000000000000000000000000000000658000000000000000000000000000000000000000000000000000000000000066200000000000000000000000000000000000000000000000000000000000006590000000000000000000000000000000000000000000000000000000000000663000000000000000000000000000000000000000000000000000000000000065a0000000000000000000000000000000000000000000000000000000000000664000000000000000000000000000000000000000000000000000000000000065b0000000000000000000000000000000000000000000000000000000000000665000000000000000000000000000000000000000000000000000000000000065c0000000000000000000000000000000000000000000000000000000000000666000000000000000000000000000000000000000000000000000000000000065d0000000000000000000000000000000000000000000000000000000000000667000000000000000000000000000000000000000000000000000000000000065e0000000000000000000000000000000000000000000000000000000000000668000000000000000000000000000000000000000000000000000000000000065f0000000000000000000000000000000000000000000000000000000000000669000000000000000000400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000028100000000000000000000000000000000000000000000000000000000000002820000000000000000000000000000000000000000000000000000000000000283000000000000000000000000000000000000000000000000000000000000028400000000000000000000000000000000000000000000000000000000000002850000000000000000000000000000000000000000000000000000000000000286000000000000000000000000000000000000000000000000000000000000028700000000000000000000000000000000000000000000000000000000000002880000000000000000000000000000000000000000000000000000000000000289000000000000000000000000000000000000000000000000000000000000028a000000000000000000000000000000000000000000000000000000000000028b000000000000000000000000000000000000000000000000000000000000028c000000000000000000000000000000000000000000000000000000000000028d000000000000000000000000000000000000000000000000000000000000028e000000000000000000000000000000000000000000000000000000000000028f0000000000000000000000000000000000000000000000000000000000000290000000000000000000000000000000000000000000000000000000000000029100000000000000000000000000000000000000000000000000000000000002920000000000000000000000000000000000000000000000000000000000000293000000000000000000000000000000000000000000000000000000000000029400000000000000000000000000000000000000000000000000000000000002950000000000000000000000000000000000000000000000000000000000000296000000000000000000000000000000000000000000000000000000000000029700000000000000000000000000000000000000000000000000000000000002980000000000000000000000000000000000000000000000000000000000000299000000000000000000000000000000000000000000000000000000000000029a000000000000000000000000000000000000000000000000000000000000029b000000000000000000000000000000000000000000000000000000000000029c000000000000000000000000000000000000000000000000000000000000029d000000000000000000000000000000000000000000000000000000000000029e000000000000000000000000000000000000000000000000000000000000029f00000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002a100000000000000000000000000000000000000000000000000000000000002a200000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000000000000002a400000000000000000000000000000000000000000000000000000000000002a500000000000000000000000000000000000000000000000000000000000002a600000000000000000000000000000000000000000000000000000000000002a700000000000000000000000000000000000000000000000000000000000002a800000000000000000000000000000000000000000000000000000000000002a900000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000002ab00000000000000000000000000000000000000000000000000000000000002ac00000000000000000000000000000000000000000000000000000000000002ad00000000000000000000000000000000000000000000000000000000000002ae00000000000000000000000000000000000000000000000000000000000002af00000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002b100000000000000000000000000000000000000000000000000000000000002b200000000000000000000000000000000000000000000000000000000000002b300000000000000000000000000000000000000000000000000000000000002b400000000000000000000000000000000000000000000000000000000000002b500000000000000000000000000000000000000000000000000000000000002b600000000000000000000000000000000000000000000000000000000000002b700000000000000000000000000000000000000000000000000000000000002b800000000000000000000000000000000000000000000000000000000000002b900000000000000000000000000000000000000000000000000000000000002ba00000000000000000000000000000000000000000000000000000000000002bb00000000000000000000000000000000000000000000000000000000000002bc00000000000000000000000000000000000000000000000000000000000002bd00000000000000000000000000000000000000000000000000000000000002be00000000000000000000000000000000000000000000000000000000000002bf3f0000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038100000000000000000000000000000000000000000000000000000000000003820000000000000000000000000000000000000000000000000000000000000383000000000000000000000000000000000000000000000000000000000000038400000000000000000000000000000000000000000000000000000000000003850000000000000000000000000000000000000000000000000000000000000386000000000000000000000000000000000000000000000000000000000000038700000000000000000000000000000000000000000000000000000000000003880000000000000000000000000000000000000000000000000000000000000389000000000000000000000000000000000000000000000000000000000000038a000000000000000000000000000000000000000000000000000000000000038b000000000000000000000000000000000000000000000000000000000000038c000000000000000000000000000000000000000000000000000000000000038d000000000000000000000000000000000000000000000000000000000000038e000000000000000000000000000000000000000000000000000000000000038f0000000000000000000000000000000000000000000000000000000000000390000000000000000000000000000000000000000000000000000000000000039100000000000000000000000000000000000000000000000000000000000003920000000000000000000000000000000000000000000000000000000000000393000000000000000000000000000000000000000000000000000000000000039400000000000000000000000000000000000000000000000000000000000003950000000000000000000000000000000000000000000000000000000000000396000000000000000000000000000000000000000000000000000000000000039700000000000000000000000000000000000000000000000000000000000003980000000000000000000000000000000000000000000000000000000000000399000000000000000000000000000000000000000000000000000000000000039a000000000000000000000000000000000000000000000000000000000000039b000000000000000000000000000000000000000000000000000000000000039c000000000000000000000000000000000000000000000000000000000000039d000000000000000000000000000000000000000000000000000000000000039e000000000000000000000000000000000000000000000000000000000000039f00000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003a100000000000000000000000000000000000000000000000000000000000003a200000000000000000000000000000000000000000000000000000000000003a300000000000000000000000000000000000000000000000000000000000003a400000000000000000000000000000000000000000000000000000000000003a500000000000000000000000000000000000000000000000000000000000003a600000000000000000000000000000000000000000000000000000000000003a700000000000000000000000000000000000000000000000000000000000003a800000000000000000000000000000000000000000000000000000000000003a900000000000000000000000000000000000000000000000000000000000003aa00000000000000000000000000000000000000000000000000000000000003ab00000000000000000000000000000000000000000000000000000000000003ac00000000000000000000000000000000000000000000000000000000000003ad00000000000000000000000000000000000000000000000000000000000003ae00000000000000000000000000000000000000000000000000000000000003af00000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003b100000000000000000000000000000000000000000000000000000000000003b200000000000000000000000000000000000000000000000000000000000003b300000000000000000000000000000000000000000000000000000000000003b400000000000000000000000000000000000000000000000000000000000003b500000000000000000000000000000000000000000000000000000000000003b600000000000000000000000000000000000000000000000000000000000003b700000000000000000000000000000000000000000000000000000000000003b800000000000000000000000000000000000000000000000000000000000003b900000000000000000000000000000000000000000000000000000000000003ba00000000000000000000000000000000000000000000000000000000000003bb00000000000000000000000000000000000000000000000000000000000003bc00000000000000000000000000000000000000000000000000000000000003bd00000000000000000000000000000000000000000000000000000000000003be0200000000000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000481200000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000681000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000682000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000683000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000684000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000685000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006860000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000068700000000000000000000000000000000000000000000000000000000000006910000000000000000000000000000000000000000000000000000000000000688000000000000000000000000000000000000000000000000000000000000069200000000000000000000000000000000000000000000000000000000000006890000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000068a0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000068b0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000068c0000000000000000000000000000000000000000000000000000000000000696000000000000000000000000000000000000000000000000000000000000068d0000000000000000000000000000000000000000000000000000000000000697000000000000000000000000000000000000000000000000000000000000068e0000000000000000000000000000000000000000000000000000000000000698000000000000000000000000000000000000000000000000000000000000068f00000000000000000000000000000000000000000000000000000000000006990000000000000000000000000000000000000000000000000000000000000690000000000000000000000000000000000000000000000000000000000000069a0000000000000000000000000000000000000000000000000000000000000691000000000000000000000000000000000000000000000000000000000000069b0000000000000000000000000000000000000000000000000000000000000692000000000000000000000000000000000000000000000000000000000000069c0000000000000000000000000000000000000000000000000000000000000693000000000000000000000000000000000000000000000000000000000000069d0000000000000000000000000000000000000000000000000000000000000694000000000000000000000000000000000000000000000000000000000000069e0000000000000000000000000000000000000000000000000000000000000695000000000000000000000000000000000000000000000000000000000000069f000000000000000000000000000000000000000000000000000000000000069600000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000000000000000000000000000000000000000069700000000000000000000000000000000000000000000000000000000000006a1000000000000000000000000000000000000000000000000000000000000069800000000000000000000000000000000000000000000000000000000000006a2000000000000000000000000000000000000000000000000000000000000069900000000000000000000000000000000000000000000000000000000000006a3000000000000000000000000000000000000000000000000000000000000069a00000000000000000000000000000000000000000000000000000000000006a4000000000000000000000000000000000000000000000000000000000000069b00000000000000000000000000000000000000000000000000000000000006a5000000000000000000000000000000000000000000000000000000000000069c00000000000000000000000000000000000000000000000000000000000006a6000000000000000000000000000000000000000000000000000000000000069d00000000000000000000000000000000000000000000000000000000000006a7000000000000000000000000000000000000000000000000000000000000069e00000000000000000000000000000000000000000000000000000000000006a8000000000000000000000000000000000000000000000000000000000000069f00000000000000000000000000000000000000000000000000000000000006a90000000000000000004000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002c100000000000000000000000000000000000000000000000000000000000002c200000000000000000000000000000000000000000000000000000000000002c300000000000000000000000000000000000000000000000000000000000002c400000000000000000000000000000000000000000000000000000000000002c500000000000000000000000000000000000000000000000000000000000002c600000000000000000000000000000000000000000000000000000000000002c700000000000000000000000000000000000000000000000000000000000002c800000000000000000000000000000000000000000000000000000000000002c900000000000000000000000000000000000000000000000000000000000002ca00000000000000000000000000000000000000000000000000000000000002cb00000000000000000000000000000000000000000000000000000000000002cc00000000000000000000000000000000000000000000000000000000000002cd00000000000000000000000000000000000000000000000000000000000002ce00000000000000000000000000000000000000000000000000000000000002cf00000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002d100000000000000000000000000000000000000000000000000000000000002d200000000000000000000000000000000000000000000000000000000000002d300000000000000000000000000000000000000000000000000000000000002d400000000000000000000000000000000000000000000000000000000000002d500000000000000000000000000000000000000000000000000000000000002d600000000000000000000000000000000000000000000000000000000000002d700000000000000000000000000000000000000000000000000000000000002d800000000000000000000000000000000000000000000000000000000000002d900000000000000000000000000000000000000000000000000000000000002da00000000000000000000000000000000000000000000000000000000000002db00000000000000000000000000000000000000000000000000000000000002dc00000000000000000000000000000000000000000000000000000000000002dd00000000000000000000000000000000000000000000000000000000000002de00000000000000000000000000000000000000000000000000000000000002df00000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002e100000000000000000000000000000000000000000000000000000000000002e200000000000000000000000000000000000000000000000000000000000002e300000000000000000000000000000000000000000000000000000000000002e400000000000000000000000000000000000000000000000000000000000002e500000000000000000000000000000000000000000000000000000000000002e600000000000000000000000000000000000000000000000000000000000002e700000000000000000000000000000000000000000000000000000000000002e800000000000000000000000000000000000000000000000000000000000002e900000000000000000000000000000000000000000000000000000000000002ea00000000000000000000000000000000000000000000000000000000000002eb00000000000000000000000000000000000000000000000000000000000002ec00000000000000000000000000000000000000000000000000000000000002ed00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000002ef00000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000002f100000000000000000000000000000000000000000000000000000000000002f200000000000000000000000000000000000000000000000000000000000002f300000000000000000000000000000000000000000000000000000000000002f400000000000000000000000000000000000000000000000000000000000002f500000000000000000000000000000000000000000000000000000000000002f600000000000000000000000000000000000000000000000000000000000002f700000000000000000000000000000000000000000000000000000000000002f800000000000000000000000000000000000000000000000000000000000002f900000000000000000000000000000000000000000000000000000000000002fa00000000000000000000000000000000000000000000000000000000000002fb00000000000000000000000000000000000000000000000000000000000002fc00000000000000000000000000000000000000000000000000000000000002fd00000000000000000000000000000000000000000000000000000000000002fe00000000000000000000000000000000000000000000000000000000000002ff3f00000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003c100000000000000000000000000000000000000000000000000000000000003c200000000000000000000000000000000000000000000000000000000000003c300000000000000000000000000000000000000000000000000000000000003c400000000000000000000000000000000000000000000000000000000000003c500000000000000000000000000000000000000000000000000000000000003c600000000000000000000000000000000000000000000000000000000000003c700000000000000000000000000000000000000000000000000000000000003c800000000000000000000000000000000000000000000000000000000000003c900000000000000000000000000000000000000000000000000000000000003ca00000000000000000000000000000000000000000000000000000000000003cb00000000000000000000000000000000000000000000000000000000000003cc00000000000000000000000000000000000000000000000000000000000003cd00000000000000000000000000000000000000000000000000000000000003ce00000000000000000000000000000000000000000000000000000000000003cf00000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003d100000000000000000000000000000000000000000000000000000000000003d200000000000000000000000000000000000000000000000000000000000003d300000000000000000000000000000000000000000000000000000000000003d400000000000000000000000000000000000000000000000000000000000003d500000000000000000000000000000000000000000000000000000000000003d600000000000000000000000000000000000000000000000000000000000003d700000000000000000000000000000000000000000000000000000000000003d800000000000000000000000000000000000000000000000000000000000003d900000000000000000000000000000000000000000000000000000000000003da00000000000000000000000000000000000000000000000000000000000003db00000000000000000000000000000000000000000000000000000000000003dc00000000000000000000000000000000000000000000000000000000000003dd00000000000000000000000000000000000000000000000000000000000003de00000000000000000000000000000000000000000000000000000000000003df00000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003e100000000000000000000000000000000000000000000000000000000000003e200000000000000000000000000000000000000000000000000000000000003e300000000000000000000000000000000000000000000000000000000000003e400000000000000000000000000000000000000000000000000000000000003e500000000000000000000000000000000000000000000000000000000000003e600000000000000000000000000000000000000000000000000000000000003e700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000003ea00000000000000000000000000000000000000000000000000000000000003eb00000000000000000000000000000000000000000000000000000000000003ec00000000000000000000000000000000000000000000000000000000000003ed00000000000000000000000000000000000000000000000000000000000003ee00000000000000000000000000000000000000000000000000000000000003ef00000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000000000000000000000000000000000003f100000000000000000000000000000000000000000000000000000000000003f200000000000000000000000000000000000000000000000000000000000003f300000000000000000000000000000000000000000000000000000000000003f400000000000000000000000000000000000000000000000000000000000003f500000000000000000000000000000000000000000000000000000000000003f600000000000000000000000000000000000000000000000000000000000003f700000000000000000000000000000000000000000000000000000000000003f800000000000000000000000000000000000000000000000000000000000003f900000000000000000000000000000000000000000000000000000000000003fa00000000000000000000000000000000000000000000000000000000000003fb00000000000000000000000000000000000000000000000000000000000003fc00000000000000000000000000000000000000000000000000000000000003fd00000000000000000000000000000000000000000000000000000000000003fe0200000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004c12000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006c100000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006c200000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006c300000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006c400000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006c500000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006c600000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006c700000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006c800000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006c900000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006ca00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006cb00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006cc00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006cd00000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006ce00000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006cf00000000000000000000000000000000000000000000000000000000000006d900000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006da00000000000000000000000000000000000000000000000000000000000006d100000000000000000000000000000000000000000000000000000000000006db00000000000000000000000000000000000000000000000000000000000006d200000000000000000000000000000000000000000000000000000000000006dc00000000000000000000000000000000000000000000000000000000000006d300000000000000000000000000000000000000000000000000000000000006dd00000000000000000000000000000000000000000000000000000000000006d400000000000000000000000000000000000000000000000000000000000006de00000000000000000000000000000000000000000000000000000000000006d500000000000000000000000000000000000000000000000000000000000006df00000000000000000000000000000000000000000000000000000000000006d600000000000000000000000000000000000000000000000000000000000006e000000000000000000000000000000000000000000000000000000000000006d700000000000000000000000000000000000000000000000000000000000006e100000000000000000000000000000000000000000000000000000000000006d800000000000000000000000000000000000000000000000000000000000006e200000000000000000000000000000000000000000000000000000000000006d900000000000000000000000000000000000000000000000000000000000006e300000000000000000000000000000000000000000000000000000000000006da00000000000000000000000000000000000000000000000000000000000006e400000000000000000000000000000000000000000000000000000000000006db00000000000000000000000000000000000000000000000000000000000006e500000000000000000000000000000000000000000000000000000000000006dc00000000000000000000000000000000000000000000000000000000000006e600000000000000000000000000000000000000000000000000000000000006dd00000000000000000000000000000000000000000000000000000000000006e700000000000000000000000000000000000000000000000000000000000006de00000000000000000000000000000000000000000000000000000000000006e800000000000000000000000000000000000000000000000000000000000006df00000000000000000000000000000000000000000000000000000000000006e9000000000000000000400000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030100000000000000000000000000000000000000000000000000000000000003020000000000000000000000000000000000000000000000000000000000000303000000000000000000000000000000000000000000000000000000000000030400000000000000000000000000000000000000000000000000000000000003050000000000000000000000000000000000000000000000000000000000000306000000000000000000000000000000000000000000000000000000000000030700000000000000000000000000000000000000000000000000000000000003080000000000000000000000000000000000000000000000000000000000000309000000000000000000000000000000000000000000000000000000000000030a000000000000000000000000000000000000000000000000000000000000030b000000000000000000000000000000000000000000000000000000000000030c000000000000000000000000000000000000000000000000000000000000030d000000000000000000000000000000000000000000000000000000000000030e000000000000000000000000000000000000000000000000000000000000030f0000000000000000000000000000000000000000000000000000000000000310000000000000000000000000000000000000000000000000000000000000031100000000000000000000000000000000000000000000000000000000000003120000000000000000000000000000000000000000000000000000000000000313000000000000000000000000000000000000000000000000000000000000031400000000000000000000000000000000000000000000000000000000000003150000000000000000000000000000000000000000000000000000000000000316000000000000000000000000000000000000000000000000000000000000031700000000000000000000000000000000000000000000000000000000000003180000000000000000000000000000000000000000000000000000000000000319000000000000000000000000000000000000000000000000000000000000031a000000000000000000000000000000000000000000000000000000000000031b000000000000000000000000000000000000000000000000000000000000031c000000000000000000000000000000000000000000000000000000000000031d000000000000000000000000000000000000000000000000000000000000031e000000000000000000000000000000000000000000000000000000000000031f0000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032100000000000000000000000000000000000000000000000000000000000003220000000000000000000000000000000000000000000000000000000000000323000000000000000000000000000000000000000000000000000000000000032400000000000000000000000000000000000000000000000000000000000003250000000000000000000000000000000000000000000000000000000000000326000000000000000000000000000000000000000000000000000000000000032700000000000000000000000000000000000000000000000000000000000003280000000000000000000000000000000000000000000000000000000000000329000000000000000000000000000000000000000000000000000000000000032a000000000000000000000000000000000000000000000000000000000000032b000000000000000000000000000000000000000000000000000000000000032c000000000000000000000000000000000000000000000000000000000000032d000000000000000000000000000000000000000000000000000000000000032e000000000000000000000000000000000000000000000000000000000000032f0000000000000000000000000000000000000000000000000000000000000330000000000000000000000000000000000000000000000000000000000000033100000000000000000000000000000000000000000000000000000000000003320000000000000000000000000000000000000000000000000000000000000333000000000000000000000000000000000000000000000000000000000000033400000000000000000000000000000000000000000000000000000000000003350000000000000000000000000000000000000000000000000000000000000336000000000000000000000000000000000000000000000000000000000000033700000000000000000000000000000000000000000000000000000000000003380000000000000000000000000000000000000000000000000000000000000339000000000000000000000000000000000000000000000000000000000000033a000000000000000000000000000000000000000000000000000000000000033b000000000000000000000000000000000000000000000000000000000000033c000000000000000000000000000000000000000000000000000000000000033d000000000000000000000000000000000000000000000000000000000000033e000000000000000000000000000000000000000000000000000000000000033f3f0000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040100000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000403000000000000000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000004050000000000000000000000000000000000000000000000000000000000000406000000000000000000000000000000000000000000000000000000000000040700000000000000000000000000000000000000000000000000000000000004080000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000040a000000000000000000000000000000000000000000000000000000000000040b000000000000000000000000000000000000000000000000000000000000040c000000000000000000000000000000000000000000000000000000000000040d000000000000000000000000000000000000000000000000000000000000040e000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004120000000000000000000000000000000000000000000000000000000000000413000000000000000000000000000000000000000000000000000000000000041400000000000000000000000000000000000000000000000000000000000004150000000000000000000000000000000000000000000000000000000000000416000000000000000000000000000000000000000000000000000000000000041700000000000000000000000000000000000000000000000000000000000004180000000000000000000000000000000000000000000000000000000000000419000000000000000000000000000000000000000000000000000000000000041a000000000000000000000000000000000000000000000000000000000000041b000000000000000000000000000000000000000000000000000000000000041c000000000000000000000000000000000000000000000000000000000000041d000000000000000000000000000000000000000000000000000000000000041e000000000000000000000000000000000000000000000000000000000000041f0000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000042100000000000000000000000000000000000000000000000000000000000004220000000000000000000000000000000000000000000000000000000000000423000000000000000000000000000000000000000000000000000000000000042400000000000000000000000000000000000000000000000000000000000004250000000000000000000000000000000000000000000000000000000000000426000000000000000000000000000000000000000000000000000000000000042700000000000000000000000000000000000000000000000000000000000004280000000000000000000000000000000000000000000000000000000000000429000000000000000000000000000000000000000000000000000000000000042a000000000000000000000000000000000000000000000000000000000000042b000000000000000000000000000000000000000000000000000000000000042c000000000000000000000000000000000000000000000000000000000000042d000000000000000000000000000000000000000000000000000000000000042e000000000000000000000000000000000000000000000000000000000000042f0000000000000000000000000000000000000000000000000000000000000430000000000000000000000000000000000000000000000000000000000000043100000000000000000000000000000000000000000000000000000000000004320000000000000000000000000000000000000000000000000000000000000433000000000000000000000000000000000000000000000000000000000000043400000000000000000000000000000000000000000000000000000000000004350000000000000000000000000000000000000000000000000000000000000436000000000000000000000000000000000000000000000000000000000000043700000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000439000000000000000000000000000000000000000000000000000000000000043a000000000000000000000000000000000000000000000000000000000000043b000000000000000000000000000000000000000000000000000000000000043c000000000000000000000000000000000000000000000000000000000000043d000000000000000000000000000000000000000000000000000000000000043e0200000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000501200000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000701000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000702000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000703000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000704000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000705000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007060000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000070700000000000000000000000000000000000000000000000000000000000007110000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000071200000000000000000000000000000000000000000000000000000000000007090000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000070a0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000070b0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000070c0000000000000000000000000000000000000000000000000000000000000716000000000000000000000000000000000000000000000000000000000000070d0000000000000000000000000000000000000000000000000000000000000717000000000000000000000000000000000000000000000000000000000000070e0000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000070f00000000000000000000000000000000000000000000000000000000000007190000000000000000000000000000000000000000000000000000000000000710000000000000000000000000000000000000000000000000000000000000071a0000000000000000000000000000000000000000000000000000000000000711000000000000000000000000000000000000000000000000000000000000071b0000000000000000000000000000000000000000000000000000000000000712000000000000000000000000000000000000000000000000000000000000071c0000000000000000000000000000000000000000000000000000000000000713000000000000000000000000000000000000000000000000000000000000071d0000000000000000000000000000000000000000000000000000000000000714000000000000000000000000000000000000000000000000000000000000071e0000000000000000000000000000000000000000000000000000000000000715000000000000000000000000000000000000000000000000000000000000071f00000000000000000000000000000000000000000000000000000000000007160000000000000000000000000000000000000000000000000000000000000720000000000000000000000000000000000000000000000000000000000000071700000000000000000000000000000000000000000000000000000000000007210000000000000000000000000000000000000000000000000000000000000718000000000000000000000000000000000000000000000000000000000000072200000000000000000000000000000000000000000000000000000000000007190000000000000000000000000000000000000000000000000000000000000723000000000000000000000000000000000000000000000000000000000000071a0000000000000000000000000000000000000000000000000000000000000724000000000000000000000000000000000000000000000000000000000000071b0000000000000000000000000000000000000000000000000000000000000725000000000000000000000000000000000000000000000000000000000000071c0000000000000000000000000000000000000000000000000000000000000726000000000000000000000000000000000000000000000000000000000000071d0000000000000000000000000000000000000000000000000000000000000727000000000000000000000000000000000000000000000000000000000000071e0000000000000000000000000000000000000000000000000000000000000728000000000000000000000000000000000000000000000000000000000000071f00000000000000000000000000000000000000000000000000000000000007290000000000000000", "txsEffectsHash": "0x001f86cec051421edd80056cd49b7bf9034751ec5b14e4c120fdc4427f5bba63", "decodedHeader": { @@ -51,16 +47,6 @@ "globalVariables": { "blockNumber": 2, "chainId": 31337, -<<<<<<< HEAD - "timestamp": 1712155982, - "version": 1, - "coinbase": "0xae6d3af458ef9902e5f934279af0ed5dc579aabd", - "feeRecipient": "0x23cce787fffdf2216853b5b6120b92cd1e969cef605eb9ce871741ae3099838f" - }, - "lastArchive": { - "nextAvailableLeafIndex": 2, - "root": "0x24a38ff73459da6e5dfe8d76e9dae1807a54405fb02b5c361ff4163d77c4123c" -======= "timestamp": 1712153994, "version": 1, "coinbase": "0xaf5ce49368d2524d87ff35287adc41f92f95aec2", @@ -69,7 +55,6 @@ "lastArchive": { "nextAvailableLeafIndex": 2, "root": "0x09f29521bc963745249448decb15306f61091d7d78eac78b927def53eb5d2a57" ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 }, "stateReference": { "l1ToL2MessageTree": { @@ -92,13 +77,8 @@ } } }, -<<<<<<< HEAD - "header": "0x24a38ff73459da6e5dfe8d76e9dae1807a54405fb02b5c361ff4163d77c4123c000000020000000000000000000000000000000000000000000000000000000000000002001f86cec051421edd80056cd49b7bf9034751ec5b14e4c120fdc4427f5bba6300212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d0000002024c6dc6d357aad01e10fe1adb877bb28b1df97375b874116e488086ca76e5f9600000200268020a622156e2beac47431b0cd70e1c81fef9a6aa3c365bfcbed9aa7301c5e000002802ecba8caa69552bb0d9bdf0d13eb328aeb6f166a1509678d9bfa9970971d69ab000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d6d4eae6d3af458ef9902e5f934279af0ed5dc579aabd23cce787fffdf2216853b5b6120b92cd1e969cef605eb9ce871741ae3099838f", - "publicInputsHash": "0x00ce9184b3cb0e2c3a43ec616d602e3d06e6c71fbeae025a8d4ce94314514fec", -======= "header": "0x09f29521bc963745249448decb15306f61091d7d78eac78b927def53eb5d2a57000000020000000000000000000000000000000000000000000000000000000000000002001f86cec051421edd80056cd49b7bf9034751ec5b14e4c120fdc4427f5bba6300212ff46db74e06c26240f9a92fb6fea84709380935d657361bbd5bcb89193700a5a7c9f331ce6832a69dc81873ed87de7ceeaaed2af1d595cb14ca9616eddd2e0232573b292e99cb24c082c3ef340d619341ab76aa1e9dff1ab1914963452d0000002024c6dc6d357aad01e10fe1adb877bb28b1df97375b874116e488086ca76e5f9600000200268020a622156e2beac47431b0cd70e1c81fef9a6aa3c365bfcbed9aa7301c5e000002802ecba8caa69552bb0d9bdf0d13eb328aeb6f166a1509678d9bfa9970971d69ab000001400000000000000000000000000000000000000000000000000000000000007a690000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000660d658aaf5ce49368d2524d87ff35287adc41f92f95aec20ae585d980bbc19fc5ebf8e25f3a72c71d81ce9066aef0c7d5cf956a23a3a835", "publicInputsHash": "0x009ac5d0963863e2e8c608d90b90801e4c580b0031fa4031d1e99debcd7e11d1", ->>>>>>> 8861e7dc953b6a21171871390789c2a097243249 "numTxs": 4 } } \ No newline at end of file From a229328d6c38a6622d5414b92d63fe851e9009ce Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 5 Apr 2024 07:10:21 +0000 Subject: [PATCH 069/123] another hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 5fed46b7a23..68f68b3862a 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x07500295cf2f26d453ed661a37e1972b34143542d717b68d5259e8612b2bc281"`, + `"0x2d4bccd3b6452554b94f1677b29bb504771822a192dd11ec34b0f0c8b84e0346"`, ); }); }); From 4179c57121a2ca05674ee92bd32a2c9c12fbde96 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 5 Apr 2024 13:04:15 +0000 Subject: [PATCH 070/123] wip --- .../aztec-nr/easy-private-state/src/lib.nr | 2 + .../contracts/child_contract/src/main.nr | 30 ------ .../easy_private_token_contract/src/main.nr | 2 +- .../contracts/fpc_contract/Nargo.toml | 1 + .../contracts/fpc_contract/src/main.nr | 25 +++++ .../contracts/parent_contract/Nargo.toml | 2 - .../contracts/parent_contract/src/main.nr | 2 - .../contracts/token_contract/src/main.nr | 6 +- .../crates/types/src/traits.nr | 6 ++ noir/noir-repo/aztec_macros/src/lib.rs | 4 +- .../compute_note_hash_and_nullifier.rs | 14 ++- .../src/transforms/contract_interface.rs | 95 +++++++++++++++---- .../aztec_macros/src/transforms/storage.rs | 8 +- .../aztec_macros/src/utils/errors.rs | 6 ++ .../aztec_macros/src/utils/hir_utils.rs | 81 +++++++++------- 15 files changed, 185 insertions(+), 99 deletions(-) diff --git a/noir-projects/aztec-nr/easy-private-state/src/lib.nr b/noir-projects/aztec-nr/easy-private-state/src/lib.nr index ad5150bfbb0..2c92db18806 100644 --- a/noir-projects/aztec-nr/easy-private-state/src/lib.nr +++ b/noir-projects/aztec-nr/easy-private-state/src/lib.nr @@ -1,3 +1,5 @@ mod easy_private_uint; use crate::easy_private_uint::EasyPrivateUint; +// Reexporting so it's possible to automatically generate compute_note_hash_and_nullifier +use dep::value_note; diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index ba1bf63ad19..aadbd26121b 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -15,36 +15,6 @@ contract Child { a_private_value: PrivateSet, } - struct ChildInterface { - value: fn[(dep::aztec::context::Context, dep::aztec::protocol_types::address::AztecAddress)](Field) -> [Field; 4], - // value_internal: fn(Field) -> Field, - // pub_get_value: fn(Field) -> Field, - // pub_set_value: fn(Field) -> Field, - // private_set_value: fn(Field, AztecAddress) -> Field, - // private_get_value: fn(Field, AztecAddress) -> Field, - // pub_inc_value: fn(Field) -> Field, - // pub_inc_value_internal: fn(Field) -> Field, - // set_value_twice_with_nested_first: fn() -> (), - // set_value_twice_with_nested_last: fn() -> () - } - - #[contract_library_method] - fn at( - context: dep::aztec::context::Context, - target_contract: dep::aztec::protocol_types::address::AztecAddress - ) -> ChildInterface { - ChildInterface { - value: | input | { - context.private.unwrap().call_private_function( - target_contract, - dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), - [input] - ) - - } - } - } - // Returns a sum of the input and the chain id and version of the contract in private circuit public input's return_values. #[aztec(private)] fn value(input: Field) -> Field { diff --git a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr index a9081073066..1b5af4b8280 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_token_contract/src/main.nr @@ -1,7 +1,7 @@ // docs:start:easy_private_token_contract contract EasyPrivateToken { use dep::aztec::prelude::{AztecAddress, NoteHeader, Map}; - use dep::value_note::{balance_utils, value_note::ValueNote}; + use dep::value_note::balance_utils; use dep::easy_private_state::EasyPrivateUint; #[aztec(storage)] diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml index 887ffaf17d0..b1f9481c44e 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml @@ -7,3 +7,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } authwit = { path = "../../../aztec-nr/authwit" } +token = { path = "../token_contract" } diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index deb23fa21d9..48a4fcf2935 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -19,6 +19,31 @@ contract FPC { storage.gas_token_address.initialize(gas_token_address); } + #[contract_library_function] + pub fn test( + context: &mut dep::aztec::context::PrivateContext, + target_contract: dep::aztec::protocol_types::address::AztecAddress, + amount: Field, + an_array: [Field; 4] + ) -> pub [Field; 4] { + let mut args: [Field] = [0; 0].as_slice(); + let hash_0 = amount.serialize(); + args = args.append(hash_0.as_slice()); + let hash_1 = an_array.map(|x: Field| x.serialize()); + for i in 0..hash_1.len() { + args = args.append(hash_1[i].as_slice()); + } + let args_hash = dep::aztec::hash::hash_args(args); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); + context.call_private_function_with_packed_args( + target_contract, + dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), + args_hash, + false, + false + ) + } + #[aztec(private)] fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); diff --git a/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml index a91d3bd758c..53a4d614564 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/parent_contract/Nargo.toml @@ -6,5 +6,3 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } -child_contract = { path = "../child_contract" } -value_note = { path = "../../../aztec-nr/value-note" } diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index d057df9eca7..7623647b400 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -2,8 +2,6 @@ // A contract used along with `Child` contract to test nested calls. contract Parent { use dep::aztec::prelude::{AztecAddress, FunctionSelector}; - use dep::child_contract::Child; - use dep::value_note::value_note::ValueNote; // Private function to call another private function in the target_contract using the provided selector #[aztec(private)] fn entry_point(target_contract: AztecAddress, target_selector: FunctionSelector) -> Field { diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index edacd0c85bf..1861591b2c5 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -55,12 +55,12 @@ contract Token { // docs:start:constructor #[aztec(public)] #[aztec(initializer)] - fn constructor(admin: AztecAddress, name: str<31>, symbol: str<31>, decimals: u8) { + fn constructor(admin: AztecAddress, name: FieldCompressedString, symbol: FieldCompressedString, decimals: u8) { assert(!admin.is_zero(), "invalid admin"); storage.admin.write(admin); storage.minters.at(admin).write(true); - storage.name.initialize(FieldCompressedString::from_string(name)); - storage.symbol.initialize(FieldCompressedString::from_string(symbol)); + storage.name.initialize(name); + storage.symbol.initialize(symbol); // docs:start:initialize_decimals storage.decimals.initialize(decimals); // docs:end:initialize_decimals diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr index 70870f64d84..7fc20c729f3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr @@ -1,4 +1,5 @@ use dep::std::cmp::Eq; +use crate::utils::field::field_from_bytes; // Trait: is_empty // @@ -55,6 +56,11 @@ impl ToField for U128 { self.to_integer() } } +impl ToField for str { + fn to_field(self) -> Field { + field_from_bytes(self.as_bytes(), true) + } +} trait FromField { fn from_field(value: Field) -> Self; diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 3a328a20b34..06c5e6b472e 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -134,8 +134,6 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result Result String {} +fn get_parameter_type(typ: UnresolvedType) -> String { + match typ.typ { + UnresolvedTypeData::FieldElement => "Field".to_string(), + UnresolvedTypeData::Integer(signed, width) => { + if signed == Signedness::Signed { + panic!("Signed integers are not supported") + } else { + format!("u{}", width) + } + } + UnresolvedTypeData::Bool => "bool".to_string(), + UnresolvedTypeData::Array(len_typ, typ) => { + let len = match len_typ { + UnresolvedTypeExpression::Constant(value, _) => value.to_string(), + _ => panic!("Only constant array lengths are supported"), + }; + format!("[{}; {}]", get_parameter_type(*typ), len) + } + UnresolvedTypeData::String(len_typ) => { + let len = if let Some(UnresolvedTypeExpression::Constant(value, _)) = len_typ { + value.to_string() + } else { + panic!("Only constant string lengths are supported"); + }; + format!("str<{}>", len) + } + UnresolvedTypeData::Named(_, fields, _) => format!( + "({})", + fields + .iter() + .map(|field| get_parameter_type(field.clone())) + .collect::>() + .join(", ") + ), + _ => panic!("Unsupported type"), + } +} + +fn compute_fn_signature(func: &NoirFunction) -> String { + format!( + "{}({})", + func.name(), + func.parameters() + .iter() + .map(|param| get_parameter_type(param.typ.clone())) + .collect::>() + .join(", ") + ) +} pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, String, String) { let (fn_name, fn_type) = ( @@ -33,24 +84,35 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, St let call_args = func .parameters() .iter() - .map(|param| param.pattern.name_ident().0.contents.clone()) + .map(|arg| { + format!( + "hasher.add_multiple({}.serialize());\n", + arg.pattern.name_ident().0.contents.clone() + ) + }) .collect::>() - .join(", "); + .join(""); let context_call = if aztec_visibility == "Private" { format!( - "context.private.unwrap().call_private_function(target_contract, {}, [{}])", - fn_signature, call_args + "let hasher = dep::aztec::hash::ArgsHasher::new(); + {1} + assert(args_hash == arguments::pack_arguments(args)); + let args_hash = hasher.hash(); + context.private.unwrap().call_private_function(target_contract, {}, args_hash, false, false)", + fn_selector, call_args ) } else { format!( - " + "let hasher = dep::aztec::hash::ArgsHasher::new(); + {1} + let args_hash = hasher.hash(); + assert(args_hash == arguments::pack_arguments(args)); if context.private.is_some() {{ - context.private.unwrap().call_private_function(target_contract, {0}, [{1}]) + context.private.unwrap().call_private_function_with_packed_args(target_contract, {0}, args_hash, false, false) }} else {{ - context.public.unwrap().call_public_function(target_contract, {0}, [{1}]) - }} - ", - fn_signature, call_args + context.public.unwrap().call_public_function_with_packed_args(target_contract, {0}, args_hash, false, false) + }}", + fn_selector, call_args ) }; let fn_source = format!( @@ -78,9 +140,8 @@ pub fn generate_contract_interface( context: dep::aztec::context::Context, target_contract: dep::aztec::protocol_types::address::AztecAddress ) -> {0}Interface {{ - {0}Interface {{ - {2} - }} + {0}Interface {{ + {2} }} }} ", @@ -97,8 +158,6 @@ pub fn generate_contract_interface( .join(",\n") ); - println!("{}", contract_interface); - let (contract_interface_ast, errors) = parse_program(&contract_interface); if !errors.is_empty() { dbg!(errors); @@ -107,7 +166,7 @@ pub fn generate_contract_interface( let mut contract_interface_ast = contract_interface_ast.into_sorted(); module.types.push(contract_interface_ast.types.pop().unwrap()); - module.impls.push(contract_interface_ast.impls.pop().unwrap()); + module.functions.push(contract_interface_ast.functions.pop().unwrap()); Ok(()) } diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 0bfb39cbc71..9e28bf936c6 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -271,7 +271,7 @@ pub fn assign_storage_slots( let r#struct = context.def_interner.get_struct(struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) - && r#struct.borrow().id.krate().is_root() + && r#struct.borrow().id.krate() == *crate_id { Some(r#struct) } else { @@ -290,7 +290,11 @@ pub fn assign_storage_slots( let expr = context.def_interner.expression(&statement.unwrap().expression); match expr { HirExpression::Constructor(hir_constructor_expression) => { - Some(hir_constructor_expression) + if hir_constructor_expression.r#type.borrow().id.krate() == *crate_id { + Some(hir_constructor_expression) + } else { + None + } } _ => None, } diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 9aead1756f9..5ef99950c47 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -10,6 +10,7 @@ pub enum AztecMacroError { UnsupportedFunctionArgumentType { span: Span, typ: UnresolvedTypeData }, UnsupportedStorageType { span: Option, typ: UnresolvedTypeData }, CouldNotAssignStorageSlots { secondary_message: Option }, + CouldNotImplementComputeNoteHashAndNullifier { secondary_message: Option }, CouldNotImplementNoteInterface { span: Option, secondary_message: Option }, MultipleStorageDefinitions { span: Option }, CouldNotExportStorageLayout { span: Option, secondary_message: Option }, @@ -46,6 +47,11 @@ impl From for MacroError { secondary_message, span: None, }, + AztecMacroError::CouldNotImplementComputeNoteHashAndNullifier { secondary_message } => MacroError { + primary_message: "Could not implement compute_note_hash_and_nullifier automatically, please provide an implementation".to_string(), + secondary_message, + span: None, + }, AztecMacroError::CouldNotImplementNoteInterface { span, secondary_message } => MacroError { primary_message: "Could not implement automatic methods for note, please provide an implementation of the NoteInterface trait".to_string(), secondary_message, diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index c4414e6419b..bd36f7721a7 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -7,7 +7,7 @@ use noirc_frontend::{ resolution::{path_resolver::StandardPathResolver, resolver::Resolver}, type_check::type_check_func, }, - macros_api::{FileId, HirContext, ModuleDefId, StructId}, + macros_api::{FileId, HirContext, MacroError, ModuleDefId, StructId}, node_interner::{FuncId, TraitId}, ItemVisibility, LetStatement, NoirFunction, Shared, Signedness, StructType, Type, }; @@ -17,33 +17,36 @@ use super::ast_utils::is_custom_attribute; pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec<(String, StructId)> { context .def_map(crate_id) - .expect("ICE: Missing crate in def_map") - .modules() - .iter() - .flat_map(|(_, module)| { - module.type_definitions().filter_map(move |typ| { - if let ModuleDefId::TypeId(struct_id) = typ { - let module_id = struct_id.module_id(); - let path = - context.fully_qualified_struct_path(context.root_crate_id(), struct_id); - let path = if path.contains("::") { - let prefix = if &module_id.krate == context.root_crate_id() { - "crate" + .map(|def_map| { + def_map + .modules() + .iter() + .flat_map(|(_, module)| { + module.type_definitions().filter_map(move |typ| { + if let ModuleDefId::TypeId(struct_id) = typ { + let module_id = struct_id.module_id(); + let path = context + .fully_qualified_struct_path(context.root_crate_id(), struct_id); + let path = if path.contains("::") { + let prefix = if &module_id.krate == context.root_crate_id() { + "crate" + } else { + "dep" + }; + format!("{}::{}", prefix, path) + } else { + path + }; + + Some((path, struct_id)) } else { - "dep" - }; - format!("{}::{}", prefix, path) - } else { - path - }; - - Some((path, struct_id)) - } else { - None - } - }) + None + } + }) + }) + .collect() }) - .collect() + .unwrap_or(vec![]) } pub fn collect_crate_functions(crate_id: &CrateId, context: &HirContext) -> Vec { @@ -153,7 +156,7 @@ pub fn inject_fn( location: Location, module_id: LocalModuleId, file_id: FileId, -) { +) -> Result<(), MacroError> { let func_id = context.def_interner.push_empty_fn(); context.def_interner.push_function( func_id, @@ -164,12 +167,11 @@ pub fn inject_fn( context.def_map_mut(crate_id).unwrap().modules_mut()[module_id.0] .declare_function(func.name_ident().clone(), ItemVisibility::Public, func_id) - .unwrap_or_else(|_| { - panic!( - "Failed to declare autogenerated {} function, likely due to a duplicate definition", - func.name() - ) - }); + .map_err(|err| MacroError { + primary_message: format!("Failed to declare autogenerated {} function", func.name()), + secondary_message: Some(format!("Duplicate definition found {}", err.0)), + span: None, + })?; let def_maps = &mut context.def_maps; @@ -183,7 +185,18 @@ pub fn inject_fn( context.def_interner.push_fn_meta(meta, func_id); context.def_interner.update_fn(func_id, hir_func); - type_check_func(&mut context.def_interner, func_id); + let errors = type_check_func(&mut context.def_interner, func_id); + + if !errors.is_empty() { + dbg!(errors.clone()); + return Err(MacroError { + primary_message: "Failed to type check autogenerated function".to_owned(), + secondary_message: Some(errors.iter().map(|err| err.to_string()).collect::()), + span: None, + }); + } + + Ok(()) } pub fn inject_global( From 76741111f0441ab28c78098aa14f2cdbce107305 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 05:07:42 +0000 Subject: [PATCH 071/123] added docs --- docs/docs/developers/contracts/references/storage/main.md | 2 +- .../contracts/writing_contracts/storage/define_storage.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/developers/contracts/references/storage/main.md b/docs/docs/developers/contracts/references/storage/main.md index 8645931656e..aef6fe7cbf3 100644 --- a/docs/docs/developers/contracts/references/storage/main.md +++ b/docs/docs/developers/contracts/references/storage/main.md @@ -7,7 +7,7 @@ Smart contracts rely on storage, acting as the persistent memory on the blockcha To learn how to define a storage struct, read [this guide](../../writing_contracts/storage/define_storage.md). To learn more about storage slots, read [this explainer](../../writing_contracts/storage/storage_slots.md). -You control this storage in Aztec using the `Storage` struct. This struct serves as the housing unit for all your smart contract's state variables - the data it needs to keep track of and maintain. +You control this storage in Aztec using a struct annotated with `#[aztec(storage)]`. This struct serves as the housing unit for all your smart contract's state variables - the data it needs to keep track of and maintain. These state variables come in two forms: public and private. Public variables are visible to anyone, and private variables remain hidden within the contract. diff --git a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md index 6c913bd6b3a..8b47954260a 100644 --- a/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md +++ b/docs/docs/developers/contracts/writing_contracts/storage/define_storage.md @@ -16,4 +16,4 @@ struct Storage { } ``` -If you have defined a `Storage` struct following this naming scheme, then it will be made available to you through the reserved `storage` keyword within your contract functions. +If you have defined a struct and annotated it as `#[aztec(storage)]`, then it will be made available to you through the reserved `storage` keyword within your contract functions. From 88e6858fc952a29360de974211adec29a6811ff7 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 05:15:32 +0000 Subject: [PATCH 072/123] migration notes --- docs/docs/misc/migration_notes.md | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/docs/misc/migration_notes.md b/docs/docs/misc/migration_notes.md index be8a430cc31..cccd604642c 100644 --- a/docs/docs/misc/migration_notes.md +++ b/docs/docs/misc/migration_notes.md @@ -8,6 +8,49 @@ Aztec is in full-speed development. Literally every version breaks compatibility ## TBD +### [Aztec.nr] Storage struct annotation + +The storage struct now identified by the annotation `#[aztec(storage)]`, instead of having to rely on it being called `Storage`. + +```diff +- struct Storage { +- ... +- } ++ #[aztec(storage)] ++ struct MyStorageStruct { ++ ... ++ } +``` + +### [Aztec.js] Storage layout and note info + +Storage layout and note information are now exposed in the TS contract artifact + +```diff +- const note = new Note([new Fr(mintAmount), secretHash]); +- const pendingShieldStorageSlot = new Fr(5n); // storage slot for pending_shields +- const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // note type id for TransparentNote +- const extendedNote = new ExtendedNote( +- note, +- admin.address, +- token.address, +- pendingShieldStorageSlot, +- noteTypeId, +- receipt.txHash, +- ); +- await pxe.addNote(extendedNote); ++ const note = new Note([new Fr(mintAmount), secretHash]); ++ const extendedNote = new ExtendedNote( ++ note, ++ admin.address, ++ token.address, ++ TokenContract.storage.pending_shields.slot, ++ TokenContract.notes.TransparentNote.id, ++ receipt.txHash, ++ ); ++ await pxe.addNote(extendedNote); +``` + ### [Aztec.nr] rand oracle is now called unsafe_rand `oracle::rand::rand` has been renamed to `oracle::unsafe_rand::unsafe_rand`. This change was made to communicate that we do not constrain the value in circuit and instead we just trust our PXE. From bb76d0ef660adadb42dfd4243282c84db966de00 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 05:49:19 +0000 Subject: [PATCH 073/123] wip --- .../aztec/src/context/private_context.nr | 12 ++++---- .../aztec/src/context/public_context.nr | 6 ++-- .../aztec-nr/aztec/src/oracle/arguments.nr | 17 +++++++++-- .../src/transforms/contract_interface.rs | 29 ++++++++++++------- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/context/private_context.nr b/noir-projects/aztec-nr/aztec/src/context/private_context.nr index f9de0291c38..1991e6dea6f 100644 --- a/noir-projects/aztec-nr/aztec/src/context/private_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/private_context.nr @@ -275,7 +275,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } @@ -286,7 +286,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } @@ -297,7 +297,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } @@ -382,7 +382,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } @@ -393,7 +393,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } @@ -404,7 +404,7 @@ impl PrivateContext { args: [Field; ARGS_COUNT] ) { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index c789301005b..aa7f0844dbf 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -271,7 +271,7 @@ impl PublicContextInterface for PublicContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } @@ -282,7 +282,7 @@ impl PublicContextInterface for PublicContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } @@ -293,7 +293,7 @@ impl PublicContextInterface for PublicContext { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH] { let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments(args)); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } } diff --git a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr index f1de424f840..58163233a48 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr @@ -1,11 +1,24 @@ +#[oracle(packArgumentsArray)] +fn pack_arguments_array_oracle(_args: [Field; N]) -> Field {} + #[oracle(packArguments)] -fn pack_arguments_oracle(_args: [Field; N]) -> Field {} +fn pack_arguments_oracle(_args: [Field]) -> Field {} /// - Pack arguments will notify the simulator that these arguments will be used later at /// some point in the call. /// - When the external call is made later, the simulator will know what the values unpack to. /// - This oracle will not be required in public vm functions, as the vm will keep track of arguments /// itself. -unconstrained pub fn pack_arguments(args: [Field; N]) -> Field { +unconstrained pub fn pack_arguments_array(args: [Field; N]) -> Field { + pack_arguments_array_oracle(args) +} + +/// - Pack arguments will notify the simulator that these arguments will be used later at +/// some point in the call. +/// - When the external call is made later, the simulator will know what the values unpack to. +/// - This oracle will not be required in public vm functions, as the vm will keep track of arguments +/// itself. +unconstrained pub fn pack_arguments(args: [Field]) -> Field { pack_arguments_oracle(args) } + diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 7052a0e007d..9f117e75921 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -85,28 +85,37 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, St .parameters() .iter() .map(|arg| { - format!( - "hasher.add_multiple({}.serialize());\n", - arg.pattern.name_ident().0.contents.clone() - ) + let param_name = arg.pattern.name_ident().0.contents.clone(); + match arg.typ.typ { + UnresolvedTypeData::Array(_, _) => { + format!( + "let hash_{0} = an_array.map(|x: Field| x.serialize()); + for i in 0..{0}.len() {{ + args = args.append(hash_{0}[i].as_slice()); + }}\n", + param_name + ) + } + _ => format!("args = args.append({}.serialize());\n", param_name), + } }) .collect::>() .join(""); let context_call = if aztec_visibility == "Private" { format!( - "let hasher = dep::aztec::hash::ArgsHasher::new(); + "let mut args: [Field] = [0; 0].as_slice(); {1} - assert(args_hash == arguments::pack_arguments(args)); - let args_hash = hasher.hash(); + let args_hash = dep::aztec::hash::hash_args(args); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); context.private.unwrap().call_private_function(target_contract, {}, args_hash, false, false)", fn_selector, call_args ) } else { format!( - "let hasher = dep::aztec::hash::ArgsHasher::new(); + "let mut args: [Field] = [0; 0].as_slice(); {1} - let args_hash = hasher.hash(); - assert(args_hash == arguments::pack_arguments(args)); + let args_hash = dep::aztec::hash::hash_args(args); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); if context.private.is_some() {{ context.private.unwrap().call_private_function_with_packed_args(target_contract, {0}, args_hash, false, false) }} else {{ From d08e7bb26af5aff60ff477a12f959b5731294c2a Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 05:49:56 +0000 Subject: [PATCH 074/123] updated hash --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index c28e99ce60e..07797e892c5 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x001544b091ce13bd967234b51fb8ddad21b93b86b336ccc665f4f43013433530"`, + `"0x255f1f3fe15bca5603b4b5681cf22e6115f75bcc76e0322e8f41a9d3dd68a5b5"`, ); }); }); From cd60d9b62fb5caa7a3dc0ee26b94bea143530f1b Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 08:36:52 +0000 Subject: [PATCH 075/123] fix --- .../src/transforms/compute_note_hash_and_nullifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index eb27d31b0c3..1b6630935d9 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -62,7 +62,7 @@ pub fn inject_compute_note_hash_and_nullifier( let note_types = fetch_notes(context) .iter() .map(|(_, note)| note.borrow().name.0.contents.clone()) - .collect(); + .collect::>(); // We can now generate a version of compute_note_hash_and_nullifier tailored for the contract in this crate. let func = generate_compute_note_hash_and_nullifier(¬e_types); From d7e2e22f4ae93e63dacb0de1be04af04bf9b4109 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 09:32:21 +0000 Subject: [PATCH 076/123] guess what --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 07797e892c5..4afbc3098a6 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x255f1f3fe15bca5603b4b5681cf22e6115f75bcc76e0322e8f41a9d3dd68a5b5"`, + `"0x0ee3d31bcde5fc51babcede44594a6f010f5aaa4e663c61dfd959a34490f5642"`, ); }); }); From 2b88ea2cdb869091cda5a39a8dabb59e043fe194 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 09:43:16 +0000 Subject: [PATCH 077/123] merge conflicts --- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 0218938e3de..4afbc3098a6 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,11 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( -<<<<<<< HEAD - `"0x2d4bccd3b6452554b94f1677b29bb504771822a192dd11ec34b0f0c8b84e0346"`, -======= `"0x0ee3d31bcde5fc51babcede44594a6f010f5aaa4e663c61dfd959a34490f5642"`, ->>>>>>> d7e2e22f4ae93e63dacb0de1be04af04bf9b4109 ); }); }); From 7f99205ff8027e2b1110c94edecde346b34a3290 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 10:01:10 +0000 Subject: [PATCH 078/123] updated constants --- l1-contracts/src/core/libraries/ConstantsGen.sol | 2 +- .../noir-protocol-circuits/crates/types/src/constants.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- yarn-project/circuits.js/src/contract/artifact_hash.test.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 985ed17dba4..bac287e95a5 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -83,7 +83,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; + 0x1b628eeb6349f2a4c000b703942eb8a625bfe5e6ee34ccc210748cf9ae05af98; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index c32994ae4d5..c95d6654430 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -117,7 +117,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57; +global DEPLOYER_CONTRACT_ADDRESS = 0x1b628eeb6349f2a4c000b703942eb8a625bfe5e6ee34ccc210748cf9ae05af98; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 646e313092c..d48c426d72b 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x2e89c51c28aefc6b630af43a5908634e4cf552115280eb9fd783bbd224c0bb57n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x1b628eeb6349f2a4c000b703942eb8a625bfe5e6ee34ccc210748cf9ae05af98n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts index 4afbc3098a6..6d547fa5af0 100644 --- a/yarn-project/circuits.js/src/contract/artifact_hash.test.ts +++ b/yarn-project/circuits.js/src/contract/artifact_hash.test.ts @@ -5,7 +5,7 @@ describe('ArtifactHash', () => { it('calculates the artifact hash', () => { const artifact = getBenchmarkContractArtifact(); expect(computeArtifactHash(artifact).toString()).toMatchInlineSnapshot( - `"0x0ee3d31bcde5fc51babcede44594a6f010f5aaa4e663c61dfd959a34490f5642"`, + `"0x1d1de583026ee42d6709440588180cb1bc05128e8d6ad083486ca471ed050c8b"`, ); }); }); From 1a58989590edd24730086e97b2e7129370cef865 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 8 Apr 2024 16:59:27 +0000 Subject: [PATCH 079/123] wip --- .../contracts/fpc_contract/src/main.nr | 58 +++++------- .../compute_note_hash_and_nullifier.rs | 8 +- .../src/transforms/contract_interface.rs | 94 ++++++++++--------- .../simulator/src/acvm/oracle/oracle.ts | 9 +- .../simulator/src/acvm/oracle/typed_oracle.ts | 4 +- .../src/client/client_execution_context.ts | 4 +- .../src/public/public_execution_context.ts | 4 +- 7 files changed, 92 insertions(+), 89 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index 48a4fcf2935..7ee258273ba 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -4,7 +4,7 @@ contract FPC { use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, traits::is_empty}; use dep::aztec::state_vars::SharedImmutable; - use crate::interfaces::Token; + use dep::token::Token; #[aztec(storage)] struct Storage { @@ -19,35 +19,34 @@ contract FPC { storage.gas_token_address.initialize(gas_token_address); } - #[contract_library_function] - pub fn test( - context: &mut dep::aztec::context::PrivateContext, - target_contract: dep::aztec::protocol_types::address::AztecAddress, - amount: Field, - an_array: [Field; 4] - ) -> pub [Field; 4] { - let mut args: [Field] = [0; 0].as_slice(); - let hash_0 = amount.serialize(); - args = args.append(hash_0.as_slice()); - let hash_1 = an_array.map(|x: Field| x.serialize()); - for i in 0..hash_1.len() { - args = args.append(hash_1[i].as_slice()); - } - let args_hash = dep::aztec::hash::hash_args(args); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - context.call_private_function_with_packed_args( - target_contract, - dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), - args_hash, - false, - false - ) - } + // #[contract_library_function] + // pub fn test( + // context: &mut dep::aztec::context::PrivateContext, + // target_contract: dep::aztec::protocol_types::address::AztecAddress, + // amount: Field, + // an_array: [Field; 4] + // ) -> pub [Field; 4] { + // let mut args: [Field] = [0; 0].as_slice(); + // let hash_0 = amount.serialize(); + // args = args.append(hash_0.as_slice()); + // let hash_1 = an_array.map(|x: Field| x.serialize()); + // for i in 0..hash_1.len() { + // args = args.append(hash_1[i].as_slice()); + // } + // let args_hash = dep::aztec::hash::hash_args(args); + // assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); + // context.call_private_function_with_packed_args( + // target_contract, + // dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), + // args_hash, + // false, + // false + // ) + // } #[aztec(private)] fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); - let _res = Token::at(asset).unshield( &mut context, context.msg_sender(), @@ -55,12 +54,7 @@ contract FPC { amount, nonce ); - - let _void = context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("pay_fee_with_shielded_rebate(Field,(Field),Field)"), - [amount, asset.to_field(), secret_hash] - ); + at(context.this_address()).pay_fee_with_shielded_rebate(&mut context, amount, asset, secret_hash); } #[aztec(private)] diff --git a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs index 5fba70206d2..e49df8f0c6c 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/compute_note_hash_and_nullifier.rs @@ -53,7 +53,9 @@ pub fn inject_compute_note_hash_and_nullifier( // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an // escape hatch for this mechanism. // TODO(#4647): improve this diagnosis and error messaging. - if check_for_compute_note_hash_and_nullifier_definition(crate_id, context) { + if context.crate_graph.root_crate_id() != crate_id + || check_for_compute_note_hash_and_nullifier_definition(crate_id, context) + { return Ok(()); } @@ -105,7 +107,7 @@ fn generate_compute_note_hash_and_nullifier_source(note_types: &[String]) -> Str // so we include a dummy version. " unconstrained fn compute_note_hash_and_nullifier( - contract_address: AztecAddress, + contract_address: dep::aztec::protocol_types::address::AztecAddress, nonce: Field, storage_slot: Field, note_type_id: Field, @@ -135,7 +137,7 @@ fn generate_compute_note_hash_and_nullifier_source(note_types: &[String]) -> Str format!( " unconstrained fn compute_note_hash_and_nullifier( - contract_address: AztecAddress, + contract_address: dep::aztec::protocol_types::address::AztecAddress, nonce: Field, storage_slot: Field, note_type_id: Field, diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 9f117e75921..b1417b40888 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -55,20 +55,8 @@ fn compute_fn_signature(func: &NoirFunction) -> String { ) } -pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, String, String) { - let (fn_name, fn_type) = ( - func.name().to_string(), - format!( - "fn[(dep::aztec::context::Context, dep::aztec::protocol_types::address::AztecAddress)]({}) -> {}", - func.parameters() - .iter() - .map(|param| param.typ.to_string().replace("plain::", "")) - .collect::>() - .join(", "), - "[Field; 4]" // func.return_type() - ), - ); - let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature(func)); +pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { + let fn_name = func.name().to_string(); let fn_parameters = func .parameters() .iter() @@ -81,6 +69,22 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, St }) .collect::>() .join(", "); + + let return_type = "[Field; 4]"; // func.return_type() + + let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature(func)); + // let fn_parameters = func + // .parameters() + // .iter() + // .map(|param| { + // format!( + // "{}: {}", + // param.pattern.name_ident().0.contents, + // param.typ.to_string().replace("plain::", "") + // ) + // }) + // .collect::>() + // .join(", "); let call_args = func .parameters() .iter() @@ -96,75 +100,72 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> (String, St param_name ) } - _ => format!("args = args.append({}.serialize());\n", param_name), + _ => format!("args = args.append({}.serialize().as_slice());\n", param_name), } }) .collect::>() .join(""); - let context_call = if aztec_visibility == "Private" { - format!( + if aztec_visibility == "Private" { + let fn_source = format!( "let mut args: [Field] = [0; 0].as_slice(); {1} let args_hash = dep::aztec::hash::hash_args(args); assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - context.private.unwrap().call_private_function(target_contract, {}, args_hash, false, false)", + context.call_private_function_with_packed_args(self.target_contract, {0}, args_hash, false, false)", fn_selector, call_args + ); + format!( + "pub fn {}(self, context: &mut dep::aztec::context::PrivateContext, {}) -> {} {{ + {} + }}", + fn_name, fn_parameters, return_type, fn_source ) } else { - format!( + let fn_source = format!( "let mut args: [Field] = [0; 0].as_slice(); {1} let args_hash = dep::aztec::hash::hash_args(args); assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); if context.private.is_some() {{ - context.private.unwrap().call_private_function_with_packed_args(target_contract, {0}, args_hash, false, false) + context.private.unwrap().call_private_function_with_packed_args(self.target_contract, {0}, args_hash, false, false) }} else {{ - context.public.unwrap().call_public_function_with_packed_args(target_contract, {0}, args_hash, false, false) + context.public.unwrap().call_public_function_with_packed_args(self.target_contract, {0}, args_hash, false, false) }}", fn_selector, call_args + ); + format!( + "pub fn {}(self, context: &mut dep::aztec::context::Context, {}) -> {} {{ + {} + }}", + fn_name, fn_parameters, return_type, fn_source ) - }; - let fn_source = format!( - "|{}| {{ - {} - }}", - fn_parameters, context_call - ); - (fn_name, fn_type, fn_source) + } } pub fn generate_contract_interface( module: &mut SortedModule, module_name: &str, - stubs: &[(String, String, String)], + stubs: &[String], ) -> Result<(), AztecMacroError> { let contract_interface = format!( " struct {0}Interface {{ + target_contract: dep::aztec::protocol_types::address::AztecAddress + }} + + impl {0}Interface {{ {1} }} #[contract_library_method] - fn at( - context: dep::aztec::context::Context, + pub fn at( target_contract: dep::aztec::protocol_types::address::AztecAddress - ) -> {0}Interface {{ - {0}Interface {{ - {2} - }} + ) -> pub {0}Interface {{ + {0}Interface {{ target_contract }} }} ", module_name, - stubs - .iter() - .map(|(fn_name, fn_type, _)| format!("{}: {}", fn_name, fn_type)) - .collect::>() - .join(",\n"), - stubs - .iter() - .map(|(fn_name, _, fn_source)| format!("{}: {}", fn_name, fn_source)) - .collect::>() - .join(",\n") + stubs.join("\n"), ); let (contract_interface_ast, errors) = parse_program(&contract_interface); @@ -175,6 +176,7 @@ pub fn generate_contract_interface( let mut contract_interface_ast = contract_interface_ast.into_sorted(); module.types.push(contract_interface_ast.types.pop().unwrap()); + module.impls.push(contract_interface_ast.impls.pop().unwrap()); module.functions.push(contract_interface_ast.functions.pop().unwrap()); Ok(()) diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 81892640934..94610df05ca 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -22,8 +22,13 @@ export class Oracle { return toACVMField(val); } - async packArguments(args: ACVMField[]): Promise { - const packed = await this.typedOracle.packArguments(args.map(fromACVMField)); + async packArguments([_len, args]: [ACVMField, ACVMField[]]): Promise { + const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField)); + return toACVMField(packed); + } + + async packArgumentsArray(args: ACVMField[]): Promise { + const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField)); return toACVMField(packed); } diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 9d15b4467fd..3a9cd82352e 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -85,8 +85,8 @@ export abstract class TypedOracle { return Fr.random(); } - packArguments(_args: Fr[]): Promise { - throw new OracleMethodNotAvailableError('packArguments'); + packArgumentsArray(_args: Fr[]): Promise { + throw new OracleMethodNotAvailableError('packArgumentsArray'); } getNullifierKeyPair(_accountAddress: AztecAddress): Promise { diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index 3f626293121..a8b22a847df 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -171,10 +171,10 @@ export class ClientExecutionContext extends ViewDataOracle { } /** - * Pack the given arguments. + * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArguments(args: Fr[]): Promise { + public packArgumentsArray(args: Fr[]): Promise { return Promise.resolve(this.packedArgsCache.pack(args)); } diff --git a/yarn-project/simulator/src/public/public_execution_context.ts b/yarn-project/simulator/src/public/public_execution_context.ts index b999d27ad13..ac111f3ff7b 100644 --- a/yarn-project/simulator/src/public/public_execution_context.ts +++ b/yarn-project/simulator/src/public/public_execution_context.ts @@ -94,10 +94,10 @@ export class PublicExecutionContext extends TypedOracle { } /** - * Pack the given arguments. + * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArguments(args: Fr[]): Promise { + public packArgumentsArray(args: Fr[]): Promise { return Promise.resolve(this.packedArgsCache.pack(args)); } From bed79fd60d3fc624ebde973592c478e93bad4d9a Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 9 Apr 2024 05:16:10 +0000 Subject: [PATCH 080/123] wip --- noir/noir-repo/aztec_macros/src/lib.rs | 2 +- .../src/transforms/contract_interface.rs | 57 +++++++++++-------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 06c5e6b472e..90ce470bf90 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -141,7 +141,7 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result String { +fn get_parameter_type(module_types: &Vec, typ: UnresolvedType) -> String { match typ.typ { UnresolvedTypeData::FieldElement => "Field".to_string(), UnresolvedTypeData::Integer(signed, width) => { @@ -21,7 +21,7 @@ fn get_parameter_type(typ: UnresolvedType) -> String { UnresolvedTypeExpression::Constant(value, _) => value.to_string(), _ => panic!("Only constant array lengths are supported"), }; - format!("[{}; {}]", get_parameter_type(*typ), len) + format!("[{}; {}]", get_parameter_type(module_types, *typ), len) } UnresolvedTypeData::String(len_typ) => { let len = if let Some(UnresolvedTypeExpression::Constant(value, _)) = len_typ { @@ -31,31 +31,49 @@ fn get_parameter_type(typ: UnresolvedType) -> String { }; format!("str<{}>", len) } - UnresolvedTypeData::Named(_, fields, _) => format!( - "({})", - fields + UnresolvedTypeData::Named(path, _, _) => { + let fields = module_types .iter() - .map(|field| get_parameter_type(field.clone())) + .find_map(|r#struct| { + if r#struct.name.0.contents == path.last_segment().0.contents { + Some(r#struct.fields.clone()) + } else { + None + } + }) + .unwrap(); + + let fields = fields + .iter() + .map(|(_, typ)| get_parameter_type(module_types, typ.clone())) .collect::>() - .join(", ") - ), + .join(", "); + + println!("fields are {:?}", fields); + + format!("({})", fields) + } _ => panic!("Unsupported type"), } } -fn compute_fn_signature(func: &NoirFunction) -> String { +fn compute_fn_signature(module_types: &Vec, func: &NoirFunction) -> String { format!( "{}({})", func.name(), func.parameters() .iter() - .map(|param| get_parameter_type(param.typ.clone())) + .map(|param| get_parameter_type(module_types, param.typ.clone())) .collect::>() .join(", ") ) } -pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { +pub fn stub_function( + module_types: &Vec, + aztec_visibility: &str, + func: &NoirFunction, +) -> String { let fn_name = func.name().to_string(); let fn_parameters = func .parameters() @@ -72,19 +90,8 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let return_type = "[Field; 4]"; // func.return_type() - let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature(func)); - // let fn_parameters = func - // .parameters() - // .iter() - // .map(|param| { - // format!( - // "{}: {}", - // param.pattern.name_ident().0.contents, - // param.typ.to_string().replace("plain::", "") - // ) - // }) - // .collect::>() - // .join(", "); + let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature( module_types, func)); + let call_args = func .parameters() .iter() From 013fc4934f31f6f135dfec46eca964aff6437aa4 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 9 Apr 2024 15:32:42 +0000 Subject: [PATCH 081/123] working implementation --- noir-projects/aztec-nr/aztec/src/context.nr | 2 +- .../aztec-nr/aztec/src/context/interface.nr | 75 +++++ .../contracts/fpc_contract/Nargo.toml | 1 + .../contracts/fpc_contract/src/interfaces.nr | 60 ---- .../contracts/fpc_contract/src/main.nr | 71 +---- noir/noir-repo/aztec_macros/src/lib.rs | 14 +- .../compute_note_hash_and_nullifier.rs | 2 +- .../src/transforms/contract_interface.rs | 277 +++++++++++------- .../src/transforms/note_interface.rs | 2 +- .../aztec_macros/src/transforms/storage.rs | 2 +- .../aztec_macros/src/utils/constants.rs | 1 + .../aztec_macros/src/utils/errors.rs | 6 + .../aztec_macros/src/utils/hir_utils.rs | 13 +- .../noirc_frontend/src/node_interner.rs | 24 +- 14 files changed, 300 insertions(+), 250 deletions(-) delete mode 100644 noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr diff --git a/noir-projects/aztec-nr/aztec/src/context.nr b/noir-projects/aztec-nr/aztec/src/context.nr index ce4c7eea3c2..a88de8e2dcf 100644 --- a/noir-projects/aztec-nr/aztec/src/context.nr +++ b/noir-projects/aztec-nr/aztec/src/context.nr @@ -6,7 +6,7 @@ mod public_context; mod avm_context; mod interface; -use interface::ContextInterface; +use interface::{ContextInterface, PrivateCallInterface, PublicCallInterface}; use private_context::PrivateContext; use public_context::PublicContext; use avm_context::AvmContext; diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index 29260eb5018..72233a9886a 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -3,6 +3,9 @@ use dep::protocol_types::{ constants::RETURN_VALUES_LENGTH }; +use crate::context::private_context::PrivateContext; +use crate::context::public_context::PublicContext; + trait ContextInterface { fn push_new_note_hash(&mut self, note_hash: Field); fn push_new_nullifier(&mut self, nullifier: Field, nullified_commitment: Field); @@ -49,3 +52,75 @@ trait PublicContextInterface { args: [Field; ARGS_COUNT] ) -> [Field; RETURN_VALUES_LENGTH]; } + +struct PrivateCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args_hash: Field +} + +impl PrivateCallInterface { + + pub fn call(self, context: &mut PrivateContext) -> [Field; 4] { + context.call_private_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ) + } + + pub fn static_call(self, context: &mut PrivateContext) -> [Field; 4] { + context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + } + + pub fn delegate_call(self, context: &mut PrivateContext) -> [Field; 4] { + context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + } +} + +struct PublicCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args_hash: Field +} + +impl PublicCallInterface { + + pub fn call(self, context: &mut PublicContext) -> [Field; 4] { + context.call_public_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ) + } + + pub fn static_call(self, context: &mut PublicContext) -> [Field; 4] { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + } + + pub fn delegate_call(self, context: &mut PublicContext) -> [Field; 4] { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + } + + pub fn enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ) + } + + pub fn static_enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + } + + pub fn delegate_enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + } +} diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml index b1f9481c44e..96bd8bacba7 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/fpc_contract/Nargo.toml @@ -8,3 +8,4 @@ type = "contract" aztec = { path = "../../../aztec-nr/aztec" } authwit = { path = "../../../aztec-nr/authwit" } token = { path = "../token_contract" } +gas_token = { path = "../gas_token_contract" } diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr deleted file mode 100644 index dd18df1295f..00000000000 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/interfaces.nr +++ /dev/null @@ -1,60 +0,0 @@ -use dep::aztec::prelude::{AztecAddress, EthAddress, FunctionSelector, PrivateContext}; -use dep::aztec::context::PublicContext; - -use dep::aztec::protocol_types::constants::RETURN_VALUES_LENGTH; - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn transfer_public( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ = context.call_public_function( - self.address, - FunctionSelector::from_signature("transfer_public((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ); - } - - pub fn shield( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - amount: Field, - secret_hash: Field, - nonce: Field - ) { - let _ = context.call_public_function( - self.address, - FunctionSelector::from_signature("shield((Field),Field,Field,Field)"), - [from.to_field(), amount, secret_hash, nonce] - ); - } - - // Private - pub fn unshield( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - context.call_private_function( - self.address, - FunctionSelector::from_signature("unshield((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ) - } -} diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index 7ee258273ba..95bea7c2dbd 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -1,10 +1,8 @@ -mod interfaces; - contract FPC { use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, traits::is_empty}; use dep::aztec::state_vars::SharedImmutable; - use dep::token::Token; + use dep::gas_token::GasToken; #[aztec(storage)] struct Storage { @@ -19,87 +17,38 @@ contract FPC { storage.gas_token_address.initialize(gas_token_address); } - // #[contract_library_function] - // pub fn test( - // context: &mut dep::aztec::context::PrivateContext, - // target_contract: dep::aztec::protocol_types::address::AztecAddress, - // amount: Field, - // an_array: [Field; 4] - // ) -> pub [Field; 4] { - // let mut args: [Field] = [0; 0].as_slice(); - // let hash_0 = amount.serialize(); - // args = args.append(hash_0.as_slice()); - // let hash_1 = an_array.map(|x: Field| x.serialize()); - // for i in 0..hash_1.len() { - // args = args.append(hash_1[i].as_slice()); - // } - // let args_hash = dep::aztec::hash::hash_args(args); - // assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - // context.call_private_function_with_packed_args( - // target_contract, - // dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(""), - // args_hash, - // false, - // false - // ) - // } - #[aztec(private)] fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); - let _res = Token::at(asset).unshield( - &mut context, - context.msg_sender(), - context.this_address(), - amount, - nonce - ); - at(context.this_address()).pay_fee_with_shielded_rebate(&mut context, amount, asset, secret_hash); + let _res = Token::at(asset).unshield(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); + FPC::at(context.this_address()).pay_fee_with_shielded_rebate(amount, asset, secret_hash).enqueue(&mut context); } #[aztec(private)] fn fee_entrypoint_public(amount: Field, asset: AztecAddress, nonce: Field) { - let _void = context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("prepare_fee((Field),Field,(Field),Field)"), - [context.msg_sender().to_field(), amount, asset.to_field(), nonce] - ); - - let _void = context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("pay_fee((Field),Field,(Field))"), - [context.msg_sender().to_field(), amount, asset.to_field()] - ); + let _void = FPC::at(context.this_address()).prepare_fee(context.msg_sender(), amount, asset, nonce).enqueue(&mut context); + let _void = FPC::at(context.this_address()).pay_fee(context.msg_sender(), amount, asset).enqueue(&mut context); } #[aztec(public)] #[aztec(internal)] fn prepare_fee(from: AztecAddress, amount: Field, asset: AztecAddress, nonce: Field) { - let _res = Token::at(asset).transfer_public(&mut context, from, context.this_address(), amount, nonce); + let _res = Token::at(asset).transfer_public(from, context.this_address(), amount, nonce).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn pay_fee(refund_address: AztecAddress, amount: Field, asset: AztecAddress) { - let refund = context.call_public_function( - storage.gas_token_address.read_public(), - FunctionSelector::from_signature("pay_fee(Field)"), - [amount] - )[0]; - + let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context)[0]; // Just do public refunds for the present - Token::at(asset).transfer_public(&mut context, context.this_address(), refund_address, refund, 0) + let _res = Token::at(asset).transfer_public(context.this_address(), refund_address, refund, 0).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn pay_fee_with_shielded_rebate(amount: Field, asset: AztecAddress, secret_hash: Field) { - let refund = context.call_public_function( - storage.gas_token_address.read_public(), - FunctionSelector::from_signature("pay_fee(Field)"), - [amount] - )[0]; + let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context)[0]; - Token::at(asset).shield(&mut context, context.this_address(), refund, secret_hash, 0); + let _res = Token::at(asset).shield(context.this_address(), refund, secret_hash, 0).call(&mut context); } } diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 90ce470bf90..1ccb8eca84b 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -3,7 +3,9 @@ mod utils; use transforms::{ compute_note_hash_and_nullifier::inject_compute_note_hash_and_nullifier, - contract_interface::{generate_contract_interface, stub_function}, + contract_interface::{ + generate_contract_interface, stub_function, update_fn_signatures_in_contract_interface, + }, events::{generate_selector_impl, transform_events}, functions::{export_fn_abi, transform_function, transform_unconstrained}, note_interface::{generate_note_interface_impl, inject_note_exports}, @@ -105,7 +107,7 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result = vec![]; for func in module.functions.iter_mut() { let mut is_private = false; @@ -141,8 +143,9 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result Result<(), (AztecMacroError, FileId)> { - if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { + if let Some((_, module_id, file_id)) = get_contract_module_data(context, crate_id) { // If compute_note_hash_and_nullifier is already defined by the user, we skip auto-generation in order to provide an // escape hatch for this mechanism. // TODO(#4647): improve this diagnosis and error messaging. diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 6ac6ce2be56..b90ef4ba288 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -1,79 +1,19 @@ use noirc_frontend::{ - parse_program, parser::SortedModule, NoirFunction, NoirStruct, Signedness, UnresolvedType, - UnresolvedTypeData, UnresolvedTypeExpression, + graph::CrateId, + hir_def::function::Parameters, + macros_api::{FileId, HirContext, HirExpression, HirLiteral, HirStatement}, + parse_program, + parser::SortedModule, + NoirFunction, UnresolvedTypeData, }; -use crate::utils::errors::AztecMacroError; - -fn get_parameter_type(module_types: &Vec, typ: UnresolvedType) -> String { - match typ.typ { - UnresolvedTypeData::FieldElement => "Field".to_string(), - UnresolvedTypeData::Integer(signed, width) => { - if signed == Signedness::Signed { - panic!("Signed integers are not supported") - } else { - format!("u{}", width) - } - } - UnresolvedTypeData::Bool => "bool".to_string(), - UnresolvedTypeData::Array(len_typ, typ) => { - let len = match len_typ { - UnresolvedTypeExpression::Constant(value, _) => value.to_string(), - _ => panic!("Only constant array lengths are supported"), - }; - format!("[{}; {}]", get_parameter_type(module_types, *typ), len) - } - UnresolvedTypeData::String(len_typ) => { - let len = if let Some(UnresolvedTypeExpression::Constant(value, _)) = len_typ { - value.to_string() - } else { - panic!("Only constant string lengths are supported"); - }; - format!("str<{}>", len) - } - UnresolvedTypeData::Named(path, _, _) => { - let fields = module_types - .iter() - .find_map(|r#struct| { - if r#struct.name.0.contents == path.last_segment().0.contents { - Some(r#struct.fields.clone()) - } else { - None - } - }) - .unwrap(); - - let fields = fields - .iter() - .map(|(_, typ)| get_parameter_type(module_types, typ.clone())) - .collect::>() - .join(", "); - - println!("fields are {:?}", fields); - - format!("({})", fields) - } - _ => panic!("Unsupported type"), - } -} - -fn compute_fn_signature(module_types: &Vec, func: &NoirFunction) -> String { - format!( - "{}({})", - func.name(), - func.parameters() - .iter() - .map(|param| get_parameter_type(module_types, param.typ.clone())) - .collect::>() - .join(", ") - ) -} +use crate::utils::{ + constants::SELECTOR_PLACEHOLDER, + errors::AztecMacroError, + hir_utils::{collect_crate_structs, get_contract_module_data, signature_of_type}, +}; -pub fn stub_function( - module_types: &Vec, - aztec_visibility: &str, - func: &NoirFunction, -) -> String { +pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let fn_name = func.name().to_string(); let fn_parameters = func .parameters() @@ -88,9 +28,7 @@ pub fn stub_function( .collect::>() .join(", "); - let return_type = "[Field; 4]"; // func.return_type() - - let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", compute_fn_signature( module_types, func)); + let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", SELECTOR_PLACEHOLDER); let call_args = func .parameters() @@ -100,7 +38,7 @@ pub fn stub_function( match arg.typ.typ { UnresolvedTypeData::Array(_, _) => { format!( - "let hash_{0} = an_array.map(|x: Field| x.serialize()); + "let hash_{0} = {0}.map(|x: Field| x.serialize()); for i in 0..{0}.len() {{ args = args.append(hash_{0}[i].as_slice()); }}\n", @@ -112,41 +50,24 @@ pub fn stub_function( }) .collect::>() .join(""); - if aztec_visibility == "Private" { - let fn_source = format!( - "let mut args: [Field] = [0; 0].as_slice(); - {1} - let args_hash = dep::aztec::hash::hash_args(args); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - context.call_private_function_with_packed_args(self.target_contract, {0}, args_hash, false, false)", - fn_selector, call_args - ); - format!( - "pub fn {}(self, context: &mut dep::aztec::context::PrivateContext, {}) -> {} {{ - {} - }}", - fn_name, fn_parameters, return_type, fn_source - ) - } else { - let fn_source = format!( - "let mut args: [Field] = [0; 0].as_slice(); - {1} + let fn_body = format!( + "let mut args: [Field] = [0; 0].as_slice(); + {} let args_hash = dep::aztec::hash::hash_args(args); assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - if context.private.is_some() {{ - context.private.unwrap().call_private_function_with_packed_args(self.target_contract, {0}, args_hash, false, false) - }} else {{ - context.public.unwrap().call_public_function_with_packed_args(self.target_contract, {0}, args_hash, false, false) + dep::aztec::context::{}CallInterface {{ + target_contract: self.target_contract, + selector: {}, + args_hash }}", - fn_selector, call_args - ); - format!( - "pub fn {}(self, context: &mut dep::aztec::context::Context, {}) -> {} {{ + call_args, aztec_visibility, fn_selector + ); + format!( + "pub fn {}(self, {}) -> dep::aztec::context::{}CallInterface {{ {} }}", - fn_name, fn_parameters, return_type, fn_source - ) - } + fn_name, fn_parameters, aztec_visibility, fn_body + ) } pub fn generate_contract_interface( @@ -156,19 +77,25 @@ pub fn generate_contract_interface( ) -> Result<(), AztecMacroError> { let contract_interface = format!( " - struct {0}Interface {{ + struct {0} {{ target_contract: dep::aztec::protocol_types::address::AztecAddress }} - impl {0}Interface {{ + impl {0} {{ {1} + + pub fn at( + target_contract: dep::aztec::protocol_types::address::AztecAddress + ) -> Self {{ + Self {{ target_contract }} + }} }} #[contract_library_method] pub fn at( target_contract: dep::aztec::protocol_types::address::AztecAddress - ) -> pub {0}Interface {{ - {0}Interface {{ target_contract }} + ) -> {0} {{ + {0} {{ target_contract }} }} ", module_name, @@ -178,7 +105,7 @@ pub fn generate_contract_interface( let (contract_interface_ast, errors) = parse_program(&contract_interface); if !errors.is_empty() { dbg!(errors); - return Err(AztecMacroError::AztecDepNotFound); + return Err(AztecMacroError::CouldNotGenerateContractInterface { secondary_message: Some("Failed to parse Noir macro code during contract interface generation. This is either a bug in the compiler or the Noir macro code".to_string()), }); } let mut contract_interface_ast = contract_interface_ast.into_sorted(); @@ -188,3 +115,131 @@ pub fn generate_contract_interface( Ok(()) } + +fn compute_fn_signature(fn_name: &str, parameters: Parameters) -> String { + format!( + "{}({})", + fn_name, + parameters.iter().map(|(_, typ, _)| signature_of_type(typ)).collect::>().join(", ") + ) +} + +pub fn update_fn_signatures_in_contract_interface( + crate_id: &CrateId, + context: &mut HirContext, +) -> Result<(), (AztecMacroError, FileId)> { + if let Some((name, _, file_id)) = get_contract_module_data(context, crate_id) { + let maybe_interface_struct = + collect_crate_structs(crate_id, context).iter().find_map(|&(_, struct_id)| { + let r#struct = context.def_interner.get_struct(struct_id); + if r#struct.borrow().name.0.contents == name { + Some(r#struct) + } else { + None + } + }); + + if let Some(interface_struct) = maybe_interface_struct { + let methods = context.def_interner.get_struct_methods(interface_struct.borrow().id); + + for func_id in methods.iter().flat_map(|methods| methods.direct.iter()) { + let name = context.def_interner.function_name(func_id); + let fn_parameters = &context.def_interner.function_meta(func_id).parameters.clone(); + + if name == "at" { + continue; + } + + let fn_signature = compute_fn_signature(name, fn_parameters.clone()); + let hir_func = context.def_interner.function(func_id).block(&context.def_interner); + let call_interface_constructor_statement = context.def_interner.statement( + hir_func + .statements() + .last() + .ok_or((AztecMacroError::AztecDepNotFound, file_id))?, + ); + let call_interface_constructor_expression = + match call_interface_constructor_statement { + HirStatement::Expression(expression_id) => { + match context.def_interner.expression(&expression_id) { + HirExpression::Constructor(hir_constructor_expression) => { + Ok(hir_constructor_expression) + } + _ => Err(( + AztecMacroError::CouldNotGenerateContractInterface { + secondary_message: Some( + "CallInterface constructor statement must be a constructor expression" + .to_string(), + ), + }, + file_id, + )), + } + } + _ => Err(( + AztecMacroError::CouldNotGenerateContractInterface { + secondary_message: Some( + "CallInterface constructor statement must be an expression" + .to_string(), + ), + }, + file_id, + )), + }?; + let (_, function_selector_expression_id) = + call_interface_constructor_expression.fields[1]; + let function_selector_expression = + context.def_interner.expression(&function_selector_expression_id); + + let current_fn_signature_expression_id = match function_selector_expression { + HirExpression::Call(call_expr) => Ok(call_expr.arguments[0]), + _ => Err(( + AztecMacroError::CouldNotGenerateContractInterface { + secondary_message: Some( + "Function selector argument expression must be call expression" + .to_string(), + ), + }, + file_id, + )), + }?; + + let current_fn_signature_expression = + context.def_interner.expression(¤t_fn_signature_expression_id); + + match current_fn_signature_expression { + HirExpression::Literal(HirLiteral::Str(signature)) => { + if signature != SELECTOR_PLACEHOLDER { + Err(( + AztecMacroError::CouldNotGenerateContractInterface { + secondary_message: Some(format!( + "Function signature argument must be a placeholder: {}", + SELECTOR_PLACEHOLDER + )), + }, + file_id, + )) + } else { + Ok(()) + } + } + _ => Err(( + AztecMacroError::CouldNotAssignStorageSlots { + secondary_message: Some( + "Function signature argument must be a literal string".to_string(), + ), + }, + file_id, + )), + }?; + + context + .def_interner + .update_expression(current_fn_signature_expression_id, |expr| { + *expr = HirExpression::Literal(HirLiteral::Str(fn_signature)) + }); + } + } + } + Ok(()) +} diff --git a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs index 0172e3255da..4b72759a5db 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/note_interface.rs @@ -623,7 +623,7 @@ pub fn inject_note_exports( crate_id: &CrateId, context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { - if let Some((module_id, file_id)) = get_contract_module_data(context, crate_id) { + if let Some((_, module_id, file_id)) = get_contract_module_data(context, crate_id) { let notes = fetch_notes(context); for (_, note) in notes { diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 9e28bf936c6..1719baee026 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -265,7 +265,7 @@ pub fn assign_storage_slots( context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { let traits: Vec<_> = collect_traits(context); - if let Some((_, file_id)) = get_contract_module_data(context, crate_id) { + if let Some((_, _, file_id)) = get_contract_module_data(context, crate_id) { let maybe_storage_struct = collect_crate_structs(crate_id, context).iter().find_map(|&(_, struct_id)| { let r#struct = context.def_interner.get_struct(struct_id); diff --git a/noir/noir-repo/aztec_macros/src/utils/constants.rs b/noir/noir-repo/aztec_macros/src/utils/constants.rs index 464cd10e2c7..848cca0477d 100644 --- a/noir/noir-repo/aztec_macros/src/utils/constants.rs +++ b/noir/noir-repo/aztec_macros/src/utils/constants.rs @@ -1,3 +1,4 @@ pub const FUNCTION_TREE_HEIGHT: u32 = 5; pub const MAX_CONTRACT_PRIVATE_FUNCTIONS: usize = 2_usize.pow(FUNCTION_TREE_HEIGHT); pub const SIGNATURE_PLACEHOLDER: &str = "SIGNATURE_PLACEHOLDER"; +pub const SELECTOR_PLACEHOLDER: &str = "SELECTOR_PLACEHOLDER"; diff --git a/noir/noir-repo/aztec_macros/src/utils/errors.rs b/noir/noir-repo/aztec_macros/src/utils/errors.rs index 5ef99950c47..3f95f8a0ead 100644 --- a/noir/noir-repo/aztec_macros/src/utils/errors.rs +++ b/noir/noir-repo/aztec_macros/src/utils/errors.rs @@ -15,6 +15,7 @@ pub enum AztecMacroError { MultipleStorageDefinitions { span: Option }, CouldNotExportStorageLayout { span: Option, secondary_message: Option }, CouldNotExportFunctionAbi { span: Option, secondary_message: Option }, + CouldNotGenerateContractInterface { secondary_message: Option }, EventError { span: Span, message: String }, UnsupportedAttributes { span: Span, secondary_message: Option }, } @@ -72,6 +73,11 @@ impl From for MacroError { secondary_message, span, }, + AztecMacroError::CouldNotGenerateContractInterface { secondary_message } => MacroError { + primary_message: "Could not generate contract interface".to_string(), + secondary_message, + span: None + }, AztecMacroError::EventError { span, message } => MacroError { primary_message: message, secondary_message: None, diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index bd36f7721a7..7a47ee39362 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -130,15 +130,16 @@ pub fn fetch_notes(context: &HirContext) -> Vec<(String, Shared)> { pub fn get_contract_module_data( context: &mut HirContext, crate_id: &CrateId, -) -> Option<(LocalModuleId, FileId)> { +) -> Option<(String, LocalModuleId, FileId)> { + let def_map = context.def_map(crate_id).expect("ICE: Missing crate in def_map"); // We first fetch modules in this crate which correspond to contracts, along with their file id. - let contract_module_file_ids: Vec<(LocalModuleId, FileId)> = context - .def_map(crate_id) - .expect("ICE: Missing crate in def_map") + let contract_module_file_ids: Vec<(String, LocalModuleId, FileId)> = def_map .modules() .iter() .filter(|(_, module)| module.is_contract) - .map(|(idx, module)| (LocalModuleId(idx), module.location.file)) + .map(|(idx, module)| { + (def_map.get_module_path(idx, module.parent), LocalModuleId(idx), module.location.file) + }) .collect(); // If the current crate does not contain a contract module we simply skip it. More than 1 contract in a crate is forbidden by the compiler @@ -146,7 +147,7 @@ pub fn get_contract_module_data( return None; } - Some(contract_module_file_ids[0]) + Some(contract_module_file_ids[0].clone()) } pub fn inject_fn( diff --git a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs index ffd760d6d7f..af815d0a851 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs @@ -223,10 +223,10 @@ pub enum TraitImplKind { /// /// Additionally, types can define specialized impls with methods of the same name /// as long as these specialized impls do not overlap. E.g. `impl Struct` and `impl Struct` -#[derive(Default, Debug)] +#[derive(Default, Debug, Clone)] pub struct Methods { - direct: Vec, - trait_impl_methods: Vec, + pub direct: Vec, + pub trait_impl_methods: Vec, } /// All the information from a function that is filled out during definition collection rather than @@ -921,6 +921,24 @@ impl NodeInterner { self.structs[&id].clone() } + pub fn get_struct_methods(&self, id: StructId) -> Vec { + self.struct_methods + .keys() + .filter_map(|(key_id, name)| { + if key_id == &id { + Some( + self.struct_methods + .get(&(*key_id, name.clone())) + .expect("get_struct_methods given invalid StructId") + .clone(), + ) + } else { + None + } + }) + .collect::>() + } + pub fn get_trait(&self, id: TraitId) -> &Trait { &self.traits[&id] } From 3df4ade5a06794425f163cd5f07469592826c9dc Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 10 Apr 2024 16:26:35 +0000 Subject: [PATCH 082/123] fixes and improvements, added void calls --- noir-projects/aztec-nr/aztec/src/context.nr | 5 +- .../aztec-nr/aztec/src/context/interface.nr | 72 +++++++++- .../import_test_contract/src/main.nr | 2 +- .../contracts/lending_contract/Nargo.toml | 2 + .../contracts/lending_contract/src/asset.nr | 20 +-- .../lending_contract/src/interfaces.nr | 126 ------------------ .../contracts/lending_contract/src/main.nr | 115 ++++++---------- .../contracts/reader_contract/src/main.nr | 20 ++- noir/noir-repo/aztec_macros/src/lib.rs | 21 ++- .../src/transforms/contract_interface.rs | 69 ++++++---- .../aztec_macros/src/utils/hir_utils.rs | 11 ++ yarn-project/noir-compiler/package.json | 2 + .../src/contract-interface-gen/typescript.ts | 6 +- yarn-project/yarn.lock | 18 +++ 14 files changed, 232 insertions(+), 257 deletions(-) delete mode 100644 noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr diff --git a/noir-projects/aztec-nr/aztec/src/context.nr b/noir-projects/aztec-nr/aztec/src/context.nr index 5fac40fd321..1ed155cd334 100644 --- a/noir-projects/aztec-nr/aztec/src/context.nr +++ b/noir-projects/aztec-nr/aztec/src/context.nr @@ -7,7 +7,10 @@ mod avm_context; mod interface; mod gas; -use interface::{ContextInterface, PrivateCallInterface, PublicCallInterface}; +use interface::{ + ContextInterface, PrivateCallInterface, PublicCallInterface, PrivateVoidCallInterface, + PublicVoidCallInterface +}; use private_context::PrivateContext; use public_context::PublicContext; use avm_context::AvmContext; diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index ed13502c3d4..18462f20782 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -63,7 +63,6 @@ struct PrivateCallInterface { } impl PrivateCallInterface { - pub fn call(self, context: &mut PrivateContext) -> [Field; 4] { context.call_private_function_with_packed_args( self.target_contract, @@ -83,6 +82,32 @@ impl PrivateCallInterface { } } +struct PrivateVoidCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args_hash: Field +} + +impl PrivateVoidCallInterface { + pub fn call(self, context: &mut PrivateContext) { + let _ = context.call_private_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ); + } + + pub fn static_call(self, context: &mut PrivateContext) { + let _ = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + } + + pub fn delegate_call(self, context: &mut PrivateContext) { + let _ = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + } +} + struct PublicCallInterface { target_contract: AztecAddress, selector: FunctionSelector, @@ -127,3 +152,48 @@ impl PublicCallInterface { context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) } } + +struct PublicVoidCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args_hash: Field +} + +impl PublicVoidCallInterface { + + pub fn call(self, context: &mut PublicContext) { + let _ = context.call_public_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ); + } + + pub fn static_call(self, context: &mut PublicContext) { + let _ = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + } + + pub fn delegate_call(self, context: &mut PublicContext) { + let _ = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + } + + pub fn enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args( + self.target_contract, + self.selector, + self.args_hash, + false, + false + ) + } + + pub fn static_enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + } + + pub fn delegate_enqueue(self, context: &mut PrivateContext) { + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + } +} diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr index d7bccb32375..db3cb3be113 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr @@ -16,7 +16,7 @@ contract ImportTest { // See yarn-project/simulator/src/client/private_execution.ts // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn main(target: AztecAddress) -> Field { + fn main_contract(target: AztecAddress) -> Field { let test_contract_instance = TestPrivateContextInterface::at(target); let return_values = test_contract_instance.test_code_gen( &mut context, diff --git a/noir-projects/noir-contracts/contracts/lending_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/lending_contract/Nargo.toml index e6a337360bc..f1e58a4ef1f 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/lending_contract/Nargo.toml @@ -6,3 +6,5 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } +token = { path = "../token_contract" } +price_feed = { path = "../price_feed_contract" } diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr index 5dc8cb7f300..7415ec54d92 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/asset.nr @@ -1,7 +1,7 @@ use dep::aztec::prelude::AztecAddress; use dep::aztec::protocol_types::traits::{Deserialize, Serialize}; -// Struct to be used to represent "totals". Generally, there should be one per asset. +// Struct to be used to represent "totals". Generally, there should be one per Asset. // It stores the global values that are shared among all users, such as an accumulator // and last time it was updated. // In practice, it should also point to an oracle and have more fields related to @@ -13,23 +13,23 @@ struct Asset { oracle: AztecAddress, } -global ASSET_SERIALIZED_LEN: Field = 4; +global SERIALIZED_LEN: Field = 4; -impl Serialize for Asset { - fn serialize(asset: Asset) -> [Field; ASSET_SERIALIZED_LEN] { +impl Serialize for Asset { + fn serialize(Asset: Asset) -> [Field; SERIALIZED_LEN] { [ - asset.interest_accumulator.to_integer(), - asset.last_updated_ts as Field, - asset.loan_to_value.to_integer(), - asset.oracle.to_field() + Asset.interest_accumulator.to_integer(), + Asset.last_updated_ts as Field, + Asset.loan_to_value.to_integer(), + Asset.oracle.to_field() ] } } -impl Deserialize for Asset { +impl Deserialize for Asset { // Right now we are wasting so many writes. If changing last_updated_ts // we will end up rewriting all of them, wasting writes. - fn deserialize(fields: [Field; ASSET_SERIALIZED_LEN]) -> Asset { + fn deserialize(fields: [Field; SERIALIZED_LEN]) -> Asset { let interest_accumulator = U128::from_integer(fields[0]); let last_updated_ts = fields[1] as u64; let loan_to_value = U128::from_integer(fields[2]); diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr deleted file mode 100644 index 3357c89a023..00000000000 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/interfaces.nr +++ /dev/null @@ -1,126 +0,0 @@ -use dep::aztec::prelude::{FunctionSelector, AztecAddress, PrivateContext}; - -use dep::aztec::context::{PublicContext, gas::GasOpts}; -use dep::aztec::protocol_types::constants::RETURN_VALUES_LENGTH; - -use crate::asset::Asset; - -struct PriceFeed { - address: AztecAddress, -} - -impl PriceFeed { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn get_price(self: Self, context: &mut PublicContext) -> U128 { - let return_values = context.call_public_function( - self.address, - FunctionSelector::from_signature("get_price(Field)"), - [0], - GasOpts::default() - ); - - U128::from_integer(return_values[0]) - } -} - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn transfer_public( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ = context.call_public_function( - self.address, - FunctionSelector::from_signature("transfer_public((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce], - GasOpts::default() - ); - } - - pub fn mint_public(self: Self, context: &mut PublicContext, to: AztecAddress, amount: Field) { - let _ = context.call_public_function( - self.address, - FunctionSelector::from_signature("mint_public((Field),Field)"), - [to.to_field(), amount], - GasOpts::default() - ); - } - - pub fn burn_public( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ = context.call_public_function( - self.address, - FunctionSelector::from_signature("burn_public((Field),Field,Field)"), - [from.to_field(), amount, nonce], - GasOpts::default() - ); - } - - // Private - pub fn unshield( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - context.call_private_function( - self.address, - FunctionSelector::from_signature("unshield((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ) - } - - pub fn burn( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - amount: Field, - nonce: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - context.call_private_function( - self.address, - FunctionSelector::from_signature("burn((Field),Field,Field)"), - [from.to_field(), amount, nonce] - ) - } -} - -struct Lending { - address: AztecAddress, -} - -impl Lending { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn update_accumulator(self: Self, context: &mut PublicContext) -> Asset { - let return_values = context.call_public_function_no_args( - self.address, - FunctionSelector::from_signature("update_accumulator()") - ); - - Asset::deserialize(return_values) - } -} diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index 80675129a15..7582b285a71 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -1,7 +1,6 @@ mod asset; mod interest_math; mod helpers; -mod interfaces; // Single asset CDP contract. // Shoving re-entries up the ass. @@ -17,7 +16,8 @@ contract Lending { use crate::asset::Asset; use crate::interest_math::compute_multiplier; use crate::helpers::{covered_by_collateral, DebtReturn, debt_updates, debt_value, compute_identifier}; - use crate::interfaces::{Token, Lending, PriceFeed}; + use dep::token::Token; + use dep::price_feed::PriceFeed; // Storage structure, containing all storage, and specifying what slots they use. #[aztec(storage)] @@ -49,7 +49,7 @@ contract Lending { stable_coin: AztecAddress ) { let asset_loc = storage.assets.at(0); - let asset = asset_loc.read(); + let asset: Asset = asset_loc.read(); let loan_to_value = U128::from_integer(loan_to_value); @@ -71,7 +71,7 @@ contract Lending { #[aztec(public)] fn update_accumulator() -> Asset { let asset_loc = storage.assets.at(0); - let mut asset = asset_loc.read(); + let mut asset: Asset = asset_loc.read(); let timestamp = context.timestamp(); let dt = timestamp - asset.last_updated_ts; @@ -103,38 +103,28 @@ contract Lending { collateral_asset: AztecAddress ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender().to_field()); - let _res = Token::at(collateral_asset).unshield(&mut context, from, context.this_address(), amount, nonce); - // _deposit(on_behalf_of, amount, collateral_asset) - let selector = FunctionSelector::from_signature("_deposit((Field),Field,(Field))"); - context.call_public_function( - context.this_address(), - selector, - [on_behalf_of, amount, collateral_asset.to_field()] - ); + let _res = Token::at(collateral_asset).unshield(from, context.this_address(), amount, nonce).call(&mut context); + Lending::at(context.this_address())._deposit( + AztecAddress::from_field(on_behalf_of), + amount, + collateral_asset + ).enqueue(&mut context); } #[aztec(public)] fn deposit_public(amount: Field, nonce: Field, on_behalf_of: Field, collateral_asset: AztecAddress) { - Token::at(collateral_asset).transfer_public( - &mut context, - context.msg_sender(), - context.this_address(), + let _ = Token::at(collateral_asset).transfer_public(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); + let _ = Lending::at(context.this_address())._deposit( + AztecAddress::from_field(on_behalf_of), amount, - nonce - ); - let selector = FunctionSelector::from_signature("_deposit((Field),Field,(Field))"); - let _ = context.call_public_function( - context.this_address(), - selector, - [on_behalf_of, amount, collateral_asset.to_field()], - GasOpts::default() - ); + collateral_asset + ).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn _deposit(owner: AztecAddress, amount: Field, collateral_asset: AztecAddress) { - let _asset = Lending::at(context.this_address()).update_accumulator(&mut context); + let _asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); let coll_asset = storage.collateral_asset.read(); assert(coll_asset.eq(collateral_asset)); @@ -147,30 +137,21 @@ contract Lending { #[aztec(private)] fn withdraw_private(secret: Field, to: AztecAddress, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender().to_field()); - let selector = FunctionSelector::from_signature("_withdraw((Field),(Field),Field)"); - context.call_public_function( - context.this_address(), - selector, - [on_behalf_of, to.to_field(), amount] - ); + Lending::at(context.this_address())._withdraw(AztecAddress::from_field(on_behalf_of), to, amount).enqueue(&mut context); } #[aztec(public)] fn withdraw_public(to: AztecAddress, amount: Field) { - let selector = FunctionSelector::from_signature("_withdraw((Field),(Field),Field)"); - let _ = context.call_public_function( - context.this_address(), - selector, - [context.msg_sender().to_field(), to.to_field(), amount], - GasOpts::default() - ); + let _ = Lending::at(context.this_address())._withdraw(context.msg_sender(), to, amount).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn _withdraw(owner: AztecAddress, recipient: AztecAddress, amount: Field) { - let asset = Lending::at(context.this_address()).update_accumulator(&mut context); - let price = PriceFeed::at(asset.oracle).get_price(&mut context); + let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); + let asset = Asset::deserialize(asset_raw); + let price_raw = PriceFeed::at(asset.oracle).get_price(0).call(&mut context); + let price = U128::from_integer(price_raw[0]); let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -200,36 +181,27 @@ contract Lending { // @todo @LHerskind Support both shielding and transfers (for now just transfer) let collateral_asset = storage.collateral_asset.read(); - Token::at(collateral_asset).transfer_public(&mut context, context.this_address(), recipient, amount, 0); + let _ = Token::at(collateral_asset).transfer_public(context.this_address(), recipient, amount, 0).call(&mut context); } #[aztec(private)] fn borrow_private(secret: Field, to: AztecAddress, amount: Field) { let on_behalf_of = compute_identifier(secret, 0, context.msg_sender().to_field()); - let selector = FunctionSelector::from_signature("_borrow((Field),(Field),Field)"); - context.call_public_function( - context.this_address(), - selector, - [on_behalf_of, to.to_field(), amount] - ); + let _ = Lending::at(context.this_address())._borrow(AztecAddress::from_field(on_behalf_of), to, amount).enqueue(&mut context); } #[aztec(public)] fn borrow_public(to: AztecAddress, amount: Field) { - let selector = FunctionSelector::from_signature("_borrow((Field),(Field),Field)"); - let _ = context.call_public_function( - context.this_address(), - selector, - [context.msg_sender().to_field(), to.to_field(), amount], - GasOpts::default() - ); + let _ = Lending::at(context.this_address())._borrow(context.msg_sender(), to, amount).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn _borrow(owner: AztecAddress, to: AztecAddress, amount: Field) { - let asset = Lending::at(context.this_address()).update_accumulator(&mut context); - let price = PriceFeed::at(asset.oracle).get_price(&mut context); + let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); + let asset = Asset::deserialize(asset_raw); + let price_raw = PriceFeed::at(asset.oracle).get_price(0).call(&mut context); + let price = U128::from_integer(price_raw[0]); // Fetch collateral and static_debt, compute health of current position let collateral = U128::from_integer(storage.collateral.at(owner).read()); @@ -255,7 +227,7 @@ contract Lending { // @todo @LHerskind Need to support both private and public minting. let stable_coin = storage.stable_coin.read(); - Token::at(stable_coin).mint_public(&mut context, to, amount); + let _ = Token::at(stable_coin).mint_public(to, amount).call(&mut context); } #[aztec(private)] @@ -268,31 +240,21 @@ contract Lending { stable_coin: AztecAddress ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender().to_field()); - let _res = Token::at(stable_coin).burn(&mut context, from, amount, nonce); - let selector = FunctionSelector::from_signature("_repay((Field),Field,(Field))"); - context.call_public_function( - context.this_address(), - selector, - [on_behalf_of, amount, stable_coin.to_field()] - ); + let _ = Token::at(stable_coin).burn(from, amount, nonce).call(&mut context); + let _ = Lending::at(context.this_address())._repay(AztecAddress::from_field(on_behalf_of), amount, stable_coin).enqueue(&mut context); } #[aztec(public)] fn repay_public(amount: Field, nonce: Field, owner: AztecAddress, stable_coin: AztecAddress) { - Token::at(stable_coin).burn_public(&mut context, context.msg_sender(), amount, nonce); - let selector = FunctionSelector::from_signature("_repay((Field),Field,(Field))"); - let _ = context.call_public_function( - context.this_address(), - selector, - [owner.to_field(), amount, stable_coin.to_field()], - GasOpts::default() - ); + let _ = Token::at(stable_coin).burn_public(context.msg_sender(), amount, nonce).call(&mut context); + let _ = Lending::at(context.this_address())._repay(owner, amount, stable_coin).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn _repay(owner: AztecAddress, amount: Field, stable_coin: AztecAddress) { - let asset = Lending::at(context.this_address()).update_accumulator(&mut context); + let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); + let asset = Asset::deserialize(asset_raw); // To ensure that private is using the correct token. assert(stable_coin.eq(storage.stable_coin.read())); @@ -309,13 +271,14 @@ contract Lending { } unconstrained fn get_asset(asset_id: Field) -> pub Asset { - storage.assets.at(asset_id).read() + let res: Asset = storage.assets.at(asset_id).read(); + res } unconstrained fn get_position(owner: AztecAddress) -> pub Position { let collateral = storage.collateral.at(owner).read(); let static_debt = storage.static_debt.at(owner).read(); - let asset = storage.assets.at(0).read(); + let asset: Asset = storage.assets.at(0).read(); let debt = debt_value( U128::from_integer(static_debt), U128::from_integer(asset.interest_accumulator) diff --git a/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr b/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr index 058c26129b5..b49cef0cfd5 100644 --- a/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr @@ -7,21 +7,19 @@ contract Reader { fn constructor() {} #[aztec(public)] - fn check_name_public(who: AztecAddress, what: str<31>) { + fn check_name_public(who: AztecAddress, what: FieldCompressedString) { let selector = FunctionSelector::from_signature("public_get_name()"); let ret = context.call_public_function_no_args(who, selector); let name = FieldCompressedString::from_field(ret[0]); - let _what = FieldCompressedString::from_string(what); - assert(name.is_eq(_what)); + assert(name.is_eq(what)); } #[aztec(private)] - fn check_name_private(who: AztecAddress, what: str<31>) { + fn check_name_private(who: AztecAddress, what: FieldCompressedString) { let selector = FunctionSelector::from_signature("private_get_name()"); let ret = context.call_private_function_no_args(who, selector); let name = FieldCompressedString::from_field(ret[0]); - let _what = FieldCompressedString::from_string(what); - assert(name.is_eq(_what)); + assert(name.is_eq(what)); } unconstrained fn get_name(who: AztecAddress) -> pub str<6> { @@ -30,21 +28,19 @@ contract Reader { } #[aztec(public)] - fn check_symbol_public(who: AztecAddress, what: str<31>) { + fn check_symbol_public(who: AztecAddress, what: FieldCompressedString) { let selector = FunctionSelector::from_signature("public_get_symbol()"); let ret = context.call_public_function_no_args(who, selector); let symbol = FieldCompressedString::from_field(ret[0]); - let _what = FieldCompressedString::from_string(what); - assert(symbol.is_eq(_what)); + assert(symbol.is_eq(what)); } #[aztec(private)] - fn check_symbol_private(who: AztecAddress, what: str<31>) { + fn check_symbol_private(who: AztecAddress, what: FieldCompressedString) { let selector = FunctionSelector::from_signature("private_get_symbol()"); let ret = context.call_private_function_no_args(who, selector); let symbol = FieldCompressedString::from_field(ret[0]); - let _what = FieldCompressedString::from_string(what); - assert(symbol.is_eq(_what)); + assert(symbol.is_eq(what)); } unconstrained fn get_symbol(who: AztecAddress) -> pub str<3> { diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 1ccb8eca84b..137c2217a2c 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -62,8 +62,13 @@ fn transform( // Usage -> mut ast -> aztec_library::transform(&mut ast) // Covers all functions in the ast for submodule in ast.submodules.iter_mut().filter(|submodule| submodule.is_contract) { - if transform_module(&mut submodule.contents, submodule.name.0.contents.as_str()) - .map_err(|err| (err.into(), file_id))? + if transform_module( + crate_id, + context, + &mut submodule.contents, + submodule.name.0.contents.as_str(), + ) + .map_err(|err| (err.into(), file_id))? { check_for_aztec_dependency(crate_id, context)?; } @@ -77,7 +82,12 @@ fn transform( /// Determines if ast nodes are annotated with aztec attributes. /// For annotated functions it calls the `transform` function which will perform the required transformations. /// Returns true if an annotated node is found, false otherwise -fn transform_module(module: &mut SortedModule, module_name: &str) -> Result { +fn transform_module( + crate_id: &CrateId, + context: &HirContext, + module: &mut SortedModule, + module_name: &str, +) -> Result { let mut has_transformed_module = false; // Check for a user defined storage stru @@ -89,7 +99,10 @@ fn transform_module(module: &mut SortedModule, module_name: &str) -> Result String { }) .collect::>() .join(", "); + let fn_return_type = func.return_type(); let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", SELECTOR_PLACEHOLDER); - let call_args = func - .parameters() - .iter() - .map(|arg| { - let param_name = arg.pattern.name_ident().0.contents.clone(); - match arg.typ.typ { - UnresolvedTypeData::Array(_, _) => { - format!( - "let hash_{0} = {0}.map(|x: Field| x.serialize()); + let parameters = func.parameters(); + + let args_hash = if parameters.len() > 0 { + let call_args = func + .parameters() + .iter() + .map(|arg| { + let param_name = arg.pattern.name_ident().0.contents.clone(); + match &arg.typ.typ { + UnresolvedTypeData::Array(_, typ) => { + format!( + "let hash_{0} = {0}.map(|x: {1}| x.serialize()); for i in 0..{0}.len() {{ - args = args.append(hash_{0}[i].as_slice()); + args_acc = args_acc.append(hash_{0}[i].as_slice()); }}\n", - param_name - ) + param_name, typ.typ + ) + } + _ => { + format!( + "args_acc = args_acc.append({}.serialize().as_slice());\n", + param_name + ) + } } - _ => format!("args = args.append({}.serialize().as_slice());\n", param_name), - } - }) - .collect::>() - .join(""); - let fn_body = format!( - "let mut args: [Field] = [0; 0].as_slice(); + }) + .collect::>() + .join(""); + format!( + "let mut args_acc: [Field] = [0; 0].as_slice(); {} - let args_hash = dep::aztec::hash::hash_args(args); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args)); - dep::aztec::context::{}CallInterface {{ + let args_hash = dep::aztec::hash::hash_args(args_acc); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc));", + call_args + ) + } else { + "let args_hash = 0;".to_string() + }; + let is_void = if matches!(fn_return_type.typ, UnresolvedTypeData::Unit) { "Void" } else { "" }; + let fn_body = format!( + "{} + dep::aztec::context::{}{}CallInterface {{ target_contract: self.target_contract, selector: {}, args_hash }}", - call_args, aztec_visibility, fn_selector + args_hash, aztec_visibility, is_void, fn_selector ); format!( - "pub fn {}(self, {}) -> dep::aztec::context::{}CallInterface {{ + "pub fn {}(self, {}) -> dep::aztec::context::{}{}CallInterface {{ {} }}", - fn_name, fn_parameters, aztec_visibility, fn_body + fn_name, fn_parameters, aztec_visibility, is_void, fn_body ) } @@ -102,6 +119,8 @@ pub fn generate_contract_interface( stubs.join("\n"), ); + //println!("Generated contract interface: {}", contract_interface); + let (contract_interface_ast, errors) = parse_program(&contract_interface); if !errors.is_empty() { dbg!(errors); diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 7a47ee39362..d238c36c04b 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -99,6 +99,17 @@ pub fn signature_of_type(typ: &Type) -> String { let fields = vecmap(types, signature_of_type); format!("({})", fields.join(",")) } + Type::String(len_typ) => { + if let Type::Constant(len) = **len_typ { + format!("str<{len}>") + } else { + unimplemented!( + "Cannot generate signature for string with length type {:?}", + len_typ + ) + } + } + Type::MutableReference(typ) => signature_of_type(typ), _ => unimplemented!("Cannot generate signature for type {:?}", typ), } } diff --git a/yarn-project/noir-compiler/package.json b/yarn-project/noir-compiler/package.json index 110a881ff8f..c35f9e851d5 100644 --- a/yarn-project/noir-compiler/package.json +++ b/yarn-project/noir-compiler/package.json @@ -58,6 +58,7 @@ "fs-extra": "^11.1.1", "lodash.camelcase": "^4.3.0", "lodash.capitalize": "^4.2.1", + "lodash.uniqby": "^4.7.0", "memfs": "^4.6.0", "pako": "^2.1.0", "semver": "^7.5.4", @@ -70,6 +71,7 @@ "@types/jest": "^29.5.0", "@types/lodash.camelcase": "^4.3.7", "@types/lodash.capitalize": "^4.2.7", + "@types/lodash.uniqby": "^4.7.9", "@types/node": "^18.7.23", "@types/pako": "^2.0.0", "@types/semver": "^7.5.4", diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts index da5e9cd6e8f..1081351670b 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/typescript.ts @@ -14,6 +14,8 @@ import { isWrappedFieldStruct, } from '@aztec/foundation/abi'; +import uniqBy from 'lodash.uniqby'; + /** * Returns the corresponding typescript type for a given Noir type. * @param type - The input Noir type. @@ -224,7 +226,9 @@ function generateStorageLayoutGetter(input: ContractArtifact) { * @param input - The contract artifact. */ function generateNotesGetter(input: ContractArtifact) { - const notes = input.outputs.globals.notes ? (input.outputs.globals.notes as TupleValue[]) : []; + const notes = input.outputs.globals.notes + ? uniqBy(input.outputs.globals.notes as TupleValue[], n => (n.fields[1] as BasicValue<'string', string>).value) + : []; const notesUnionType = notes.map(n => `'${(n.fields[1] as BasicValue<'string', string>).value}'`).join(' | '); const noteMetadata = notes diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 722f749f9e6..8dbc5f28219 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -606,6 +606,7 @@ __metadata: "@types/jest": ^29.5.0 "@types/lodash.camelcase": ^4.3.7 "@types/lodash.capitalize": ^4.2.7 + "@types/lodash.uniqby": ^4.7.9 "@types/node": ^18.7.23 "@types/pako": ^2.0.0 "@types/semver": ^7.5.4 @@ -615,6 +616,7 @@ __metadata: jest: ^29.5.0 lodash.camelcase: ^4.3.0 lodash.capitalize: ^4.2.1 + lodash.uniqby: ^4.7.0 memfs: ^4.6.0 pako: ^2.1.0 semver: ^7.5.4 @@ -3623,6 +3625,15 @@ __metadata: languageName: node linkType: hard +"@types/lodash.uniqby@npm:^4.7.9": + version: 4.7.9 + resolution: "@types/lodash.uniqby@npm:4.7.9" + dependencies: + "@types/lodash": "*" + checksum: 24cc8af36e0d4c52b7294c7ba7d814c89ce2c8118d94350bbed21031fef850fa1a280bfd2b30a47e0b5f7aa6ac649a36a5089aa76bc23787963a5ee6443f631e + languageName: node + linkType: hard + "@types/lodash@npm:*": version: 4.14.202 resolution: "@types/lodash@npm:4.14.202" @@ -9833,6 +9844,13 @@ __metadata: languageName: node linkType: hard +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 659264545a95726d1493123345aad8cbf56e17810fa9a0b029852c6d42bc80517696af09d99b23bef1845d10d95e01b8b4a1da578f22aeba7a30d3e0022a4938 + languageName: node + linkType: hard + "lodash@npm:^4.17.21, lodash@npm:^4.17.4": version: 4.17.21 resolution: "lodash@npm:4.17.21" From d53fbbd030b44b477726807393069094b164dd20 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 10 Apr 2024 18:40:46 +0000 Subject: [PATCH 083/123] new attempt to deserialize slices --- noir-projects/aztec-nr/aztec/src/oracle/arguments.nr | 2 +- noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs | 9 +++++++++ yarn-project/simulator/src/acvm/oracle/oracle.ts | 9 ++------- yarn-project/simulator/src/acvm/oracle/typed_oracle.ts | 4 ++-- .../simulator/src/client/client_execution_context.ts | 2 +- .../simulator/src/public/public_execution_context.ts | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr index 58163233a48..567490c5550 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr @@ -1,7 +1,7 @@ #[oracle(packArgumentsArray)] fn pack_arguments_array_oracle(_args: [Field; N]) -> Field {} -#[oracle(packArguments)] +#[oracle(packArgumentsArray)] fn pack_arguments_oracle(_args: [Field]) -> Field {} /// - Pack arguments will notify the simulator that these arguments will be used later at diff --git a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs index e547b99f0eb..77e4ee889b2 100644 --- a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs +++ b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs @@ -6,6 +6,7 @@ use serde::{Deserialize, Serialize}; pub enum ForeignCallParam { Single(FieldElement), Array(Vec), + Slice(FieldElement, Vec), } impl From for ForeignCallParam { @@ -20,11 +21,18 @@ impl From> for ForeignCallParam { } } +impl From<(FieldElement, Vec)> for ForeignCallParam { + fn from((len, values): (FieldElement, Vec)) -> Self { + ForeignCallParam::Slice(len, values) + } +} + impl ForeignCallParam { pub fn fields(&self) -> Vec { match self { ForeignCallParam::Single(value) => vec![*value], ForeignCallParam::Array(values) => values.clone(), + ForeignCallParam::Slice(_, values) => values.clone(), } } @@ -32,6 +40,7 @@ impl ForeignCallParam { match self { ForeignCallParam::Single(value) => *value, ForeignCallParam::Array(_) => panic!("Expected single value, found array"), + ForeignCallParam::Slice(_, _) => panic!("Expected single value, found slice"), } } } diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index 76a8730bf94..50f9cec6c5b 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -22,13 +22,8 @@ export class Oracle { return toACVMField(val); } - async packArguments([_len, args]: [ACVMField, ACVMField[]]): Promise { - const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField)); - return toACVMField(packed); - } - - async packArgumentsArray(args: ACVMField[]): Promise { - const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField)); + async packArguments(args: ACVMField[]): Promise { + const packed = await this.typedOracle.packArguments(args.map(fromACVMField)); return toACVMField(packed); } diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 3a9cd82352e..9d15b4467fd 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -85,8 +85,8 @@ export abstract class TypedOracle { return Fr.random(); } - packArgumentsArray(_args: Fr[]): Promise { - throw new OracleMethodNotAvailableError('packArgumentsArray'); + packArguments(_args: Fr[]): Promise { + throw new OracleMethodNotAvailableError('packArguments'); } getNullifierKeyPair(_accountAddress: AztecAddress): Promise { diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index dd6064efae7..9c5fd4ba697 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -174,7 +174,7 @@ export class ClientExecutionContext extends ViewDataOracle { * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArgumentsArray(args: Fr[]): Promise { + public packArguments(args: Fr[]): Promise { return Promise.resolve(this.packedArgsCache.pack(args)); } diff --git a/yarn-project/simulator/src/public/public_execution_context.ts b/yarn-project/simulator/src/public/public_execution_context.ts index 020c9fd4889..1d24ce8d27e 100644 --- a/yarn-project/simulator/src/public/public_execution_context.ts +++ b/yarn-project/simulator/src/public/public_execution_context.ts @@ -97,7 +97,7 @@ export class PublicExecutionContext extends TypedOracle { * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArgumentsArray(args: Fr[]): Promise { + public packArguments(args: Fr[]): Promise { return Promise.resolve(this.packedArgsCache.pack(args)); } From fa07219792fbb51605db2b71df5defaf794081de Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 10 Apr 2024 19:39:04 +0000 Subject: [PATCH 084/123] compiles, more tomorrow! --- .../contracts/reader_contract/src/main.nr | 20 +++++++++++-------- .../contracts/token_contract/src/main.nr | 6 +++--- .../crates/types/src/traits.nr | 11 ++++++++++ .../src/e2e_nested_contract.test.ts | 2 +- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr b/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr index b49cef0cfd5..058c26129b5 100644 --- a/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/reader_contract/src/main.nr @@ -7,19 +7,21 @@ contract Reader { fn constructor() {} #[aztec(public)] - fn check_name_public(who: AztecAddress, what: FieldCompressedString) { + fn check_name_public(who: AztecAddress, what: str<31>) { let selector = FunctionSelector::from_signature("public_get_name()"); let ret = context.call_public_function_no_args(who, selector); let name = FieldCompressedString::from_field(ret[0]); - assert(name.is_eq(what)); + let _what = FieldCompressedString::from_string(what); + assert(name.is_eq(_what)); } #[aztec(private)] - fn check_name_private(who: AztecAddress, what: FieldCompressedString) { + fn check_name_private(who: AztecAddress, what: str<31>) { let selector = FunctionSelector::from_signature("private_get_name()"); let ret = context.call_private_function_no_args(who, selector); let name = FieldCompressedString::from_field(ret[0]); - assert(name.is_eq(what)); + let _what = FieldCompressedString::from_string(what); + assert(name.is_eq(_what)); } unconstrained fn get_name(who: AztecAddress) -> pub str<6> { @@ -28,19 +30,21 @@ contract Reader { } #[aztec(public)] - fn check_symbol_public(who: AztecAddress, what: FieldCompressedString) { + fn check_symbol_public(who: AztecAddress, what: str<31>) { let selector = FunctionSelector::from_signature("public_get_symbol()"); let ret = context.call_public_function_no_args(who, selector); let symbol = FieldCompressedString::from_field(ret[0]); - assert(symbol.is_eq(what)); + let _what = FieldCompressedString::from_string(what); + assert(symbol.is_eq(_what)); } #[aztec(private)] - fn check_symbol_private(who: AztecAddress, what: FieldCompressedString) { + fn check_symbol_private(who: AztecAddress, what: str<31>) { let selector = FunctionSelector::from_signature("private_get_symbol()"); let ret = context.call_private_function_no_args(who, selector); let symbol = FieldCompressedString::from_field(ret[0]); - assert(symbol.is_eq(what)); + let _what = FieldCompressedString::from_string(what); + assert(symbol.is_eq(_what)); } unconstrained fn get_symbol(who: AztecAddress) -> pub str<3> { diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index 47f3c5ec202..7924299b27c 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -55,12 +55,12 @@ contract Token { // docs:start:constructor #[aztec(public)] #[aztec(initializer)] - fn constructor(admin: AztecAddress, name: FieldCompressedString, symbol: FieldCompressedString, decimals: u8) { + fn constructor(admin: AztecAddress, name: str<31>, symbol: str<31>, decimals: u8) { assert(!admin.is_zero(), "invalid admin"); storage.admin.write(admin); storage.minters.at(admin).write(true); - storage.name.initialize(name); - storage.symbol.initialize(symbol); + storage.name.initialize(FieldCompressedString::from_string(name)); + storage.symbol.initialize(FieldCompressedString::from_string(symbol)); // docs:start:initialize_decimals storage.decimals.initialize(decimals); // docs:end:initialize_decimals diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr index 7fc20c729f3..cd223fef5e3 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr @@ -89,6 +89,17 @@ trait Serialize { } // docs:end:serialize +impl Serialize for str { + fn serialize(self) -> [Field; N] { + let mut result = [0; N]; + let bytes: [u8; N] = self.as_bytes(); + for i in 0..N { + result[i] = field_from_bytes([bytes[i];1], true); + } + result + } +} + // docs:start:deserialize trait Deserialize { fn deserialize(fields: [Field; N]) -> Self; diff --git a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts index 86b9410cb5c..c5a9a33add9 100644 --- a/yarn-project/end-to-end/src/e2e_nested_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_nested_contract.test.ts @@ -169,7 +169,7 @@ describe('e2e_nested_contract', () => { it('calls a method with multiple arguments', async () => { logger.info(`Calling main on importer contract`); - await importerContract.methods.main(testContract.address).send().wait(); + await importerContract.methods.main_contract(testContract.address).send().wait(); }, 30_000); it('calls a method no arguments', async () => { From b977dddacc7bf0e765c3fa32e453e8104b3acb5f Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 11 Apr 2024 07:58:12 +0000 Subject: [PATCH 085/123] wip --- .../aztec-nr/aztec/src/oracle/arguments.nr | 4 +- .../contracts/delegator_contract/Nargo.toml | 3 +- .../contracts/delegator_contract/src/main.nr | 9 +-- .../src/transforms/contract_interface.rs | 4 +- .../aztec_macros/src/transforms/events.rs | 2 +- .../aztec_macros/src/transforms/storage.rs | 4 +- .../aztec_macros/src/utils/hir_utils.rs | 30 +++---- .../compiler/noirc_driver/src/lib.rs | 7 +- .../compiler/noirc_frontend/src/hir/mod.rs | 55 +++++++++++-- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 7 +- .../end-to-end/src/e2e_delegate_calls.test.ts | 81 ------------------- 11 files changed, 84 insertions(+), 122 deletions(-) delete mode 100644 yarn-project/end-to-end/src/e2e_delegate_calls.test.ts diff --git a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr index 567490c5550..5c0869023cb 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr @@ -1,7 +1,7 @@ -#[oracle(packArgumentsArray)] +#[oracle(packArguments)] fn pack_arguments_array_oracle(_args: [Field; N]) -> Field {} -#[oracle(packArgumentsArray)] +#[oracle(packArguments)] fn pack_arguments_oracle(_args: [Field]) -> Field {} /// - Pack arguments will notify the simulator that these arguments will be used later at diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/delegator_contract/Nargo.toml index 8299f932ad2..1aad229b828 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/delegator_contract/Nargo.toml @@ -6,4 +6,5 @@ compiler_version = ">=0.25.0" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } -value_note = { path = "../../../aztec-nr/value-note" } \ No newline at end of file +value_note = { path = "../../../aztec-nr/value-note" } +delegated_on = { path = "../delegated_on_contract"} \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 9f85399cdb4..1b0572c55d4 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -5,6 +5,7 @@ contract Delegator { PublicMutable, PrivateSet }; use dep::value_note::value_note::ValueNote; + use dep::delegated_on::DelegatedOn; #[aztec(storage)] struct Storage { @@ -13,13 +14,9 @@ contract Delegator { } #[aztec(private)] - fn private_delegate_set_value( - target_contract: AztecAddress, - target_selector: FunctionSelector, - args: [Field; 2] - ) { + fn private_delegate_set_value(target_contract: AztecAddress, value: Field, owner: AztecAddress) { // Call the target private function - let return_values = context.delegate_call_private_function(target_contract, target_selector, args); + let return_values = DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context); // Copy the return value from the call to this function's return values return_values[0] } diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index da84dd8070a..fcba8ef0f11 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -149,8 +149,8 @@ pub fn update_fn_signatures_in_contract_interface( ) -> Result<(), (AztecMacroError, FileId)> { if let Some((name, _, file_id)) = get_contract_module_data(context, crate_id) { let maybe_interface_struct = - collect_crate_structs(crate_id, context).iter().find_map(|&(_, struct_id)| { - let r#struct = context.def_interner.get_struct(struct_id); + collect_crate_structs(crate_id, context).iter().find_map(|struct_id| { + let r#struct = context.def_interner.get_struct(*struct_id); if r#struct.borrow().name.0.contents == name { Some(r#struct) } else { diff --git a/noir/noir-repo/aztec_macros/src/transforms/events.rs b/noir/noir-repo/aztec_macros/src/transforms/events.rs index 4f2b70453df..b77a5821b81 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/events.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/events.rs @@ -174,7 +174,7 @@ pub fn transform_events( crate_id: &CrateId, context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { - for (_, struct_id) in collect_crate_structs(crate_id, context) { + for struct_id in collect_crate_structs(crate_id, context) { let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(event)")) { transform_event(struct_id, &mut context.def_interner)?; diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 1719baee026..1826670cc98 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -267,8 +267,8 @@ pub fn assign_storage_slots( let traits: Vec<_> = collect_traits(context); if let Some((_, _, file_id)) = get_contract_module_data(context, crate_id) { let maybe_storage_struct = - collect_crate_structs(crate_id, context).iter().find_map(|&(_, struct_id)| { - let r#struct = context.def_interner.get_struct(struct_id); + collect_crate_structs(crate_id, context).iter().find_map(|struct_id| { + let r#struct = context.def_interner.get_struct(*struct_id); let attributes = context.def_interner.struct_attributes(&struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) && r#struct.borrow().id.krate() == *crate_id diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index d238c36c04b..622b389a68f 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -14,7 +14,7 @@ use noirc_frontend::{ use super::ast_utils::is_custom_attribute; -pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec<(String, StructId)> { +pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec { context .def_map(crate_id) .map(|def_map| { @@ -24,21 +24,7 @@ pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec<(S .flat_map(|(_, module)| { module.type_definitions().filter_map(move |typ| { if let ModuleDefId::TypeId(struct_id) = typ { - let module_id = struct_id.module_id(); - let path = context - .fully_qualified_struct_path(context.root_crate_id(), struct_id); - let path = if path.contains("::") { - let prefix = if &module_id.krate == context.root_crate_id() { - "crate" - } else { - "dep" - }; - format!("{}::{}", prefix, path) - } else { - path - }; - - Some((path, struct_id)) + Some(struct_id) } else { None } @@ -121,10 +107,20 @@ pub fn fetch_crate_notes( ) -> Vec<(String, Shared)> { collect_crate_structs(crate_id, context) .iter() - .filter_map(|(path, struct_id)| { + .filter_map(|struct_id| { let r#struct = context.def_interner.get_struct(*struct_id); let attributes = context.def_interner.struct_attributes(struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { + let module_id = struct_id.module_id(); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), *struct_id, true); + let path = if path.contains("::") { + let prefix = + if &module_id.krate == context.root_crate_id() { "crate" } else { "dep" }; + format!("{}::{}", prefix, path) + } else { + path + }; Some((path.clone(), r#struct)) } else { None diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 6fe44780484..6b35bd8d514 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -446,8 +446,11 @@ fn compile_contract_inner( let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { (name, AbiType::from_type(context, &typ)) }); - let path = - context.fully_qualified_struct_path(context.root_crate_id(), typ.id); + let path = context.fully_qualified_struct_path( + context.root_crate_id(), + typ.id, + false, + ); AbiType::Struct { path, fields } }) .collect(); diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index 727a6596df1..ab11eaac0c6 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -137,7 +137,12 @@ impl Context<'_, '_> { /// /// For example, if you project contains a `main.nr` and `foo.nr` and you provide the `main_crate_id` and the /// `bar_struct_id` where the `Bar` struct is inside `foo.nr`, this function would return `foo::Bar` as a [String]. - pub fn fully_qualified_struct_path(&self, crate_id: &CrateId, id: StructId) -> String { + pub fn fully_qualified_struct_path( + &self, + crate_id: &CrateId, + id: StructId, + bfs: bool, + ) -> String { let module_id = id.module_id(); let child_id = module_id.local_id.0; let def_map = @@ -150,9 +155,13 @@ impl Context<'_, '_> { if &module_id.krate == crate_id { module_path } else { - let crates = self - .find_dependencies(crate_id, &module_id.krate) - .expect("The Struct was supposed to be defined in a dependency"); + let crates = if bfs { + self.find_dependencies_bfs(crate_id, &module_id.krate) + .expect("The Struct was supposed to be defined in a dependency") + } else { + self.find_dependencies_dfs(crate_id, &module_id.krate) + .expect("The Struct was supposed to be defined in a dependency") + }; crates.join("::") + "::" + &module_path } } @@ -162,7 +171,7 @@ impl Context<'_, '_> { /// In that case, we will get [lib1,lib2] when looking for a struct defined in lib2, /// re-exported by lib1 and used by the main crate. /// Returns the path from crate_id to target_crate_id - fn find_dependencies( + fn find_dependencies_dfs( &self, crate_id: &CrateId, target_crate_id: &CrateId, @@ -171,7 +180,7 @@ impl Context<'_, '_> { if &dep.crate_id == target_crate_id { return Some(vec![dep.name.to_string()]); } - if let Some(mut path) = self.find_dependencies(&dep.crate_id, target_crate_id) { + if let Some(mut path) = self.find_dependencies_dfs(&dep.crate_id, target_crate_id) { path.insert(0, dep.name.to_string()); return Some(path); } @@ -179,6 +188,40 @@ impl Context<'_, '_> { None } + /// Recursively walks down the crate dependency graph from crate_id until we reach requested crate + /// This is needed in case a library (lib1) re-export a structure defined in another library (lib2) + /// In that case, we will get [lib1,lib2] when looking for a struct defined in lib2, + /// re-exported by lib1 and used by the main crate. + /// Returns the path from crate_id to target_crate_id + fn find_dependencies_bfs( + &self, + crate_id: &CrateId, + target_crate_id: &CrateId, + ) -> Option> { + self.crate_graph[crate_id] + .dependencies + .iter() + .find_map(|dep| { + if &dep.crate_id == target_crate_id { + return Some(vec![dep.name.to_string()]); + } else { + None + } + }) + .or_else(|| { + self.crate_graph[crate_id].dependencies.iter().find_map(|dep| { + if let Some(mut path) = + self.find_dependencies_bfs(&dep.crate_id, target_crate_id) + { + path.insert(0, dep.name.to_string()); + return Some(path); + } else { + None + } + }) + }) + } + pub fn function_meta(&self, func_id: &FuncId) -> &FuncMeta { self.def_interner.function_meta(func_id) } diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 89a60b0ed26..1b03f22c032 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -162,8 +162,11 @@ impl AbiType { let fields = struct_type.get_fields(args); let fields = vecmap(fields, |(name, typ)| (name, Self::from_type(context, &typ))); // For the ABI, we always want to resolve the struct paths from the root crate - let path = - context.fully_qualified_struct_path(context.root_crate_id(), struct_type.id); + let path = context.fully_qualified_struct_path( + context.root_crate_id(), + struct_type.id, + false, + ); Self::Struct { fields, path } } Type::Alias(def, args) => Self::from_type(context, &def.borrow().get_type(args)), diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts deleted file mode 100644 index 45fb4a22e1d..00000000000 --- a/yarn-project/end-to-end/src/e2e_delegate_calls.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { type Wallet } from '@aztec/aztec.js'; -import { DelegatedOnContract, DelegatorContract } from '@aztec/noir-contracts.js'; - -import { setup } from './fixtures/utils.js'; - -describe('e2e_delegate_calls', () => { - let wallet: Wallet; - let delegatorContract: DelegatorContract; - let delegatedOnContract: DelegatedOnContract; - let teardown: () => Promise; - - beforeEach(async () => { - ({ teardown, wallet } = await setup()); - }, 100_000); - - afterEach(() => teardown()); - - beforeEach(async () => { - delegatorContract = await DelegatorContract.deploy(wallet).send().deployed(); - delegatedOnContract = await DelegatedOnContract.deploy(wallet).send().deployed(); - }, 100_000); - - describe('delegates on another contract', () => { - it("runs another contract's private function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .private_delegate_set_value( - delegatedOnContract.address, - delegatedOnContract.methods.private_set_value.selector, - [sentValue, wallet.getCompleteAddress().address], - ) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods - .view_private_value(sentValue, wallet.getCompleteAddress().address) - .simulate(); - - const delegatedOnValue = await delegatedOnContract.methods - .view_private_value(sentValue, wallet.getCompleteAddress().address) - .simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - - it("runs another contract's enqueued public function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .enqueued_delegate_set_value( - delegatedOnContract.address, - delegatedOnContract.methods.public_set_value.selector, - [sentValue], - ) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); - const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - - it("runs another contract's public function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .public_delegate_set_value(delegatedOnContract.address, delegatedOnContract.methods.public_set_value.selector, [ - sentValue, - ]) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); - const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - }); -}); From ed69b1bce08f3f9dc2ae7446b9d7fa9189d4122f Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 11 Apr 2024 09:28:23 +0000 Subject: [PATCH 086/123] adapted to variable returns --- .../aztec-nr/aztec/src/context/interface.nr | 71 +++++++++++-------- .../contracts/delegator_contract/src/main.nr | 10 +-- .../contracts/fpc_contract/src/main.nr | 4 +- .../contracts/lending_contract/src/main.nr | 15 ++-- .../src/transforms/contract_interface.rs | 18 +++-- 5 files changed, 64 insertions(+), 54 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index f8625bd2f4e..1a73ddc43af 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -1,4 +1,7 @@ -use dep::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}, header::Header}; +use dep::protocol_types::{ + abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}, header::Header, + traits::Deserialize +}; use crate::context::private_context::PrivateContext; use crate::context::public_context::PublicContext; @@ -55,82 +58,89 @@ trait PublicContextInterface { fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool; } -struct PrivateCallInterface { +struct PrivateCallInterface { target_contract: AztecAddress, selector: FunctionSelector, - args_hash: Field + args_hash: Field, } -impl PrivateCallInterface { - pub fn call(self, context: &mut PrivateContext) -> [Field; 4] { - context.call_private_function_with_packed_args( +impl PrivateCallInterface { + pub fn call(self, context: &mut PrivateContext) -> T where T: Deserialize { + let returns = context.call_private_function_with_packed_args( self.target_contract, self.selector, self.args_hash, false, false - ) + ); + let unpacked: T = returns.unpack_into(); + unpacked } - pub fn static_call(self, context: &mut PrivateContext) -> [Field; 4] { - context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + pub fn static_call(self, context: &mut PrivateContext) -> T where T: Deserialize { + let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + returns.unpack_into() } - pub fn delegate_call(self, context: &mut PrivateContext) -> [Field; 4] { - context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + pub fn delegate_call(self, context: &mut PrivateContext) -> T where T: Deserialize { + let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + returns.unpack_into() } } struct PrivateVoidCallInterface { target_contract: AztecAddress, selector: FunctionSelector, - args_hash: Field + args_hash: Field, } impl PrivateVoidCallInterface { pub fn call(self, context: &mut PrivateContext) { - let _ = context.call_private_function_with_packed_args( + context.call_private_function_with_packed_args( self.target_contract, self.selector, self.args_hash, false, false - ); + ).assert_empty(); } pub fn static_call(self, context: &mut PrivateContext) { - let _ = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty(); } pub fn delegate_call(self, context: &mut PrivateContext) { - let _ = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true).assert_empty(); } } -struct PublicCallInterface { +struct PublicCallInterface { target_contract: AztecAddress, selector: FunctionSelector, - args_hash: Field + args_hash: Field, } -impl PublicCallInterface { +impl PublicCallInterface { - pub fn call(self, context: &mut PublicContext) -> [Field; 4] { - context.call_public_function_with_packed_args( + pub fn call(self, context: &mut PublicContext) -> T where T: Deserialize { + let returns = context.call_public_function_with_packed_args( self.target_contract, self.selector, self.args_hash, false, false - ) + ); + returns.deserialize_into() } - pub fn static_call(self, context: &mut PublicContext) -> [Field; 4] { - context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false) + pub fn static_call(self, context: &mut PublicContext) -> T where T: Deserialize { + let returns = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + returns.deserialize_into() } - pub fn delegate_call(self, context: &mut PublicContext) -> [Field; 4] { - context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) + pub fn delegate_call(self, context: &mut PublicContext) -> T where T: Deserialize { + let returns = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + returns.deserialize_into() } pub fn enqueue(self, context: &mut PrivateContext) { @@ -159,23 +169,22 @@ struct PublicVoidCallInterface { } impl PublicVoidCallInterface { - pub fn call(self, context: &mut PublicContext) { - let _ = context.call_public_function_with_packed_args( + context.call_public_function_with_packed_args( self.target_contract, self.selector, self.args_hash, false, false - ); + ).assert_empty() } pub fn static_call(self, context: &mut PublicContext) { - let _ = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false); + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty(); } pub fn delegate_call(self, context: &mut PublicContext) { - let _ = context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true); + context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true).assert_empty(); } pub fn enqueue(self, context: &mut PrivateContext) { diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index db6ef8067ec..639d65912b7 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -14,11 +14,13 @@ contract Delegator { } #[aztec(private)] - fn private_delegate_set_value(target_contract: AztecAddress, value: Field, owner: AztecAddress) { + fn private_delegate_set_value( + target_contract: AztecAddress, + value: Field, + owner: AztecAddress + ) -> Field { // Call the target private function - let return_values = DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context); - // Copy the return value from the call to this function's return values - return_values[0] + DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) } #[aztec(private)] diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index a88342384bd..00ca4049a55 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -40,7 +40,7 @@ contract FPC { #[aztec(public)] #[aztec(internal)] fn pay_fee(refund_address: AztecAddress, amount: Field, asset: AztecAddress) { - let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context)[0]; + let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context); // Just do public refunds for the present let _res = Token::at(asset).transfer_public(context.this_address(), refund_address, refund, 0).call(&mut context); } @@ -48,7 +48,7 @@ contract FPC { #[aztec(public)] #[aztec(internal)] fn pay_fee_with_shielded_rebate(amount: Field, asset: AztecAddress, secret_hash: Field) { - let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context)[0]; + let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context); let _res = Token::at(asset).shield(context.this_address(), refund, secret_hash, 0).call(&mut context); } diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index 7582b285a71..b0f9a284286 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -148,10 +148,8 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _withdraw(owner: AztecAddress, recipient: AztecAddress, amount: Field) { - let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); - let asset = Asset::deserialize(asset_raw); - let price_raw = PriceFeed::at(asset.oracle).get_price(0).call(&mut context); - let price = U128::from_integer(price_raw[0]); + let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); + let price = PriceFeed::at(asset.oracle).get_price(0).call(&mut context).price; let coll_loc = storage.collateral.at(owner); let collateral: Field = coll_loc.read(); @@ -198,10 +196,8 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _borrow(owner: AztecAddress, to: AztecAddress, amount: Field) { - let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); - let asset = Asset::deserialize(asset_raw); - let price_raw = PriceFeed::at(asset.oracle).get_price(0).call(&mut context); - let price = U128::from_integer(price_raw[0]); + let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); + let price = PriceFeed::at(asset.oracle).get_price(0).call(&mut context).price; // Fetch collateral and static_debt, compute health of current position let collateral = U128::from_integer(storage.collateral.at(owner).read()); @@ -253,8 +249,7 @@ contract Lending { #[aztec(public)] #[aztec(internal)] fn _repay(owner: AztecAddress, amount: Field, stable_coin: AztecAddress) { - let asset_raw = Lending::at(context.this_address()).update_accumulator().call(&mut context); - let asset = Asset::deserialize(asset_raw); + let asset = Lending::at(context.this_address()).update_accumulator().call(&mut context); // To ensure that private is using the correct token. assert(stable_coin.eq(storage.stable_coin.read())); diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index fcba8ef0f11..7f62dc806b9 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -27,7 +27,7 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { }) .collect::>() .join(", "); - let fn_return_type = func.return_type(); + let fn_return_type: noirc_frontend::UnresolvedType = func.return_type(); let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", SELECTOR_PLACEHOLDER); @@ -70,20 +70,26 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { "let args_hash = 0;".to_string() }; let is_void = if matches!(fn_return_type.typ, UnresolvedTypeData::Unit) { "Void" } else { "" }; + let fn_body = format!( "{} dep::aztec::context::{}{}CallInterface {{ target_contract: self.target_contract, selector: {}, - args_hash + args_hash, }}", - args_hash, aztec_visibility, is_void, fn_selector + args_hash, aztec_visibility, is_void, fn_selector, ); + let return_type_hint = if is_void == "Void" { + "".to_string() + } else { + format!("<{}>", fn_return_type.typ.to_string().replace("plain::", "")) + }; format!( - "pub fn {}(self, {}) -> dep::aztec::context::{}{}CallInterface {{ + "pub fn {}(self, {}) -> dep::aztec::context::{}{}CallInterface{} {{ {} }}", - fn_name, fn_parameters, aztec_visibility, is_void, fn_body + fn_name, fn_parameters, aztec_visibility, is_void, return_type_hint, fn_body ) } @@ -119,8 +125,6 @@ pub fn generate_contract_interface( stubs.join("\n"), ); - //println!("Generated contract interface: {}", contract_interface); - let (contract_interface_ast, errors) = parse_program(&contract_interface); if !errors.is_empty() { dbg!(errors); From 6af7857813b688010b26b69ec1e9487e73295ec8 Mon Sep 17 00:00:00 2001 From: thunkar Date: Thu, 11 Apr 2024 09:48:01 +0000 Subject: [PATCH 087/123] reverted changes --- docs/docs/misc/migration_notes.md | 43 ------------------------------- 1 file changed, 43 deletions(-) diff --git a/docs/docs/misc/migration_notes.md b/docs/docs/misc/migration_notes.md index 1f0bdecfe62..9b6f7c8cef3 100644 --- a/docs/docs/misc/migration_notes.md +++ b/docs/docs/misc/migration_notes.md @@ -51,49 +51,6 @@ Storage layout and note information are now exposed in the TS contract artifact + await pxe.addNote(extendedNote); ``` -### [Aztec.nr] Storage struct annotation - -The storage struct now identified by the annotation `#[aztec(storage)]`, instead of having to rely on it being called `Storage`. - -```diff -- struct Storage { -- ... -- } -+ #[aztec(storage)] -+ struct MyStorageStruct { -+ ... -+ } -``` - -### [Aztec.js] Storage layout and note info - -Storage layout and note information are now exposed in the TS contract artifact - -```diff -- const note = new Note([new Fr(mintAmount), secretHash]); -- const pendingShieldStorageSlot = new Fr(5n); // storage slot for pending_shields -- const noteTypeId = new Fr(84114971101151129711410111011678111116101n); // note type id for TransparentNote -- const extendedNote = new ExtendedNote( -- note, -- admin.address, -- token.address, -- pendingShieldStorageSlot, -- noteTypeId, -- receipt.txHash, -- ); -- await pxe.addNote(extendedNote); -+ const note = new Note([new Fr(mintAmount), secretHash]); -+ const extendedNote = new ExtendedNote( -+ note, -+ admin.address, -+ token.address, -+ TokenContract.storage.pending_shields.slot, -+ TokenContract.notes.TransparentNote.id, -+ receipt.txHash, -+ ); -+ await pxe.addNote(extendedNote); -``` - ### [Aztec.nr] rand oracle is now called unsafe_rand `oracle::rand::rand` has been renamed to `oracle::unsafe_rand::unsafe_rand`. This change was made to communicate that we do not constrain the value in circuit and instead we just trust our PXE. From 49a4219d96358f94dc08e3484bf51d01cc353d42 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 04:42:47 +0000 Subject: [PATCH 088/123] removed unnecesary cahnges --- .../aztec-nr/aztec/src/oracle/arguments.nr | 2 +- .../contracts/delegator_contract/src/main.nr | 45 ++++++++++++++++++- .../acvm-repo/acvm_js/src/foreign_call/mod.rs | 2 +- .../acvm-repo/brillig/src/foreign_call.rs | 3 -- .../simulator/src/acvm/oracle/oracle.ts | 9 +++- .../simulator/src/acvm/oracle/typed_oracle.ts | 4 +- .../src/client/client_execution_context.ts | 2 +- 7 files changed, 56 insertions(+), 11 deletions(-) diff --git a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr index 5c0869023cb..58163233a48 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr @@ -1,4 +1,4 @@ -#[oracle(packArguments)] +#[oracle(packArgumentsArray)] fn pack_arguments_array_oracle(_args: [Field; N]) -> Field {} #[oracle(packArguments)] diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 639d65912b7..05ac0c04e6e 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -20,7 +20,7 @@ contract Delegator { owner: AztecAddress ) -> Field { // Call the target private function - DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) + IDelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) } #[aztec(private)] @@ -55,4 +55,47 @@ contract Delegator { unconstrained fn view_public_value() -> pub Field { storage.current_value.read() } + + struct IDelegatedOn { + target_contract: dep::aztec::protocol_types::address::AztecAddress + } + + impl IDelegatedOn { + pub fn private_set_value( + self, + new_value: Field, + owner: AztecAddress + ) -> dep::aztec::context::PrivateCallInterface { + let mut args_acc: [Field] = [0; 0].as_slice(); + args_acc = args_acc.append(new_value.serialize().as_slice()); + args_acc = args_acc.append(owner.serialize().as_slice()); + + let args_hash = dep::aztec::hash::hash_args(args_acc); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc)); + dep::aztec::context::PrivateCallInterface { + target_contract: self.target_contract, + selector: dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature("private_set_value(Field,(Field))"), + args_hash + } + } + pub fn public_set_value( + self, + new_value: Field + ) -> dep::aztec::context::PublicCallInterface { + let mut args_acc: [Field] = [0; 0].as_slice(); + args_acc = args_acc.append(new_value.serialize().as_slice()); + + let args_hash = dep::aztec::hash::hash_args(args_acc); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc)); + dep::aztec::context::PublicCallInterface { + target_contract: self.target_contract, + selector: dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature("SELECTOR_PLACEHOLDER"), + args_hash + } + } + + pub fn at(target_contract: dep::aztec::protocol_types::address::AztecAddress) -> Self { + Self { target_contract } + } + } } diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs b/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs index 9ccaf733f84..bc23070550e 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs @@ -8,7 +8,7 @@ mod outputs; #[wasm_bindgen(typescript_custom_section)] const FOREIGN_CALL_HANDLER: &'static str = r#" -export type ForeignCallInput = string[] +export type ForeignCallInput = string[] export type ForeignCallOutput = string | string[] /** diff --git a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs index 77e4ee889b2..56e5ab31675 100644 --- a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs +++ b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs @@ -6,7 +6,6 @@ use serde::{Deserialize, Serialize}; pub enum ForeignCallParam { Single(FieldElement), Array(Vec), - Slice(FieldElement, Vec), } impl From for ForeignCallParam { @@ -32,7 +31,6 @@ impl ForeignCallParam { match self { ForeignCallParam::Single(value) => vec![*value], ForeignCallParam::Array(values) => values.clone(), - ForeignCallParam::Slice(_, values) => values.clone(), } } @@ -40,7 +38,6 @@ impl ForeignCallParam { match self { ForeignCallParam::Single(value) => *value, ForeignCallParam::Array(_) => panic!("Expected single value, found array"), - ForeignCallParam::Slice(_, _) => panic!("Expected single value, found slice"), } } } diff --git a/yarn-project/simulator/src/acvm/oracle/oracle.ts b/yarn-project/simulator/src/acvm/oracle/oracle.ts index c9223ae8f1d..cccbb59c2bc 100644 --- a/yarn-project/simulator/src/acvm/oracle/oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/oracle.ts @@ -21,8 +21,13 @@ export class Oracle { return toACVMField(val); } - async packArguments(args: ACVMField[]): Promise { - const packed = await this.typedOracle.packArguments(args.map(fromACVMField)); + async packArgumentsArray(args: ACVMField[]): Promise { + const packed = await this.typedOracle.packArgumentsArray(args.map(fromACVMField)); + return toACVMField(packed); + } + + async packArguments(_length: ACVMField[], values: ACVMField[]): Promise { + const packed = await this.typedOracle.packArgumentsArray(values.map(fromACVMField)); return toACVMField(packed); } diff --git a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts index 4f245732275..e52548cb5c2 100644 --- a/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts +++ b/yarn-project/simulator/src/acvm/oracle/typed_oracle.ts @@ -85,8 +85,8 @@ export abstract class TypedOracle { return Fr.random(); } - packArguments(_args: Fr[]): Promise { - throw new OracleMethodNotAvailableError('packArguments'); + packArgumentsArray(_args: Fr[]): Promise { + throw new OracleMethodNotAvailableError('packArgumentsArray'); } packReturns(_returns: Fr[]): Promise { diff --git a/yarn-project/simulator/src/client/client_execution_context.ts b/yarn-project/simulator/src/client/client_execution_context.ts index b254d4d9bff..a72df65120e 100644 --- a/yarn-project/simulator/src/client/client_execution_context.ts +++ b/yarn-project/simulator/src/client/client_execution_context.ts @@ -174,7 +174,7 @@ export class ClientExecutionContext extends ViewDataOracle { * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArguments(args: Fr[]): Promise { + public packArgumentsArray(args: Fr[]): Promise { return Promise.resolve(this.packedValuesCache.pack(args)); } From 0deee2f70e99dc7849fce0a6b0625c9e7ff3926a Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 04:49:39 +0000 Subject: [PATCH 089/123] more dead code --- noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs index 56e5ab31675..e547b99f0eb 100644 --- a/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs +++ b/noir/noir-repo/acvm-repo/brillig/src/foreign_call.rs @@ -20,12 +20,6 @@ impl From> for ForeignCallParam { } } -impl From<(FieldElement, Vec)> for ForeignCallParam { - fn from((len, values): (FieldElement, Vec)) -> Self { - ForeignCallParam::Slice(len, values) - } -} - impl ForeignCallParam { pub fn fields(&self) -> Vec { match self { From 2a4ada5a972380a0b6fc945bae5021db59d13a5b Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 05:17:39 +0000 Subject: [PATCH 090/123] new test structure, fix --- .../src/e2e_delegate_calls/delegate.test..ts | 72 ++++++++++++++++ .../e2e_delegate_calls/delegate_calls_test.ts | 83 +++++++++++++++++++ .../src/e2e_delegate_calls_legacy.test.ts | 77 +++++++++++++++++ .../src/public/public_execution_context.ts | 2 +- 4 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts create mode 100644 yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts create mode 100644 yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts new file mode 100644 index 00000000000..7830ff9ce80 --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts @@ -0,0 +1,72 @@ +import { DelegateCallsTest } from './delegate_calls_test.js'; + +describe('e2e_delegate_calls', () => { + const t = new DelegateCallsTest('delegate_calls'); + let { delegatorContract, delegatedOnContract, wallet } = t; + + beforeAll(async () => { + await t.applyBaseSnapshots(); + await t.setup(); + // Have to destructure again to ensure we have latest refs. + ({ delegatorContract, delegatedOnContract, wallet } = t); + }); + + afterAll(async () => { + await t.teardown(); + }); + + describe('delegates on another contract', () => { + it("runs another contract's private function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .private_delegate_set_value(delegatedOnContract.address, sentValue, wallet.getCompleteAddress().address) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods + .view_private_value(sentValue, wallet.getCompleteAddress().address) + .simulate(); + + const delegatedOnValue = await delegatedOnContract.methods + .view_private_value(sentValue, wallet.getCompleteAddress().address) + .simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + + it("runs another contract's enqueued public function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .enqueued_delegate_set_value( + delegatedOnContract.address, + delegatedOnContract.methods.public_set_value.selector, + [sentValue], + ) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); + const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + + it("runs another contract's public function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .public_delegate_set_value(delegatedOnContract.address, delegatedOnContract.methods.public_set_value.selector, [ + sentValue, + ]) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); + const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + }); +}); diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts new file mode 100644 index 00000000000..81b0231b3bf --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts @@ -0,0 +1,83 @@ +import { getSchnorrAccount } from '@aztec/accounts/schnorr'; +import { + type AccountWallet, + type DebugLogger, + createDebugLogger, +} from '@aztec/aztec.js'; +import { DelegatedOnContract, DelegatorContract, DelegatorContract } from '@aztec/noir-contracts.js'; + +import { + SnapshotManager, + type SubsystemsContext, + addAccounts, +} from '../fixtures/snapshot_manager.js'; + +const { E2E_DATA_PATH: dataPath } = process.env; + +export class DelegateCallsTest { + private snapshotManager: SnapshotManager; + logger: DebugLogger; + wallet!: AccountWallet; + delegatorContract!: DelegatorContract; + delegatedOnContract!: DelegatedOnContract; + + constructor(testName: string) { + this.logger = createDebugLogger(`aztec:e2e_delegate_calls:${testName}`); + this.snapshotManager = new SnapshotManager(`e2e_delegate_calls/${testName}`, dataPath); + } + + /** + * Adds two state shifts to snapshot manager. + * 1. Add 3 accounts. + * 2. Publicly deploy accounts, deploy token contract and a "bad account". + */ + async applyBaseSnapshots() { + await this.snapshotManager.snapshot('accounts', addAccounts(1, this.logger), async ({ accountKeys }, { pxe }) => { + const accountManager = getSchnorrAccount(pxe, accountKeys[0][0], accountKeys[0][1], 1); + this.wallet = await accountManager.getWallet(); + this.logger.verbose(`Wallet address: ${this.wallet.getAddress()}`); + }); + + await this.snapshotManager.snapshot( + 'e2e_delegate_calls', + async () => { + + this.logger.verbose(`Deploying DelegatorContract...`); + this.delegatorContract = await DelegatorContract.deploy( + this.wallet, + ) + .send() + .deployed(); + this.logger.verbose(`Delegator deployed to ${this.delegatorContract.address}`); + + this.logger.verbose(`Deploying DelegatedOnContract...`); + this.delegatedOnContract = await DelegatedOnContract.deploy(this.wallet).send().deployed(); + + return { delegatorContractAddress: this.delegatorContract.address, delegatedOnContractAddress: this.delegatedOnContract.address }; + }, + async ({ delegatorContractAddress, delegatedOnContractAddress }) => { + // Restore the token contract state. + this.delegatorContract = await DelegatorContract.at(delegatorContractAddress, this.wallet); + this.logger.verbose(`Delegator contract address: ${this.delegatorContract.address}`); + + this.delegatedOnContract = await DelegatedOnContract.at(delegatedOnContractAddress, this.wallet); + this.logger.verbose(`DelegatedOn address: ${this.delegatedOnContract.address}`); + + }, + ); + } + + async setup() { + await this.snapshotManager.setup(); + } + + snapshot = ( + name: string, + apply: (context: SubsystemsContext) => Promise, + restore: (snapshotData: T, context: SubsystemsContext) => Promise = () => Promise.resolve(), + ): Promise => this.snapshotManager.snapshot(name, apply, restore); + + async teardown() { + await this.snapshotManager.teardown(); + } +} diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts new file mode 100644 index 00000000000..dbd628905cc --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts @@ -0,0 +1,77 @@ +import { type Wallet } from '@aztec/aztec.js'; +import { DelegatedOnContract, DelegatorContract } from '@aztec/noir-contracts.js'; + +import { setup } from './fixtures/utils.js'; + +describe('e2e_delegate_calls', () => { + let wallet: Wallet; + let delegatorContract: DelegatorContract; + let delegatedOnContract: DelegatedOnContract; + let teardown: () => Promise; + + beforeEach(async () => { + ({ teardown, wallet } = await setup()); + }, 100_000); + + afterEach(() => teardown()); + + beforeEach(async () => { + delegatorContract = await DelegatorContract.deploy(wallet).send().deployed(); + delegatedOnContract = await DelegatedOnContract.deploy(wallet).send().deployed(); + }, 100_000); + + describe('delegates on another contract', () => { + it("runs another contract's private function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .private_delegate_set_value(delegatedOnContract.address, sentValue, wallet.getCompleteAddress().address) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods + .view_private_value(sentValue, wallet.getCompleteAddress().address) + .simulate(); + + const delegatedOnValue = await delegatedOnContract.methods + .view_private_value(sentValue, wallet.getCompleteAddress().address) + .simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + + it("runs another contract's enqueued public function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .enqueued_delegate_set_value( + delegatedOnContract.address, + delegatedOnContract.methods.public_set_value.selector, + [sentValue], + ) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); + const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + + it("runs another contract's public function on delegator's storage", async () => { + const sentValue = 42n; + await delegatorContract.methods + .public_delegate_set_value(delegatedOnContract.address, delegatedOnContract.methods.public_set_value.selector, [ + sentValue, + ]) + .send() + .wait(); + + const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); + const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); + + expect(delegatedOnValue).toEqual(0n); + expect(delegatorValue).toEqual(sentValue); + }, 100_000); + }); +}); diff --git a/yarn-project/simulator/src/public/public_execution_context.ts b/yarn-project/simulator/src/public/public_execution_context.ts index d35546296d8..e74c0d78e77 100644 --- a/yarn-project/simulator/src/public/public_execution_context.ts +++ b/yarn-project/simulator/src/public/public_execution_context.ts @@ -98,7 +98,7 @@ export class PublicExecutionContext extends TypedOracle { * Pack the given array of arguments. * @param args - Arguments to pack */ - public packArguments(args: Fr[]): Promise { + public packArgumentsArray(args: Fr[]): Promise { return Promise.resolve(this.packedValuesCache.pack(args)); } From 91ea029fd6b3d0f5a378499495d2263b4c4f9ee6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 05:31:47 +0000 Subject: [PATCH 091/123] Clippy pass, remove legacy test --- .../contracts/delegator_contract/src/main.nr | 61 ++------------- .../src/transforms/contract_interface.rs | 2 +- .../aztec_macros/src/transforms/storage.rs | 2 +- .../aztec_macros/src/utils/hir_utils.rs | 2 +- .../compiler/noirc_frontend/src/hir/mod.rs | 4 +- .../{delegate.test..ts => delegate.test.ts} | 0 .../e2e_delegate_calls/delegate_calls_test.ts | 27 ++----- .../src/e2e_delegate_calls_legacy.test.ts | 77 ------------------- 8 files changed, 18 insertions(+), 157 deletions(-) rename yarn-project/end-to-end/src/e2e_delegate_calls/{delegate.test..ts => delegate.test.ts} (100%) delete mode 100644 yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts diff --git a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr index 05ac0c04e6e..939c2f1907f 100644 --- a/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/delegator_contract/src/main.nr @@ -20,25 +20,17 @@ contract Delegator { owner: AztecAddress ) -> Field { // Call the target private function - IDelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) + DelegatedOn::at(target_contract).private_set_value(value, owner).delegate_call(&mut context) } #[aztec(private)] - fn enqueued_delegate_set_value( - target_contract: AztecAddress, - target_selector: FunctionSelector, - args: [Field; 1] - ) { - context.delegate_call_public_function(target_contract, target_selector, args); + fn enqueued_delegate_set_value(target_contract: AztecAddress, value: Field) { + DelegatedOn::at(target_contract).public_set_value(value).delegate_enqueue(&mut context) } #[aztec(public)] - fn public_delegate_set_value( - target_contract: AztecAddress, - target_selector: FunctionSelector, - args: [Field; 1] - ) { - let _result: Field = context.delegate_call_public_function(target_contract, target_selector, args).deserialize_into(); + fn public_delegate_set_value(target_contract: AztecAddress, value: Field) -> Field { + DelegatedOn::at(target_contract).public_set_value(value).delegate_call(&mut context) } unconstrained fn view_private_value(amount: Field, owner: AztecAddress) -> pub Field { @@ -55,47 +47,4 @@ contract Delegator { unconstrained fn view_public_value() -> pub Field { storage.current_value.read() } - - struct IDelegatedOn { - target_contract: dep::aztec::protocol_types::address::AztecAddress - } - - impl IDelegatedOn { - pub fn private_set_value( - self, - new_value: Field, - owner: AztecAddress - ) -> dep::aztec::context::PrivateCallInterface { - let mut args_acc: [Field] = [0; 0].as_slice(); - args_acc = args_acc.append(new_value.serialize().as_slice()); - args_acc = args_acc.append(owner.serialize().as_slice()); - - let args_hash = dep::aztec::hash::hash_args(args_acc); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc)); - dep::aztec::context::PrivateCallInterface { - target_contract: self.target_contract, - selector: dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature("private_set_value(Field,(Field))"), - args_hash - } - } - pub fn public_set_value( - self, - new_value: Field - ) -> dep::aztec::context::PublicCallInterface { - let mut args_acc: [Field] = [0; 0].as_slice(); - args_acc = args_acc.append(new_value.serialize().as_slice()); - - let args_hash = dep::aztec::hash::hash_args(args_acc); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc)); - dep::aztec::context::PublicCallInterface { - target_contract: self.target_contract, - selector: dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature("SELECTOR_PLACEHOLDER"), - args_hash - } - } - - pub fn at(target_contract: dep::aztec::protocol_types::address::AztecAddress) -> Self { - Self { target_contract } - } - } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 7f62dc806b9..4224d43b88a 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -33,7 +33,7 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let parameters = func.parameters(); - let args_hash = if parameters.len() > 0 { + let args_hash = if parameters.is_empty() { let call_args = func .parameters() .iter() diff --git a/noir/noir-repo/aztec_macros/src/transforms/storage.rs b/noir/noir-repo/aztec_macros/src/transforms/storage.rs index 1826670cc98..9135be32443 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/storage.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/storage.rs @@ -269,7 +269,7 @@ pub fn assign_storage_slots( let maybe_storage_struct = collect_crate_structs(crate_id, context).iter().find_map(|struct_id| { let r#struct = context.def_interner.get_struct(*struct_id); - let attributes = context.def_interner.struct_attributes(&struct_id); + let attributes = context.def_interner.struct_attributes(struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(storage)")) && r#struct.borrow().id.krate() == *crate_id { diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 622b389a68f..a6488ea2943 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -32,7 +32,7 @@ pub fn collect_crate_structs(crate_id: &CrateId, context: &HirContext) -> Vec Vec { diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index ab11eaac0c6..c1d4b9420e1 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -203,7 +203,7 @@ impl Context<'_, '_> { .iter() .find_map(|dep| { if &dep.crate_id == target_crate_id { - return Some(vec![dep.name.to_string()]); + Some(vec![dep.name.to_string()]) } else { None } @@ -214,7 +214,7 @@ impl Context<'_, '_> { self.find_dependencies_bfs(&dep.crate_id, target_crate_id) { path.insert(0, dep.name.to_string()); - return Some(path); + Some(path) } else { None } diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts similarity index 100% rename from yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test..ts rename to yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts index 81b0231b3bf..457408a05f7 100644 --- a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts +++ b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate_calls_test.ts @@ -1,16 +1,8 @@ import { getSchnorrAccount } from '@aztec/accounts/schnorr'; -import { - type AccountWallet, - type DebugLogger, - createDebugLogger, -} from '@aztec/aztec.js'; -import { DelegatedOnContract, DelegatorContract, DelegatorContract } from '@aztec/noir-contracts.js'; +import { type AccountWallet, type DebugLogger, createDebugLogger } from '@aztec/aztec.js'; +import { DelegatedOnContract, DelegatorContract } from '@aztec/noir-contracts.js'; -import { - SnapshotManager, - type SubsystemsContext, - addAccounts, -} from '../fixtures/snapshot_manager.js'; +import { SnapshotManager, type SubsystemsContext, addAccounts } from '../fixtures/snapshot_manager.js'; const { E2E_DATA_PATH: dataPath } = process.env; @@ -41,19 +33,17 @@ export class DelegateCallsTest { await this.snapshotManager.snapshot( 'e2e_delegate_calls', async () => { - this.logger.verbose(`Deploying DelegatorContract...`); - this.delegatorContract = await DelegatorContract.deploy( - this.wallet, - ) - .send() - .deployed(); + this.delegatorContract = await DelegatorContract.deploy(this.wallet).send().deployed(); this.logger.verbose(`Delegator deployed to ${this.delegatorContract.address}`); this.logger.verbose(`Deploying DelegatedOnContract...`); this.delegatedOnContract = await DelegatedOnContract.deploy(this.wallet).send().deployed(); - return { delegatorContractAddress: this.delegatorContract.address, delegatedOnContractAddress: this.delegatedOnContract.address }; + return { + delegatorContractAddress: this.delegatorContract.address, + delegatedOnContractAddress: this.delegatedOnContract.address, + }; }, async ({ delegatorContractAddress, delegatedOnContractAddress }) => { // Restore the token contract state. @@ -62,7 +52,6 @@ export class DelegateCallsTest { this.delegatedOnContract = await DelegatedOnContract.at(delegatedOnContractAddress, this.wallet); this.logger.verbose(`DelegatedOn address: ${this.delegatedOnContract.address}`); - }, ); } diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts deleted file mode 100644 index dbd628905cc..00000000000 --- a/yarn-project/end-to-end/src/e2e_delegate_calls_legacy.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { type Wallet } from '@aztec/aztec.js'; -import { DelegatedOnContract, DelegatorContract } from '@aztec/noir-contracts.js'; - -import { setup } from './fixtures/utils.js'; - -describe('e2e_delegate_calls', () => { - let wallet: Wallet; - let delegatorContract: DelegatorContract; - let delegatedOnContract: DelegatedOnContract; - let teardown: () => Promise; - - beforeEach(async () => { - ({ teardown, wallet } = await setup()); - }, 100_000); - - afterEach(() => teardown()); - - beforeEach(async () => { - delegatorContract = await DelegatorContract.deploy(wallet).send().deployed(); - delegatedOnContract = await DelegatedOnContract.deploy(wallet).send().deployed(); - }, 100_000); - - describe('delegates on another contract', () => { - it("runs another contract's private function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .private_delegate_set_value(delegatedOnContract.address, sentValue, wallet.getCompleteAddress().address) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods - .view_private_value(sentValue, wallet.getCompleteAddress().address) - .simulate(); - - const delegatedOnValue = await delegatedOnContract.methods - .view_private_value(sentValue, wallet.getCompleteAddress().address) - .simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - - it("runs another contract's enqueued public function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .enqueued_delegate_set_value( - delegatedOnContract.address, - delegatedOnContract.methods.public_set_value.selector, - [sentValue], - ) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); - const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - - it("runs another contract's public function on delegator's storage", async () => { - const sentValue = 42n; - await delegatorContract.methods - .public_delegate_set_value(delegatedOnContract.address, delegatedOnContract.methods.public_set_value.selector, [ - sentValue, - ]) - .send() - .wait(); - - const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); - const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); - - expect(delegatedOnValue).toEqual(0n); - expect(delegatorValue).toEqual(sentValue); - }, 100_000); - }); -}); From 41df50ff1ce3d8ed06e398c0dd33d5bd2afe92c1 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 07:11:17 +0000 Subject: [PATCH 092/123] clippy pass and comments --- noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index c1d4b9420e1..c8de1fc0447 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -188,7 +188,8 @@ impl Context<'_, '_> { None } - /// Recursively walks down the crate dependency graph from crate_id until we reach requested crate + /// Tries to find the requested crate in the current one's dependencies, + /// otherwise walks down the crate dependency graph from crate_id until we reach it. /// This is needed in case a library (lib1) re-export a structure defined in another library (lib2) /// In that case, we will get [lib1,lib2] when looking for a struct defined in lib2, /// re-exported by lib1 and used by the main crate. From 5d691543cd12b6d29e5c332963b490220e03c3fa Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 08:19:37 +0000 Subject: [PATCH 093/123] fix --- .../src/e2e_delegate_calls/delegate.test.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts index 7830ff9ce80..03246dcff0f 100644 --- a/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts +++ b/yarn-project/end-to-end/src/e2e_delegate_calls/delegate.test.ts @@ -37,14 +37,7 @@ describe('e2e_delegate_calls', () => { it("runs another contract's enqueued public function on delegator's storage", async () => { const sentValue = 42n; - await delegatorContract.methods - .enqueued_delegate_set_value( - delegatedOnContract.address, - delegatedOnContract.methods.public_set_value.selector, - [sentValue], - ) - .send() - .wait(); + await delegatorContract.methods.enqueued_delegate_set_value(delegatedOnContract.address, sentValue).send().wait(); const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); @@ -55,12 +48,7 @@ describe('e2e_delegate_calls', () => { it("runs another contract's public function on delegator's storage", async () => { const sentValue = 42n; - await delegatorContract.methods - .public_delegate_set_value(delegatedOnContract.address, delegatedOnContract.methods.public_set_value.selector, [ - sentValue, - ]) - .send() - .wait(); + await delegatorContract.methods.public_delegate_set_value(delegatedOnContract.address, sentValue).send().wait(); const delegatorValue = await delegatorContract.methods.view_public_value().simulate(); const delegatedOnValue = await delegatedOnContract.methods.view_public_value().simulate(); From acc55e985ee14a552fc965a0b3e74a23c20d8880 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 08:57:16 +0000 Subject: [PATCH 094/123] fixes --- .../aztec-nr/easy-private-state/src/lib.nr | 2 -- .../contracts/fpc_contract/src/main.nr | 13 ++++++------- .../simulator/src/client/private_execution.test.ts | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/noir-projects/aztec-nr/easy-private-state/src/lib.nr b/noir-projects/aztec-nr/easy-private-state/src/lib.nr index 2c92db18806..ad5150bfbb0 100644 --- a/noir-projects/aztec-nr/easy-private-state/src/lib.nr +++ b/noir-projects/aztec-nr/easy-private-state/src/lib.nr @@ -1,5 +1,3 @@ mod easy_private_uint; use crate::easy_private_uint::EasyPrivateUint; -// Reexporting so it's possible to automatically generate compute_note_hash_and_nullifier -use dep::value_note; diff --git a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr index 00ca4049a55..f7636711d0e 100644 --- a/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr @@ -21,20 +21,20 @@ contract FPC { #[aztec(private)] fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { assert(asset == storage.other_asset.read_private()); - let _res = Token::at(asset).unshield(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); + Token::at(asset).unshield(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); FPC::at(context.this_address()).pay_fee_with_shielded_rebate(amount, asset, secret_hash).enqueue(&mut context); } #[aztec(private)] fn fee_entrypoint_public(amount: Field, asset: AztecAddress, nonce: Field) { - let _void = FPC::at(context.this_address()).prepare_fee(context.msg_sender(), amount, asset, nonce).enqueue(&mut context); - let _void = FPC::at(context.this_address()).pay_fee(context.msg_sender(), amount, asset).enqueue(&mut context); + FPC::at(context.this_address()).prepare_fee(context.msg_sender(), amount, asset, nonce).enqueue(&mut context); + FPC::at(context.this_address()).pay_fee(context.msg_sender(), amount, asset).enqueue(&mut context); } #[aztec(public)] #[aztec(internal)] fn prepare_fee(from: AztecAddress, amount: Field, asset: AztecAddress, nonce: Field) { - let _res = Token::at(asset).transfer_public(from, context.this_address(), amount, nonce).call(&mut context); + Token::at(asset).transfer_public(from, context.this_address(), amount, nonce).call(&mut context); } #[aztec(public)] @@ -42,14 +42,13 @@ contract FPC { fn pay_fee(refund_address: AztecAddress, amount: Field, asset: AztecAddress) { let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context); // Just do public refunds for the present - let _res = Token::at(asset).transfer_public(context.this_address(), refund_address, refund, 0).call(&mut context); + Token::at(asset).transfer_public(context.this_address(), refund_address, refund, 0).call(&mut context); } #[aztec(public)] #[aztec(internal)] fn pay_fee_with_shielded_rebate(amount: Field, asset: AztecAddress, secret_hash: Field) { let refund = GasToken::at(storage.gas_token_address.read_public()).pay_fee(amount).call(&mut context); - - let _res = Token::at(asset).shield(context.this_address(), refund, secret_hash, 0).call(&mut context); + Token::at(asset).shield(context.this_address(), refund, secret_hash, 0).call(&mut context); } } diff --git a/yarn-project/simulator/src/client/private_execution.test.ts b/yarn-project/simulator/src/client/private_execution.test.ts index df4257032b7..a4ddfd72f1c 100644 --- a/yarn-project/simulator/src/client/private_execution.test.ts +++ b/yarn-project/simulator/src/client/private_execution.test.ts @@ -490,7 +490,7 @@ describe('Private Execution test suite', () => { it('test function should be callable through autogenerated interface', async () => { const testAddress = AztecAddress.random(); - const parentArtifact = getFunctionArtifact(ImportTestContractArtifact, 'main'); + const parentArtifact = getFunctionArtifact(ImportTestContractArtifact, 'main_contract'); const testCodeGenSelector = FunctionSelector.fromNameAndParameters( testCodeGenArtifact.name, testCodeGenArtifact.parameters, From b1c5ad2cd531dd34e92980b9e9c1df6f76959289 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 09:42:34 +0000 Subject: [PATCH 095/123] facepalmus maximus --- .../noir-repo/aztec_macros/src/transforms/contract_interface.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 4224d43b88a..9c13d010491 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -33,7 +33,7 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let parameters = func.parameters(); - let args_hash = if parameters.is_empty() { + let args_hash = if !parameters.is_empty() { let call_args = func .parameters() .iter() From 3fb5d7ccf0b4af0fadd363fe29bdf059d463131c Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 10:56:38 +0000 Subject: [PATCH 096/123] corrected signatures --- .../src/transforms/contract_interface.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 9c13d010491..8bf6cb70ae4 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -1,10 +1,9 @@ use noirc_frontend::{ graph::CrateId, - hir_def::function::Parameters, macros_api::{FileId, HirContext, HirExpression, HirLiteral, HirStatement}, parse_program, parser::SortedModule, - NoirFunction, UnresolvedTypeData, + NoirFunction, Type, UnresolvedTypeData, }; use crate::utils::{ @@ -139,11 +138,11 @@ pub fn generate_contract_interface( Ok(()) } -fn compute_fn_signature(fn_name: &str, parameters: Parameters) -> String { +fn compute_fn_signature(fn_name: &str, parameters: &[Type]) -> String { format!( "{}({})", fn_name, - parameters.iter().map(|(_, typ, _)| signature_of_type(typ)).collect::>().join(", ") + parameters.iter().map(|typ| signature_of_type(typ)).collect::>().join(",") ) } @@ -152,6 +151,7 @@ pub fn update_fn_signatures_in_contract_interface( context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { if let Some((name, _, file_id)) = get_contract_module_data(context, crate_id) { + println!("Contract module found: {}", name); let maybe_interface_struct = collect_crate_structs(crate_id, context).iter().find_map(|struct_id| { let r#struct = context.def_interner.get_struct(*struct_id); @@ -173,7 +173,14 @@ pub fn update_fn_signatures_in_contract_interface( continue; } - let fn_signature = compute_fn_signature(name, fn_parameters.clone()); + let fn_signature = compute_fn_signature( + name, + &fn_parameters + .iter() + .skip(1) + .map(|(_, typ, _)| typ.clone()) + .collect::>(), + ); let hir_func = context.def_interner.function(func_id).block(&context.def_interner); let call_interface_constructor_statement = context.def_interner.statement( hir_func From 9f0459e7f7c1101666869946f75f9ccb0d22ea9e Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 11:08:34 +0000 Subject: [PATCH 097/123] clippy pass --- .../noir-repo/aztec_macros/src/transforms/contract_interface.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 8bf6cb70ae4..0a162ce583b 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -142,7 +142,7 @@ fn compute_fn_signature(fn_name: &str, parameters: &[Type]) -> String { format!( "{}({})", fn_name, - parameters.iter().map(|typ| signature_of_type(typ)).collect::>().join(",") + parameters.iter().map(signature_of_type).collect::>().join(",") ) } From 131e0be3e9fa5d49bcfabc37e4075adf671fb0a3 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 11:52:13 +0000 Subject: [PATCH 098/123] updated ci config --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9a6268b2c75..abb3aac9a18 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -808,7 +808,7 @@ jobs: - *setup_env - run: name: "Test" - command: cond_spot_run_compose end-to-end 4 ./scripts/docker-compose.yml TEST=e2e_delegate_calls.test.ts + command: cond_spot_run_container end-to-end 4 ./src/e2e_delegate_calls/ aztec_manifest_key: end-to-end <<: *defaults_e2e_test From de408a98ccd9a488119929605ff9bfa3694fb240 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 12:05:01 +0000 Subject: [PATCH 099/123] more ci config --- yarn-project/end-to-end/Earthfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/yarn-project/end-to-end/Earthfile b/yarn-project/end-to-end/Earthfile index 65a01a57966..de345d5dbd7 100644 --- a/yarn-project/end-to-end/Earthfile +++ b/yarn-project/end-to-end/Earthfile @@ -157,8 +157,10 @@ e2e-static-calls: DO +E2E_TEST --test=e2e_static_calls.test.ts --e2e_mode=$e2e_mode e2e-delegate-calls: - ARG e2e_mode=local - DO +E2E_TEST --test=e2e_delegate_calls.test.ts --e2e_mode=$e2e_mode + LOCALLY + WITH DOCKER --load end-to-end=../+end-to-end + RUN docker run --rm -e LOG_LEVEL=silent -e DEBUG=aztec:e2e* end-to-end ./src/e2e_delegate_calls/ + END e2e-non-contract-account: ARG e2e_mode=local From 98506813f403e777ca920fefa03174aabb6b8217 Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 16:10:33 +0000 Subject: [PATCH 100/123] yeeted manual interfaces and context.call_* --- .../aztec-nr/aztec/src/context/interface.nr | 1 + .../app_subscription_contract/Nargo.toml | 2 + .../app_subscription_contract/src/main.nr | 34 +++----- .../benchmarking_contract/src/main.nr | 7 +- .../contracts/card_game_contract/src/main.nr | 22 +---- .../contracts/child_contract/src/main.nr | 18 +---- .../contracts/claim_contract/Nargo.toml | 1 + .../claim_contract/src/interfaces.nr | 37 --------- .../contracts/claim_contract/src/main.nr | 7 +- .../crowdfunding_contract/Nargo.toml | 1 + .../crowdfunding_contract/src/interfaces.nr | 27 ------- .../crowdfunding_contract/src/main.nr | 18 +---- .../docs_example_contract/src/main.nr | 23 +----- .../easy_private_voting_contract/src/main.nr | 6 +- .../contracts/escrow_contract/Nargo.toml | 1 + .../contracts/escrow_contract/src/main.nr | 9 +-- .../contracts/slow_tree_contract/Nargo.toml | 1 - .../contracts/slow_tree_contract/src/main.nr | 1 - .../stateful_test_contract/src/main.nr | 11 +-- .../contracts/test_contract/src/main.nr | 6 +- .../token_blacklist_contract/Nargo.toml | 1 + .../src/interfaces.nr | 45 ----------- .../token_blacklist_contract/src/main.nr | 63 +++++++-------- .../token_bridge_contract/Nargo.toml | 1 + .../token_bridge_contract/src/main.nr | 11 ++- .../src/token_interface.nr | 59 -------------- .../contracts/token_contract/src/main.nr | 13 +-- .../contracts/uniswap_contract/Nargo.toml | 2 + .../uniswap_contract/src/interfaces.nr | 80 ------------------- .../contracts/uniswap_contract/src/main.nr | 43 ++++------ .../src/transforms/contract_interface.rs | 1 - 31 files changed, 99 insertions(+), 453 deletions(-) delete mode 100644 noir-projects/noir-contracts/contracts/claim_contract/src/interfaces.nr delete mode 100644 noir-projects/noir-contracts/contracts/crowdfunding_contract/src/interfaces.nr delete mode 100644 noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr delete mode 100644 noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr delete mode 100644 noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index c79f095a8e0..927c759b3c9 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -5,6 +5,7 @@ use dep::protocol_types::{ use crate::context::private_context::PrivateContext; use crate::context::public_context::PublicContext; +use crate::context::avm_context::AvmContext; use crate::context::gas::GasOpts; use crate::context::public_context::FunctionReturns; diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/app_subscription_contract/Nargo.toml index 34df286511b..cf460fd9497 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/Nargo.toml @@ -7,3 +7,5 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } authwit = { path = "../../../aztec-nr/authwit" } +gas_token = { path = "../gas_token_contract" } +token = { path = "../token_contract" } \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr index 999f07771bd..eb316f30186 100644 --- a/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/app_subscription_contract/src/main.nr @@ -17,6 +17,9 @@ contract AppSubscription { use crate::subscription_note::{SubscriptionNote, SUBSCRIPTION_NOTE_LEN}; + use dep::gas_token::GasToken; + use dep::token::Token; + #[aztec(storage)] struct Storage { // The following is only needed in private but we use ShareImmutable here instead of PrivateImmutable because @@ -44,19 +47,11 @@ contract AppSubscription { note.remaining_txs -= 1; storage.subscriptions.at(user_address).replace(&mut note, true); - context.call_public_function( - storage.gas_token_address.read_private(), - FunctionSelector::from_signature("pay_fee(Field)"), - [42] - ); + GasToken::at(storage.gas_token_address.read_private()).pay_fee(42).enqueue(&mut context); context.capture_min_revertible_side_effect_counter(); - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("assert_not_expired(Field)"), - [note.expiry_block_number] - ); + AppSubscription::at(context.this_address()).assert_not_expired(note.expiry_block_number).enqueue(&mut context); payload.execute_calls(&mut context, storage.target_address.read_private()); } @@ -102,20 +97,15 @@ contract AppSubscription { ) { assert(tx_count as u64 <= SUBSCRIPTION_TXS as u64); - let _ = context.call_private_function( - storage.subscription_token_address.read_private(), - FunctionSelector::from_signature("transfer((Field),(Field),Field,Field)"), - [ - context.msg_sender().to_field(), storage.subscription_recipient_address.read_private().to_field(), storage.subscription_price.read_private(), nonce - ] - ); + Token::at(storage.subscription_token_address.read_private()).transfer( + context.msg_sender(), + storage.subscription_recipient_address.read_private(), + storage.subscription_price.read_private(), + nonce + ).call(&mut context); // Assert that the given expiry_block_number < current_block_number + SUBSCRIPTION_DURATION_IN_BLOCKS. - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("assert_block_number(Field)"), - [expiry_block_number] - ); + AppSubscription::at(context.this_address()).assert_block_number(expiry_block_number).enqueue(&mut context); let mut subscription_note = SubscriptionNote::new(subscriber_address, expiry_block_number, tx_count); if (!is_initialized(subscriber_address)) { diff --git a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr index 4e688ceb987..38511fc3a9f 100644 --- a/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/benchmarking_contract/src/main.nr @@ -44,12 +44,7 @@ contract Benchmarking { fn increment_balance(owner: AztecAddress, value: Field) { let current = storage.balances.at(owner).read(); storage.balances.at(owner).write(current + value); - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("broadcast((Field))"), - [owner.to_field()], - GasOpts::default() - ).assert_empty(); + Benchmarking::at(context.this_address()).broadcast(owner).call(&mut context); } // Emits a public log. diff --git a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr index 1e54f0c2866..d4416eff7cd 100644 --- a/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/card_game_contract/src/main.nr @@ -39,13 +39,8 @@ contract CardGame { collection.remove_cards(cards, player); let mut game_deck = storage.game_decks.at(game as Field).at(player); let _added_to_game_deck = game_deck.add_cards(cards, player); - let selector = FunctionSelector::from_signature("on_game_joined(u32,(Field),u32)"); let strength = compute_deck_strength(cards); - context.call_public_function( - context.this_address(), - selector, - [game as Field, player.to_field(), strength] - ); + CardGame::at(context.this_address()).on_game_joined(game, player, strength as u32).enqueue(&mut context); } #[aztec(public)] @@ -75,13 +70,8 @@ contract CardGame { let mut game_deck = storage.game_decks.at(game as Field).at(player); game_deck.remove_cards([card], player); - let selector = FunctionSelector::from_signature("on_card_played(u32,(Field),Field)"); // docs:start:call_public_function - context.call_public_function( - context.this_address(), - selector, - [game as Field, player.to_field(), card.to_field()] - ); + CardGame::at(context.this_address()).on_card_played(game, player, card.to_field()).enqueue(&mut context); // docs:end:call_public_function } @@ -107,13 +97,7 @@ contract CardGame { let mut collection = storage.collections.at(player); let _inserted_cards = collection.add_cards(cards, player); - - let selector = FunctionSelector::from_signature("on_cards_claimed(u32,(Field),Field)"); - context.call_public_function( - context.this_address(), - selector, - [game as Field, player.to_field(), pedersen_hash(cards_fields, 0)] - ); + CardGame::at(context.this_address()).on_cards_claimed(game, player, pedersen_hash(cards_fields, 0)).enqueue(&mut context); } #[aztec(public)] diff --git a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr index 8304aaecb3b..15117e2dbfa 100644 --- a/noir-projects/noir-contracts/contracts/child_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/child_contract/src/main.nr @@ -94,14 +94,7 @@ contract Child { #[aztec(public)] fn set_value_twice_with_nested_first() { - let pub_set_value_selector = FunctionSelector::from_signature("pub_set_value(Field)"); - let _result: Field = context.call_public_function( - context.this_address(), - pub_set_value_selector, - [10], - GasOpts::default() - ).deserialize_into(); - + let _result = Child::at(context.this_address()).pub_set_value(10).call(&mut context); storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); } @@ -110,13 +103,6 @@ contract Child { fn set_value_twice_with_nested_last() { storage.current_value.write(20); emit_unencrypted_log(&mut context, 20); - - let pub_set_value_selector = FunctionSelector::from_signature("pub_set_value(Field)"); - let _result: Field = context.call_public_function( - context.this_address(), - pub_set_value_selector, - [10], - GasOpts::default() - ).deserialize_into(); + let _result = Child::at(context.this_address()).pub_set_value(10).call(&mut context); } } diff --git a/noir-projects/noir-contracts/contracts/claim_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/claim_contract/Nargo.toml index 1db74bdf3ac..7d81995453f 100644 --- a/noir-projects/noir-contracts/contracts/claim_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/claim_contract/Nargo.toml @@ -7,3 +7,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } value_note = { path = "../../../aztec-nr/value-note" } +token = { path = "../token_contract" } diff --git a/noir-projects/noir-contracts/contracts/claim_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/claim_contract/src/interfaces.nr deleted file mode 100644 index a7e14c8d9fc..00000000000 --- a/noir-projects/noir-contracts/contracts/claim_contract/src/interfaces.nr +++ /dev/null @@ -1,37 +0,0 @@ -use dep::aztec::{ - protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}, - context::PrivateContext -}; - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - fn mint_public(self: Self, context: &mut PrivateContext, to: AztecAddress, amount: Field) { - let _ret = context.call_public_function( - self.address, - FunctionSelector::from_signature("mint_public((Field),Field)"), - [to.to_field(), amount] - ); - } - - pub fn transfer( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ret = context.call_private_function( - self.address, - FunctionSelector::from_signature("transfer((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ); - } -} diff --git a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr index 6cac882ba6f..090ea87a0a0 100644 --- a/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/claim_contract/src/main.nr @@ -1,13 +1,11 @@ contract Claim { - mod interfaces; - use dep::aztec::{ history::note_inclusion::prove_note_inclusion, protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}, state_vars::SharedImmutable }; use dep::value_note::value_note::ValueNote; - use interfaces::Token; + use dep::token::Token; #[aztec(storage)] struct Storage { @@ -43,7 +41,6 @@ contract Claim { context.push_new_nullifier(proof_note.compute_nullifier(&mut context), 0); // 4) Finally we mint the reward token to the sender of the transaction - let reward_token = Token::at(storage.reward_token.read_private()); - reward_token.mint_public(&mut context, recipient, proof_note.value); + Token::at(storage.reward_token.read_private()).mint_public(recipient, proof_note.value).enqueue(&mut context); } } diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/crowdfunding_contract/Nargo.toml index 78810768a4d..aa72f2f65f4 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/Nargo.toml @@ -7,3 +7,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } value_note = { path = "../../../aztec-nr/value-note" } +token = { path = "../token_contract" } diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/interfaces.nr deleted file mode 100644 index 746f8e0e24c..00000000000 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/interfaces.nr +++ /dev/null @@ -1,27 +0,0 @@ -use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}}; -use dep::aztec::{context::{PrivateContext, PublicContext}}; - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn transfer( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ret = context.call_private_function( - self.address, - FunctionSelector::from_signature("transfer((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ); - } -} diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index 42a0883fabd..9ec7d62c8d7 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -1,5 +1,4 @@ contract Crowdfunding { - mod interfaces; use dep::aztec::{ log::emit_unencrypted_log_from_private, @@ -7,7 +6,7 @@ contract Crowdfunding { state_vars::{PrivateSet, PublicImmutable, SharedImmutable} }; use dep::value_note::value_note::ValueNote; - use interfaces::Token; + use dep::token::Token; #[aztec(event)] struct WithdrawalProcessed { @@ -58,14 +57,12 @@ contract Crowdfunding { ); // 2) Transfer the donation tokens from donor to this contract - let donation_token = Token::at(storage.donation_token.read_private()); - donation_token.transfer( - &mut context, + Token::at(storage.donation_token.read_private()).transfer( context.msg_sender(), context.this_address(), amount as Field, 0 - ); + ).call(&mut context); // 3) Create a value note for the donor so that he can later on claim a rewards token in the Claim // contract by proving that the hash of this note exists in the note hash tree. @@ -81,14 +78,7 @@ contract Crowdfunding { assert(context.msg_sender() == operator_address, "Not an operator"); // 2) Transfer the donation tokens from this contract to the operator - let donation_token = Token::at(storage.donation_token.read_private()); - donation_token.transfer( - &mut context, - context.this_address(), - operator_address, - amount as Field, - 0 - ); + Token::at(storage.donation_token.read_private()).transfer(context.this_address(), operator_address, amount as Field, 0).call(&mut context); // 3) Emit an unencrypted event so that anyone can audit how much the operator has withdrawn let event = WithdrawalProcessed { amount, who: operator_address }; diff --git a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr index ae0d5e3d40a..5ebea93a373 100644 --- a/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/docs_example_contract/src/main.nr @@ -115,10 +115,7 @@ contract DocsExample { // and returns the response. // Used to test that we can retrieve values through calls and // correctly return them in the simulation - context.call_private_function_no_args( - context.this_address(), - FunctionSelector::from_signature("get_shared_immutable_constrained_private()") - ).unpack_into() + DocsExample::at(context.this_address()).get_shared_immutable_constrained_private().call(&mut context) } #[aztec(public)] @@ -127,10 +124,7 @@ contract DocsExample { // and returns the response. // Used to test that we can retrieve values through calls and // correctly return them in the simulation - context.call_public_function_no_args( - context.this_address(), - FunctionSelector::from_signature("get_shared_immutable_constrained_public()") - ).deserialize_into() + DocsExample::at(context.this_address()).get_shared_immutable_constrained_public().call(&mut context) } #[aztec(public)] @@ -210,12 +204,7 @@ contract DocsExample { fn update_legendary_card(randomness: Field, points: u8) { let mut new_card = CardNote::new(points, randomness, context.msg_sender()); storage.legendary_card.replace(&mut new_card, true); - - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("update_leader((Field),u8)"), - [context.msg_sender().to_field(), points as Field] - ); + DocsExample::at(context.this_address()).update_leader(context.msg_sender(), points).enqueue(&mut context); } #[aztec(private)] @@ -234,11 +223,7 @@ contract DocsExample { storage.legendary_card.replace(&mut new_card, true); // docs:end:state_vars-PrivateMutableReplace - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("update_leader((Field),u8)"), - [context.msg_sender().to_field(), points as Field] - ); + DocsExample::at(context.this_address()).update_leader(context.msg_sender(), points).enqueue(&mut context); } #[aztec(private)] diff --git a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr index 76cc88e1201..634acdb45bd 100644 --- a/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/easy_private_voting_contract/src/main.nr @@ -30,11 +30,7 @@ contract EasyPrivateVoting { let secret = context.request_nullifier_secret_key(context.msg_sender()); // get secret key of caller of function let nullifier = dep::std::hash::pedersen_hash([context.msg_sender().to_field(), secret.low, secret.high]); // compute nullifier with this secret key so others can't descrypt it context.push_new_nullifier(nullifier, 0); // push nullifier - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("add_to_tally_public(Field)"), - [candidate] - ); + EasyPrivateVoting::at(context.this_address()).add_to_tally_public(candidate).enqueue(&mut context); } // docs:end:cast_vote diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/escrow_contract/Nargo.toml index 9982ff8b67f..a0c107d21a4 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/escrow_contract/Nargo.toml @@ -7,3 +7,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } address_note = { path = "../../../aztec-nr/address-note" } +token = { path = "../token_contract" } \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr index 709c65b3ec5..c1ec425486b 100644 --- a/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/escrow_contract/src/main.nr @@ -6,6 +6,8 @@ contract Escrow { use dep::address_note::address_note::AddressNote; + use dep::token::Token; + #[aztec(storage)] struct Storage { owner: PrivateImmutable, @@ -28,11 +30,6 @@ contract Escrow { let note = storage.owner.get_note(); assert(note.address == sender); - let selector = FunctionSelector::from_signature("transfer((Field),(Field),Field,Field)"); - let _callStackItem = context.call_private_function( - token, - selector, - [this.to_field(), recipient.to_field(), amount, 0] - ); + Token::at(token).transfer(this, recipient, amount, 0).call(&mut context); } } diff --git a/noir-projects/noir-contracts/contracts/slow_tree_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/slow_tree_contract/Nargo.toml index 54270ccd97e..2edcc357b5a 100644 --- a/noir-projects/noir-contracts/contracts/slow_tree_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/slow_tree_contract/Nargo.toml @@ -6,5 +6,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } -value_note = { path = "../../../aztec-nr/value-note" } slow_updates_tree = { path = "../../../aztec-nr/slow-updates-tree" } diff --git a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr index 2fa7b935a4b..f71c2ff62c5 100644 --- a/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/slow_tree_contract/src/main.nr @@ -12,7 +12,6 @@ contract SlowTree { Map, PublicMutable, PrivateSet }; - use dep::value_note::{balance_utils, utils::{increment, decrement}, value_note::ValueNote}; use dep::aztec::{context::{PublicContext, Context}, protocol_types::type_serialization::FIELD_SERIALIZED_LEN}; use dep::slow_updates_tree::{SlowMap, Leaf, SlowUpdateProof, compute_merkle_root, deserialize_slow_update_proof}; diff --git a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr index 3c7ac5c3af0..db8efde4a25 100644 --- a/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/stateful_test_contract/src/main.nr @@ -17,8 +17,7 @@ contract StatefulTest { #[aztec(private)] #[aztec(initializer)] fn constructor(owner: AztecAddress, value: Field) { - let selector = FunctionSelector::from_signature("create_note_no_init_check((Field),Field)"); - context.call_private_function(context.this_address(), selector, [owner.to_field(), value]).assert_empty(); + StatefulTest::at(context.this_address()).create_note_no_init_check(owner, value).call(&mut context); } #[aztec(private)] @@ -31,13 +30,7 @@ contract StatefulTest { #[aztec(public)] #[aztec(initializer)] fn public_constructor(owner: AztecAddress, value: Field) { - let selector = FunctionSelector::from_signature("increment_public_value_no_init_check((Field),Field)"); - context.call_public_function( - context.this_address(), - selector, - [owner.to_field(), value], - GasOpts::default() - ).assert_empty(); + StatefulTest::at(context.this_address()).increment_public_value_no_init_check(owner, value).call(&mut context); } #[aztec(private)] diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index 663cafa4860..d06859c7ebe 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -72,11 +72,7 @@ contract Test { context.set_tx_max_block_number(max_block_number); if enqueue_public_call { - let _ = context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("dummy_public_call()"), - [] - ); + Test::at(context.this_address()).dummy_public_call().enqueue(&mut context) } } diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/token_blacklist_contract/Nargo.toml index 493c9159332..54bc420b804 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/Nargo.toml @@ -8,3 +8,4 @@ type = "contract" aztec = { path = "../../../aztec-nr/aztec" } field_note = { path = "../../../aztec-nr/field-note" } authwit = { path = "../../../aztec-nr/authwit" } +slow_tree = { path = "../slow_tree_contract" } \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr deleted file mode 100644 index 601d9ba65f0..00000000000 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr +++ /dev/null @@ -1,45 +0,0 @@ -use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress}; -use dep::aztec::prelude::Deserialize; -use dep::aztec::context::{PrivateContext, PublicContext, Context, gas::GasOpts}; - -struct SlowMap { - address: AztecAddress, -} - -impl SlowMap { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn initialize(self: Self, context: &mut PublicContext) { - context.call_public_function_no_args( - self.address, - FunctionSelector::from_signature("initialize()") - ).assert_empty(); - } - - pub fn read_at_pub(self: Self, context: &mut PublicContext, index: Field) -> Field { - context.call_public_function( - self.address, - FunctionSelector::from_signature("read_at_pub(Field)"), - [index], - GasOpts::default() - ).deserialize_into() - } - - pub fn read_at(self: Self, context: &mut PrivateContext, index: Field) -> Field { - context.call_private_function( - self.address, - FunctionSelector::from_signature("read_at(Field)"), - [index] - ).unpack_into() - } - - pub fn update_at_private(self: Self, context: &mut PrivateContext, index: Field, new_value: Field) { - let _ = context.call_private_function( - self.address, - FunctionSelector::from_signature("update_at_private(Field,Field)"), - [index, new_value] - ); - } -} diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index cfad6717cc9..33adc927b46 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -1,6 +1,4 @@ mod types; -mod interfaces; - // Minimal token implementation that supports `AuthWit` accounts and the slow update tree. // The auth message follows a similar pattern to the cross-chain message and includes a designated caller. // The designated caller is ALWAYS used here, and not based on a flag as cross-chain. @@ -27,7 +25,7 @@ contract TokenBlacklist { use crate::types::{transparent_note::TransparentNote, token_note::TokenNote, balances_map::BalancesMap, roles::UserFlags}; // docs:start:interface - use crate::interfaces::SlowMap; + use dep::slow_tree::SlowTree; // docs:end:interface #[aztec(storage)] @@ -51,19 +49,18 @@ contract TokenBlacklist { storage.slow_update.initialize(slow_updates_contract); // docs:end:write_slow_update_public // docs:start:slowmap_initialize - SlowMap::at(slow_updates_contract).initialize(&mut context); + SlowTree::at(slow_updates_contract).initialize().call(&mut context); // docs:end:slowmap_initialize // We cannot do the following atm // let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value().to_field(); - // SlowMap::at(slow_updates_contract).update_at_private(&mut context, admin.to_field(), roles); + // SlowTree::at(slow_updates_contract).update_at_private(&mut context, admin.to_field(), roles); } #[aztec(private)] fn init_slow_tree(user: AztecAddress) { let roles = UserFlags { is_admin: true, is_minter: false, is_blacklisted: false }.get_value().to_field(); // docs:start:get_and_update_private - let slow = SlowMap::at(storage.slow_update.read_private()); - slow.update_at_private(&mut context, user.to_field(), roles); + SlowTree::at(storage.slow_update.read_private()).update_at_private(user.to_field(), roles).call(&mut context); // docs:end:get_and_update_private context.call_public_function( context.this_address(), @@ -81,25 +78,27 @@ contract TokenBlacklist { #[aztec(private)] fn update_roles(user: AztecAddress, roles: Field) { // docs:start:slowmap_at - let slow = SlowMap::at(storage.slow_update.read_private()); + let slow = SlowTree::at(storage.slow_update.read_public()); // docs:end:slowmap_at - let caller_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, context.msg_sender().to_field()))); + let role = slow.read_at(context.msg_sender().to_field()).call(&mut context); + + let caller_roles = UserFlags::new(U128::from_integer(role)); assert(caller_roles.is_admin, "caller is not admin"); - slow.update_at_private(&mut context, user.to_field(), roles); + slow.update_at_private(user.to_field(), roles).call(&mut context); } #[aztec(public)] fn mint_public(to: AztecAddress, amount: Field) { // docs:start:get_public - let slow = SlowMap::at(storage.slow_update.read_public()); + let slow = SlowTree::at(storage.slow_update.read_public()); // docs:end:get_public // docs:start:read_at_pub - let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(to.to_field()).call(&mut context))); // docs:end:read_at_pub assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); - let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, context.msg_sender().to_field()))); + let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context.msg_sender().to_field()).call(&mut context))); assert(caller_roles.is_minter, "caller is not minter"); let amount = U128::from_integer(amount); @@ -112,8 +111,8 @@ contract TokenBlacklist { #[aztec(public)] fn mint_private(amount: Field, secret_hash: Field) { - let slow = SlowMap::at(storage.slow_update.read_public()); - let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, context.msg_sender().to_field()))); + let slow = SlowTree::at(storage.slow_update.read_public()); + let caller_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(context.msg_sender().to_field()).call(&mut context))); assert(caller_roles.is_minter, "caller is not minter"); let pending_shields = storage.pending_shields; @@ -126,8 +125,8 @@ contract TokenBlacklist { #[aztec(public)] fn shield(from: AztecAddress, amount: Field, secret_hash: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_public()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); if (!from.eq(context.msg_sender())) { @@ -149,10 +148,10 @@ contract TokenBlacklist { #[aztec(public)] fn transfer_public(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_public()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); - let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(to.to_field()).call(&mut context))); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); if (!from.eq(context.msg_sender())) { @@ -171,8 +170,8 @@ contract TokenBlacklist { #[aztec(public)] fn burn_public(from: AztecAddress, amount: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_public()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_public()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at_pub(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); if (!from.eq(context.msg_sender())) { @@ -191,9 +190,9 @@ contract TokenBlacklist { #[aztec(private)] fn redeem_shield(to: AztecAddress, amount: Field, secret: Field) { - let slow = SlowMap::at(storage.slow_update.read_private()); + let slow = SlowTree::at(storage.slow_update.read_private()); // docs:start:slowmap_read_at - let to_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at(to.to_field()).call(&mut context))); // docs:end:slowmap_read_at assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); @@ -218,10 +217,10 @@ contract TokenBlacklist { #[aztec(private)] fn unshield(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_private()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_private()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); - let to_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at(to.to_field()).call(&mut context))); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); if (!from.eq(context.msg_sender())) { @@ -239,10 +238,10 @@ contract TokenBlacklist { // docs:start:transfer_private #[aztec(private)] fn transfer(from: AztecAddress, to: AztecAddress, amount: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_private()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_private()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); - let to_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, to.to_field()))); + let to_roles = UserFlags::new(U128::from_integer(slow.read_at(to.to_field()).call(&mut context))); assert(!to_roles.is_blacklisted, "Blacklisted: Recipient"); // docs:end:transfer_private @@ -259,8 +258,8 @@ contract TokenBlacklist { #[aztec(private)] fn burn(from: AztecAddress, amount: Field, nonce: Field) { - let slow = SlowMap::at(storage.slow_update.read_private()); - let from_roles = UserFlags::new(U128::from_integer(slow.read_at(&mut context, from.to_field()))); + let slow = SlowTree::at(storage.slow_update.read_private()); + let from_roles = UserFlags::new(U128::from_integer(slow.read_at(from.to_field()).call(&mut context))); assert(!from_roles.is_blacklisted, "Blacklisted: Sender"); if (!from.eq(context.msg_sender())) { diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/token_bridge_contract/Nargo.toml index da41973739d..75c729d9c50 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/Nargo.toml @@ -7,3 +7,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } token_portal_content_hash_lib = { path = "../token_portal_content_hash_lib" } +token = { path = "../token_contract" } diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr index 673e4b8aa7f..c5814ed81ce 100644 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr @@ -1,5 +1,4 @@ // docs:start:token_bridge_imports -mod token_interface; // Minimal implementation of the token bridge that can move funds between L1 <> L2. // The bridge has a corresponding Portal contract on L1 that it is attached to @@ -13,7 +12,7 @@ contract TokenBridge { use dep::token_portal_content_hash_lib::{get_mint_public_content_hash, get_mint_private_content_hash, get_withdraw_content_hash}; - use crate::token_interface::Token; + use dep::token::Token; // docs:end:token_bridge_imports // docs:start:token_bridge_storage_and_constructor @@ -42,7 +41,7 @@ contract TokenBridge { context.consume_l1_to_l2_message(content_hash, secret, context.this_portal_address()); // Mint tokens - Token::at(storage.token.read()).mint_public(&mut context, to, amount); + Token::at(storage.token.read()).mint_public(to, amount).call(&mut context); } // docs:end:claim_public @@ -61,7 +60,7 @@ contract TokenBridge { context.message_portal(context.this_portal_address(), content); // Burn tokens - Token::at(storage.token.read()).burn_public(&mut context, context.msg_sender(), amount, nonce); + Token::at(storage.token.read()).burn_public(context.msg_sender(), amount, nonce).call(&mut context); } // docs:end:exit_to_l1_public // docs:start:claim_private @@ -118,7 +117,7 @@ contract TokenBridge { // docs:end:call_assert_token_is_same // Burn tokens - Token::at(token).burn(&mut context, context.msg_sender(), amount, nonce); + Token::at(token).burn(context.msg_sender(), amount, nonce).call(&mut context); } /// docs:end:exit_to_l1_private @@ -151,7 +150,7 @@ contract TokenBridge { #[aztec(public)] #[aztec(internal)] fn _call_mint_on_token(amount: Field, secret_hash: Field) { - Token::at(storage.token.read()).mint_private(&mut context, amount, secret_hash); + Token::at(storage.token.read()).mint_private(amount, secret_hash).call(&mut context); } // docs:end:call_mint_on_token diff --git a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr b/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr deleted file mode 100644 index 8cebb78da04..00000000000 --- a/noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr +++ /dev/null @@ -1,59 +0,0 @@ -// docs:start:token_bridge_token_interface -use dep::aztec::prelude::{FunctionSelector, AztecAddress, EthAddress, PrivateContext}; -use dep::aztec::context::{PublicContext, Context, gas::GasOpts}; - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn mint_public(self: Self, context: &mut PublicContext, to: AztecAddress, amount: Field) { - context.call_public_function( - self.address, - FunctionSelector::from_signature("mint_public((Field),Field)"), - [to.to_field(), amount], - GasOpts::default() - ).assert_empty(); - } - - // docs:start:public_burn_interface - pub fn burn_public( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - amount: Field, - nonce: Field - ) { - context.call_public_function( - self.address, - FunctionSelector::from_signature("burn_public((Field),Field,Field)"), - [from.to_field(), amount, nonce], - GasOpts::default() - ).assert_empty(); - } - // docs:end:public_burn_interface - - pub fn mint_private(self: Self, context: &mut PublicContext, amount: Field, secret_hash: Field) { - context.call_public_function( - self.address, - FunctionSelector::from_signature("mint_private(Field,Field)"), - [amount, secret_hash], - GasOpts::default() - ).assert_empty(); - } - - // docs:start:private_burn_interface - pub fn burn(self: Self, context: &mut PrivateContext, from: AztecAddress, amount: Field, nonce: Field) { - let _return_values = context.call_private_function( - self.address, - FunctionSelector::from_signature("burn((Field),Field,Field)"), - [from.to_field(), amount, nonce] - ); - } - // docs:end:private_burn_interface -} -// docs:end:token_bridge_token_interface diff --git a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr index 7924299b27c..7978fe76412 100644 --- a/noir-projects/noir-contracts/contracts/token_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_contract/src/main.nr @@ -168,12 +168,7 @@ contract Token { #[aztec(private)] fn privately_mint_private_note(amount: Field) { storage.balances.add(context.msg_sender(), U128::from_integer(amount)); - let selector = FunctionSelector::from_signature("assert_minter_and_mint((Field),Field)"); - let _void = context.call_public_function( - context.this_address(), - selector, - [context.msg_sender().to_field(), amount] - ); + Token::at(context.this_address()).assert_minter_and_mint(context.msg_sender(), amount).enqueue(&mut context); } #[aztec(public)] @@ -277,8 +272,7 @@ contract Token { storage.balances.sub(from, U128::from_integer(amount)); - let selector = FunctionSelector::from_signature("_increase_public_balance((Field),Field)"); - let _void = context.call_public_function(context.this_address(), selector, [to.to_field(), amount]); + Token::at(context.this_address())._increase_public_balance(to, amount).enqueue(&mut context); } // docs:end:unshield @@ -312,8 +306,7 @@ contract Token { storage.balances.sub(from, U128::from_integer(amount)); - let selector = FunctionSelector::from_signature("_reduce_total_supply(Field)"); - let _void = context.call_public_function(context.this_address(), selector, [amount]); + Token::at(context.this_address())._reduce_total_supply(amount).enqueue(&mut context); } // docs:end:burn diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/uniswap_contract/Nargo.toml index cabd23e359e..dbc2b0cf06d 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/Nargo.toml @@ -7,3 +7,5 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } authwit = { path = "../../../aztec-nr/authwit" } +token = { path = "../token_contract" } +token_bridge = { path = "../token_bridge_contract" } \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr deleted file mode 100644 index cd68492fabb..00000000000 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr +++ /dev/null @@ -1,80 +0,0 @@ -// docs:start:interfaces -use dep::aztec::prelude::{FunctionSelector, AztecAddress, EthAddress, PrivateContext, Deserialize}; -use dep::aztec::context::{PublicContext, gas::GasOpts}; - -struct Token { - address: AztecAddress, -} - -impl Token { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn transfer_public( - self: Self, - context: &mut PublicContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - context.call_public_function( - self.address, - FunctionSelector::from_signature("transfer_public((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce], - GasOpts::default() - ).assert_empty(); - } - - pub fn unshield( - self: Self, - context: &mut PrivateContext, - from: AztecAddress, - to: AztecAddress, - amount: Field, - nonce: Field - ) { - let _ret = context.call_private_function( - self.address, - FunctionSelector::from_signature("unshield((Field),(Field),Field,Field)"), - [from.to_field(), to.to_field(), amount, nonce] - ); - } -} - -struct TokenBridge { - address: AztecAddress, -} - -impl TokenBridge { - pub fn at(address: AztecAddress) -> Self { - Self { address } - } - - pub fn token(self: Self, context: &mut PublicContext) -> AztecAddress { - context.call_public_function( - self.address, - FunctionSelector::from_signature("get_token()"), - [], - GasOpts::default() - ).deserialize_into() - } - - pub fn exit_to_l1_public( - self: Self, - context: &mut PublicContext, - recipient: EthAddress, - amount: Field, - caller_on_l1: EthAddress, - nonce: Field - ) { - context.call_public_function( - self.address, - FunctionSelector::from_signature("exit_to_l1_public((Field),Field,(Field),Field)"), - [recipient.to_field(), amount, caller_on_l1.to_field(), nonce], - GasOpts::default() - ).assert_empty(); - } -} -// docs:end:interfaces diff --git a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr index a595616248e..32a89fcc704 100644 --- a/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/uniswap_contract/src/main.nr @@ -1,5 +1,4 @@ // docs:start:uniswap_setup -mod interfaces; mod util; // Demonstrates how to use portal contracts to swap on L1 Uniswap with funds on L2 @@ -15,7 +14,8 @@ contract Uniswap { compute_outer_authwit_hash }; - use crate::interfaces::{Token, TokenBridge}; + use dep::token::Token; + use dep::token_bridge::TokenBridge; use crate::util::{compute_swap_private_content_hash, compute_swap_public_content_hash}; #[aztec(storage)] @@ -51,25 +51,18 @@ contract Uniswap { assert_current_call_valid_authwit_public(&mut context, sender); } - let input_asset = TokenBridge::at(input_asset_bridge).token(&mut context); + let input_asset = TokenBridge::at(input_asset_bridge).get_token().call(&mut context); // Transfer funds to this contract Token::at(input_asset).transfer_public( - &mut context, sender, context.this_address(), input_amount, nonce_for_transfer_approval - ); + ).call(&mut context); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.to_field(), input_asset_bridge.to_field(), input_amount], - GasOpts::default() - ).assert_empty(); - + Uniswap::at(context.this_address())._approve_bridge_and_exit_input_asset_to_L1(input_asset, input_asset_bridge, input_amount).call(&mut context); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. let input_asset_bridge_portal_address = get_portal_address(input_asset_bridge); @@ -115,27 +108,18 @@ contract Uniswap { ) { // Assert that user provided token address is same as expected by token bridge. // we can't directly use `input_asset_bridge.token` because that is a public method and public can't return data to private - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("_assert_token_is_same((Field),(Field))"), - [input_asset.to_field(), input_asset_bridge.to_field()] - ); + Uniswap::at(context.this_address())._assert_token_is_same(input_asset, input_asset_bridge).enqueue(&mut context); // Transfer funds to this contract Token::at(input_asset).unshield( - &mut context, context.msg_sender(), context.this_address(), input_amount, nonce_for_unshield_approval - ); + ).call(&mut context); // Approve bridge to burn this contract's funds and exit to L1 Uniswap Portal - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("_approve_bridge_and_exit_input_asset_to_L1((Field),(Field),Field)"), - [input_asset.to_field(), input_asset_bridge.to_field(), input_amount] - ); + Uniswap::at(context.this_address())._approve_bridge_and_exit_input_asset_to_L1(input_asset, input_asset_bridge, input_amount).enqueue(&mut context); // Create swap message and send to Outbox for Uniswap Portal // this ensures the integrity of what the user originally intends to do on L1. @@ -193,7 +177,11 @@ contract Uniswap { // this method is used for both private and public swaps. #[aztec(public)] #[aztec(internal)] - fn _approve_bridge_and_exit_input_asset_to_L1(token: AztecAddress, token_bridge: AztecAddress, amount: Field) { + fn _approve_bridge_and_exit_input_asset_to_L1( + token: AztecAddress, + token_bridge: AztecAddress, + amount: Field + ) { // approve bridge to burn this contract's funds (required when exiting on L1, as it burns funds on L2): let nonce_for_burn_approval = storage.nonce_for_burn_approval.read(); let selector = FunctionSelector::from_signature("burn_public((Field),Field,Field)"); @@ -212,12 +200,11 @@ contract Uniswap { // Exit to L1 Uniswap Portal ! TokenBridge::at(token_bridge).exit_to_l1_public( - &mut context, context.this_portal_address(), amount, context.this_portal_address(), nonce_for_burn_approval - ); + ).call(&mut context) } // docs:end:authwit_uniswap_set @@ -226,7 +213,7 @@ contract Uniswap { #[aztec(internal)] fn _assert_token_is_same(token: AztecAddress, token_bridge: AztecAddress) { assert( - token.eq(TokenBridge::at(token_bridge).token(&mut context)), "input_asset address is not the same as seen in the bridge contract" + token.eq(TokenBridge::at(token_bridge).get_token().call(&mut context)), "input_asset address is not the same as seen in the bridge contract" ); } // docs:end:assert_token_is_same diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 0a162ce583b..620fcc00784 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -151,7 +151,6 @@ pub fn update_fn_signatures_in_contract_interface( context: &mut HirContext, ) -> Result<(), (AztecMacroError, FileId)> { if let Some((name, _, file_id)) = get_contract_module_data(context, crate_id) { - println!("Contract module found: {}", name); let maybe_interface_struct = collect_crate_structs(crate_id, context).iter().find_map(|struct_id| { let r#struct = context.def_interner.get_struct(*struct_id); From 4c99353685c4901fc170b2a19ad81962969800af Mon Sep 17 00:00:00 2001 From: thunkar Date: Fri, 12 Apr 2024 16:51:02 +0000 Subject: [PATCH 101/123] fixes --- .../developers/tutorials/token_portal/minting_on_aztec.md | 7 ------- .../contracts/token_blacklist_contract/src/main.nr | 8 ++------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/docs/docs/developers/tutorials/token_portal/minting_on_aztec.md b/docs/docs/developers/tutorials/token_portal/minting_on_aztec.md index 877a507122d..0eb400f0acb 100644 --- a/docs/docs/developers/tutorials/token_portal/minting_on_aztec.md +++ b/docs/docs/developers/tutorials/token_portal/minting_on_aztec.md @@ -12,13 +12,6 @@ In our `token-bridge` Aztec project in `aztec-contracts`, under `src` there is a #include_code token_bridge_storage_and_constructor /noir-projects/noir-contracts/contracts/token_bridge_contract/src/main.nr rust -This imports Aztec-related dependencies and our helper file `token_interface.nr`. -(The code above will give errors right now - this is because we haven't implemented util and token_interface yet.) - -In `token_interface.nr`, add this: - -#include_code token_bridge_token_interface /noir-projects/noir-contracts/contracts/token_bridge_contract/src/token_interface.nr rust - ## Consume the L1 message In the previous step, we have moved our funds to the portal and created a L1->L2 message. Upon building the next rollup, the sequencer asks the inbox for any incoming messages and adds them to Aztec’s L1->L2 message tree, so an application on L2 can prove that the message exists and consumes it. diff --git a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr index 33adc927b46..ddb115c721e 100644 --- a/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr @@ -62,11 +62,7 @@ contract TokenBlacklist { // docs:start:get_and_update_private SlowTree::at(storage.slow_update.read_private()).update_at_private(user.to_field(), roles).call(&mut context); // docs:end:get_and_update_private - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("_init_slow_tree((Field))"), - [context.msg_sender().to_field()] - ); + TokenBlacklist::at(context.this_address())._init_slow_tree(context.msg_sender()).enqueue(&mut context); } #[aztec(public)] @@ -78,7 +74,7 @@ contract TokenBlacklist { #[aztec(private)] fn update_roles(user: AztecAddress, roles: Field) { // docs:start:slowmap_at - let slow = SlowTree::at(storage.slow_update.read_public()); + let slow = SlowTree::at(storage.slow_update.read_private()); // docs:end:slowmap_at let role = slow.read_at(context.msg_sender().to_field()).call(&mut context); From 08882a3942d1e489a65ca81eceea2340383ec2f6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 04:40:37 +0000 Subject: [PATCH 102/123] PR comments --- docs/docs/developers/tutorials/token_portal/setup.md | 3 +-- noir-projects/aztec-nr/aztec/src/oracle/arguments.nr | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/docs/developers/tutorials/token_portal/setup.md b/docs/docs/developers/tutorials/token_portal/setup.md index 1678df1f98e..8eb45c6d435 100644 --- a/docs/docs/developers/tutorials/token_portal/setup.md +++ b/docs/docs/developers/tutorials/token_portal/setup.md @@ -65,7 +65,7 @@ aztec = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_ token_portal_content_hash_lib = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_aztec_version", directory="noir-projects/noir-contracts/contracts/token_portal_content_hash_lib" } ``` -We will also be writing some helper functions that should exist elsewhere so we don't overcomplicated our contract. In `src` create two more files - one called `util.nr` and one called `token_interface` - so your dir structure should now look like this: +We will also be writing some helper functions that should exist elsewhere so we don't overcomplicated our contract. In `src` create one more file called `util.nr` - so your dir structure should now look like this: ```tree aztec-contracts @@ -73,7 +73,6 @@ aztec-contracts ├── Nargo.toml ├── src ├── main.nr - ├── token_interface.nr ├── util.nr ``` diff --git a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr index 58163233a48..2bbf2337117 100644 --- a/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr +++ b/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr @@ -2,9 +2,9 @@ fn pack_arguments_array_oracle(_args: [Field; N]) -> Field {} #[oracle(packArguments)] -fn pack_arguments_oracle(_args: [Field]) -> Field {} +fn pack_arguments_oracle(_args: [Field]) -> Field {} -/// - Pack arguments will notify the simulator that these arguments will be used later at +/// - Pack arguments (array version) will notify the simulator that these arguments will be used later at /// some point in the call. /// - When the external call is made later, the simulator will know what the values unpack to. /// - This oracle will not be required in public vm functions, as the vm will keep track of arguments @@ -13,12 +13,12 @@ unconstrained pub fn pack_arguments_array(args: [Field; N]) -> Field { pack_arguments_array_oracle(args) } -/// - Pack arguments will notify the simulator that these arguments will be used later at +/// - Pack arguments (slice version) will notify the simulator that these arguments will be used later at /// some point in the call. /// - When the external call is made later, the simulator will know what the values unpack to. /// - This oracle will not be required in public vm functions, as the vm will keep track of arguments /// itself. -unconstrained pub fn pack_arguments(args: [Field]) -> Field { +unconstrained pub fn pack_arguments(args: [Field]) -> Field { pack_arguments_oracle(args) } From fc02b4c982eed92ec86a1a7a0c47a82f8f023379 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 05:48:46 +0000 Subject: [PATCH 103/123] docs --- .../slow_updates_tree/implement_slow_updates.md | 14 ++++---------- .../historical_data/slow_updates_tree/main.md | 4 ---- docs/docs/developers/tutorials/uniswap/setup.md | 13 +++---------- noir/noir-repo/aztec_macros/src/lib.rs | 4 +++- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/implement_slow_updates.md b/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/implement_slow_updates.md index d738af37879..6de1c8abae6 100644 --- a/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/implement_slow_updates.md +++ b/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/implement_slow_updates.md @@ -8,25 +8,19 @@ On this page you will learn how to implement a slow updates tree into your contr # How to implement a slow updates tree -1. Copy the _SlowTree.nr_ example and its dependencies, found [here](https://github.com/AztecProtocol/aztec-packages/tree/master/noir-projects/noir-contracts/contracts/slow_tree_contract). Replace the constants with whatever you like and deploy it to your sandbox -2. Copy the _SlowMap interface_ for easy interaction with your deployed SlowTree. Find it [here](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr) -3. Import this interface into your contract - -#include_code interface noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr rust - -5. Store the SlowTree address in private storage as a FieldNote +1. Store the SlowTree address in private storage as a FieldNote #include_code constructor noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr rust -6. Store the SlowTree address in public storage and initialize an instance of SlowMap using this address +2. Store the SlowTree address in public storage and initialize an instance of SlowMap using this address #include_code write_slow_update_public noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr rust -7. Now you can read and update from private functions: +3. Now you can read and update from private functions: #include_code get_and_update_private noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr rust -8. Or from public functions: +4. Or from public functions: #include_code get_public noir-projects/noir-contracts/contracts/token_blacklist_contract/src/main.nr rust diff --git a/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/main.md b/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/main.md index 170981942d9..4edc82d0537 100644 --- a/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/main.md +++ b/docs/docs/developers/contracts/writing_contracts/historical_data/slow_updates_tree/main.md @@ -16,10 +16,6 @@ There are generally 4 main components involved to make it easier to use a slow u This is the primary smart contract that will use the slow updates tree. In the example we use a [token with blacklisting features](./implement_slow_updates.md#exploring-an-example-integration-through-a-tokenblacklist-smart-contract). -## Interface - -This interface of the slow updates tree contract allows your contract to interact with the Slow Updates Tree contract. It provides methods for reading and updating values in the tree in both public and private contexts. You can find it [here](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/token_blacklist_contract/src/interfaces.nr). - ## SlowTree.nr contract This is a smart contract developed by Aztec that establishes and manages a slow updates tree structure. It allows developers to access and interact with the tree, such as reading and updating data. diff --git a/docs/docs/developers/tutorials/uniswap/setup.md b/docs/docs/developers/tutorials/uniswap/setup.md index a80b63e734a..ba86ecb73be 100644 --- a/docs/docs/developers/tutorials/uniswap/setup.md +++ b/docs/docs/developers/tutorials/uniswap/setup.md @@ -50,6 +50,8 @@ Inside `uniswap/Nargo.toml` paste this in `[dependencies]`: [dependencies] aztec = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_aztec_version", directory="noir-projects/aztec-nr/aztec" } authwit = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_aztec_version", directory="noir-projects/aztec-nr/authwit"} +token = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_aztec_version", directory="noir-projects/noir-contracts/token_contract" } +token_bridge = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#include_aztec_version", directory="noir-projects/noir-contracts/token_bridge_contract" } ``` ## L2 contracts @@ -57,18 +59,9 @@ authwit = { git="https://github.com/AztecProtocol/aztec-packages/", tag="#includ The `main.nr` will utilize a few helper functions that are outside the scope of this tutorial. Inside `uniswap/src` create two new files: ```bash -cd uniswap/src && touch util.nr && touch interfaces.nr +cd uniswap/src && touch util.nr ``` -Inside `interfaces.nr` paste this: - -#include_code interfaces noir-projects/noir-contracts/contracts/uniswap_contract/src/interfaces.nr rust - -This creates interfaces for the `Token` contract and `TokenBridge` contract - -- `Token` is a reference implementation for a token on Aztec. Here we just need two methods - [`transfer_public`](../writing_token_contract.md#transfer_public) and [`unshield()`](../writing_token_contract.md#unshield). -- The `TokenBridge` facilitates interactions with our [bridge contract](../token_portal/main.md). Here we just need its [`exit_to_l1_public`](../token_portal/withdrawing_to_l1.md) - ## Run Aztec sandbox You will need a running sandbox. diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 137c2217a2c..3318e512522 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -90,7 +90,7 @@ fn transform_module( ) -> Result { let mut has_transformed_module = false; - // Check for a user defined storage stru + // Check for a user defined storage struct let maybe_storage_struct_name = check_for_storage_definition(module)?; let storage_defined = maybe_storage_struct_name.is_some(); @@ -100,6 +100,8 @@ fn transform_module( generate_storage_implementation(module, &storage_struct_name)?; } // Make sure we're only generating the storage layout for the root crate + // In case we got a contract importing other contracts for their interface, we + // don't want to generate the storage layout for them if crate_id == context.root_crate_id() { generate_storage_layout(module, storage_struct_name)?; } From bdfc55ec1650bf01a0e3b86cab10ba1a36a069c6 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 09:12:22 +0000 Subject: [PATCH 104/123] added migration notes --- docs/docs/misc/migration_notes.md | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/docs/misc/migration_notes.md b/docs/docs/misc/migration_notes.md index 8f4f8b84217..b09e58ec4bc 100644 --- a/docs/docs/misc/migration_notes.md +++ b/docs/docs/misc/migration_notes.md @@ -8,6 +8,47 @@ Aztec is in full-speed development. Literally every version breaks compatibility ## TBD +### [Aztec.nr] Contract interfaces + +It is now possible to import contracts on another contracts and use their automatic interfaces to perform calls. The interfaces have the same name as the contract, and are automatically exported. Parameters are automatically serialized (using the `Serialize` trait) and return values are automatically deserialized (using the `Deserialize` trait). + +```diff +- context.call_public_function( +- storage.gas_token_address.read_private(), +- FunctionSelector::from_signature("pay_fee(Field)"), +- [42] +- ); +- +- context.call_public_function( +- storage.gas_token_address.read_private(), +- FunctionSelector::from_signature("pay_fee(Field)"), +- [42] +- ); +- +- let _ = context.call_private_function( +- storage.subscription_token_address.read_private(), +- FunctionSelector::from_signature("transfer((Field),(Field),Field,Field)"), +- [ +- context.msg_sender().to_field(), +- storage.subscription_recipient_address.read_private().to_field(), +- storage.subscription_price.read_private(), +- nonce +- ] +- ); ++ use dep::gas_token::GasToken; ++ use dep::token::Token; ++ ++ ... ++ // Public call from public land ++ GasToken::at(storage.gas_token_address.read_private()).pay_fee(42).call(&mut context); ++ // Public call from private land ++ GasToken::at(storage.gas_token_address.read_private()).pay_fee(42).enqueue(&mut context); ++ // Private call from private land ++ Token::at(asset).transfer(context.msg_sender(), storage.subscription_recipient_address.read_private(), amount, nonce).call(&mut context); +``` + +It is also possible to use these automatic interfaces from the local contract, and thus enqueue public calls from private without having to rely on low level `context` calls. + ### [Aztec.nr] Rename max block number setter The `request_max_block_number` function has been renamed to `set_tx_max_block_number` to better reflect that it is not a getter, and that the setting is transaction-wide. From 9a9a5da19244bb0debaa712147974e9d0cb0ca2f Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 09:23:08 +0000 Subject: [PATCH 105/123] PR reviews --- noir-projects/noir-protocol-circuits/crates/types/src/traits.nr | 1 + .../noir-repo/aztec_macros/src/transforms/contract_interface.rs | 2 +- noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr index cd223fef5e3..4d272c90cba 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr @@ -58,6 +58,7 @@ impl ToField for U128 { } impl ToField for str { fn to_field(self) -> Field { + assert(N < 32, "String doesn't fit in a field, consider using Serialize instead"); field_from_bytes(self.as_bytes(), true) } } diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 620fcc00784..f1959bbc9c4 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -59,7 +59,7 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { .collect::>() .join(""); format!( - "let mut args_acc: [Field] = [0; 0].as_slice(); + "let mut args_acc: [Field] = &[]; {} let args_hash = dep::aztec::hash::hash_args(args_acc); assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc));", diff --git a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs index af815d0a851..c9eef286bbd 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/node_interner.rs @@ -936,7 +936,7 @@ impl NodeInterner { None } }) - .collect::>() + .collect() } pub fn get_trait(&self, id: TraitId) -> &Trait { From cff705bd920a6d0a982d62916c8d3065c448bffe Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 09:51:11 +0000 Subject: [PATCH 106/123] removed acvm whitespace change --- noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs b/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs index bc23070550e..9ccaf733f84 100644 --- a/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs +++ b/noir/noir-repo/acvm-repo/acvm_js/src/foreign_call/mod.rs @@ -8,7 +8,7 @@ mod outputs; #[wasm_bindgen(typescript_custom_section)] const FOREIGN_CALL_HANDLER: &'static str = r#" -export type ForeignCallInput = string[] +export type ForeignCallInput = string[] export type ForeignCallOutput = string | string[] /** From 2f2dab1766d3a98e7d33c6d8580934b7ae941037 Mon Sep 17 00:00:00 2001 From: Gregorio Juliana Date: Mon, 15 Apr 2024 14:28:22 +0200 Subject: [PATCH 107/123] Update noir/noir-repo/aztec_macros/src/utils/hir_utils.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Álvaro Rodríguez --- noir/noir-repo/aztec_macros/src/utils/hir_utils.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index a6488ea2943..227ab1facc3 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -196,7 +196,6 @@ pub fn inject_fn( let errors = type_check_func(&mut context.def_interner, func_id); if !errors.is_empty() { - dbg!(errors.clone()); return Err(MacroError { primary_message: "Failed to type check autogenerated function".to_owned(), secondary_message: Some(errors.iter().map(|err| err.to_string()).collect::()), From e43119e5f994a3b774c413be352c72e070717b50 Mon Sep 17 00:00:00 2001 From: thunkar Date: Mon, 15 Apr 2024 19:38:43 +0000 Subject: [PATCH 108/123] comments and PR fixes --- .../contracts/lending_contract/src/main.nr | 3 +- .../src/transforms/contract_interface.rs | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr index b0f9a284286..c2c05f58a09 100644 --- a/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/lending_contract/src/main.nr @@ -266,8 +266,7 @@ contract Lending { } unconstrained fn get_asset(asset_id: Field) -> pub Asset { - let res: Asset = storage.assets.at(asset_id).read(); - res + storage.assets.at(asset_id).read() } unconstrained fn get_position(owner: AztecAddress) -> pub Position { diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index f1959bbc9c4..42ae95c1a1d 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -12,6 +12,32 @@ use crate::utils::{ hir_utils::{collect_crate_structs, get_contract_module_data, signature_of_type}, }; +// Generates the stubs for contract functions as low level calls using CallInterface, turning +// #[aztec(public)] // also private +// fn a_function(first_arg: Field, second_arg: Struct, third_arg: [Field; 4]) -> Field { +// ... +// } +// +// into +// +// pub fn a_function(self, first_arg: Field, second_arg: Struct, third_arg: [Field; 4]) -> PublicCallInterface { +// let mut args_acc: [Field] = &[]; +// args_acc = args_acc.append(first_arg.serialize().as_slice()); +// args_acc = args_acc.append(second_arg.serialize().as_slice()); +// let hash_third_arg = third_arg.map(|x: Field| x.serialize()); +// for i in 0..third_arg.len() { +// args_acc = args_acc.append(third_arg[i].serialize().as_slice()); +// } +// let args_hash = dep::aztec::hash::hash_args(args_acc); +// assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc)); +// PublicCallInterface { +// target_contract: self.target_contract, +// selector: FunctionSelector::from_signature("SELECTOR_PLACEHOLDER"), +// args_hash +// } +// } +// +// The selector placeholder has to be replaced with the actual function signature after type checking in the next macro pass pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let fn_name = func.name().to_string(); let fn_parameters = func @@ -92,6 +118,9 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { ) } +// Generates the contract interface as a struct with an `at` function that holds the stubbed functions and provides +// them with a target contract address. The struct has the same name as the contract (which is technically a module) +// so imports look nice. The `at` function is also exposed as a contract library method for external use. pub fn generate_contract_interface( module: &mut SortedModule, module_name: &str, @@ -146,6 +175,10 @@ fn compute_fn_signature(fn_name: &str, parameters: &[Type]) -> String { ) } +// Updates the function signatures in the contract interface with the actual ones, replacing the placeholder. +// This is done by locating the contract interface struct, its functions (stubs) and assuming the last statement of each +// is the constructor for a CallInterface. This constructor has a selector field that holds a +// FunctionSelector::from_signature function that receives the signature as a string literal. pub fn update_fn_signatures_in_contract_interface( crate_id: &CrateId, context: &mut HirContext, From 9344b353d2d9f169148870df8b7089ddddf6848a Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 15:43:31 +0000 Subject: [PATCH 109/123] cleanup, more PR comments, removed nr codegen, fixed more notes --- boxes/boxes/react/package.json | 2 +- boxes/boxes/vanilla/package.json | 2 +- boxes/contract-only/package.json | 2 +- .../how_to_compile_contract.md | 100 +-- .../how_to_deploy_contract.md | 2 +- .../aztecnr-getting-started.md | 2 +- .../token_portal/withdrawing_to_l1.md | 2 +- .../tutorials/uniswap/typescript_glue_code.md | 2 +- .../writing_private_voting_contract.md | 2 +- .../tutorials/writing_token_contract.md | 2 +- docs/docs/misc/migration_notes.md | 9 +- .../contracts/import_test_contract/Nargo.toml | 1 + .../import_test_contract/src/main.nr | 48 +- .../src/test_contract_interface.nr | 1 - .../contracts/test_contract/src/interface.nr | 675 ------------------ .../contracts/test_contract/src/main.nr | 57 +- .../aztec_macros/src/utils/hir_utils.rs | 89 ++- .../compiler/noirc_driver/src/lib.rs | 7 +- .../compiler/noirc_frontend/src/hir/mod.rs | 47 +- .../compiler/noirc_frontend/src/tests.rs | 2 +- .../noir_js_backend_barretenberg/package.json | 2 +- noir/noir-repo/tooling/noirc_abi/src/lib.rs | 7 +- .../add_noir_compiler_commander_actions.ts | 9 +- yarn-project/noir-compiler/src/cli/codegen.ts | 23 +- .../src/contract-interface-gen/noir.ts | 308 -------- yarn-project/noir-compiler/src/index.ts | 1 - .../scripts/generate-noir-interfaces.sh | 17 - .../scripts/generate-types.sh | 2 +- 28 files changed, 184 insertions(+), 1239 deletions(-) delete mode 120000 noir-projects/noir-contracts/contracts/import_test_contract/src/test_contract_interface.nr delete mode 100644 noir-projects/noir-contracts/contracts/test_contract/src/interface.nr delete mode 100644 yarn-project/noir-compiler/src/contract-interface-gen/noir.ts delete mode 100755 yarn-project/noir-contracts.js/scripts/generate-noir-interfaces.sh diff --git a/boxes/boxes/react/package.json b/boxes/boxes/react/package.json index ea7ded69c00..0cd42e16ae5 100644 --- a/boxes/boxes/react/package.json +++ b/boxes/boxes/react/package.json @@ -7,7 +7,7 @@ "main": "./dist/index.js", "scripts": { "compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile", - "codegen": "${AZTEC_CLI:-aztec-cli} codegen src/contracts/target -o artifacts --ts", + "codegen": "${AZTEC_CLI:-aztec-cli} codegen src/contracts/target -o artifacts", "clean": "rm -rf ./dist .tsbuildinfo ./artifacts ./src/contracts/target", "prep": "yarn clean && yarn compile && yarn codegen", "dev": "yarn prep && webpack serve --mode development", diff --git a/boxes/boxes/vanilla/package.json b/boxes/boxes/vanilla/package.json index bed49cf08f8..4e9c549afc6 100644 --- a/boxes/boxes/vanilla/package.json +++ b/boxes/boxes/vanilla/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "compile": "cd src/contracts && ${AZTEC_NARGO:-aztec-nargo} compile", - "codegen": "${AZTEC_CLI:-aztec-cli} codegen src/contracts/target -o artifacts --ts", + "codegen": "${AZTEC_CLI:-aztec-cli} codegen src/contracts/target -o artifacts", "clean": "rm -rf ./dest .tsbuildinfo ./artifacts ./src/contracts/target", "prep": "yarn clean && yarn compile && yarn codegen && tsc -b", "dev": "yarn prep && webpack serve --mode development", diff --git a/boxes/contract-only/package.json b/boxes/contract-only/package.json index 361571253f8..93e8c27ca85 100644 --- a/boxes/contract-only/package.json +++ b/boxes/contract-only/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "compile": "cd src && ${AZTEC_NARGO:-aztec-nargo} compile", - "codegen": "${AZTEC_CLI:-aztec-cli} codegen target -o artifacts --ts", + "codegen": "${AZTEC_CLI:-aztec-cli} codegen target -o artifacts", "clean": "rm -rf ./dest .tsbuildinfo ./artifacts ./target", "prep": "yarn clean && yarn compile && yarn codegen && tsc -b", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --runInBand", diff --git a/docs/docs/developers/contracts/compiling_contracts/how_to_compile_contract.md b/docs/docs/developers/contracts/compiling_contracts/how_to_compile_contract.md index 7d78818d4ff..6135b4d8e1a 100644 --- a/docs/docs/developers/contracts/compiling_contracts/how_to_compile_contract.md +++ b/docs/docs/developers/contracts/compiling_contracts/how_to_compile_contract.md @@ -24,10 +24,8 @@ This will output a JSON [artifact](./artifacts.md) for each contract in the proj You can use the code generator to autogenerate type-safe typescript classes for each of your contracts. These classes define type-safe methods for deploying and interacting with your contract based on their artifact. -To generate them, include a `--ts` option in the `codegen` command with a path to the target folder for the typescript files: - ```bash -aztec-cli codegen ./aztec-nargo/output/target/path -o src/artifacts --ts +aztec-cli codegen ./aztec-nargo/output/target/path -o src/artifacts ``` Below is typescript code generated from the [Token](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/token_contract/src/main.nr) contract: @@ -119,94 +117,34 @@ Read more about interacting with contracts using `aztec.js` [here](../../getting An Aztec.nr contract can [call a function](../writing_contracts/functions/call_functions.md) in another contract via `context.call_private_function` or `context.call_public_function`. However, this requires manually assembling the function selector and manually serializing the arguments, which is not type-safe. -To make this easier, the compiler can generate contract interface structs that expose a convenience method for each function listed in a given contract artifact. These structs are intended to be used from another contract project that calls into the current one. For each contract, two interface structs are generated: one to be used from private functions with a `PrivateContext`, and one to be used from open functions with a `PublicContext`. - -To generate them, include a `--nr` option in the `codegen` command with a path to the target folder for the generated Aztec.nr interface files: - -```bash -aztec-cli codegen ./aztec-nargo/output/target/path -o ./path/to/output/folder --nr -``` +To make this easier, the compiler automatically generates interface structs that expose a convenience method for each function listed in a given contract artifact. These structs are intended to be used from another contract project that calls into the current one. -Below is an example interface, also generated from the [Token](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/token_contract/src/main.nr) contract: +Below is an example of interface usage generated from the [Token](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/token_contract/src/main.nr) contract, used from the [FPC](https://github.com/AztecProtocol/aztec-packages/blob/master/noir-projects/noir-contracts/contracts/fpc_contract/src/main.nr): ```rust -impl TokenPrivateContextInterface { - pub fn at(address: Field) -> Self { - Self { - address, - } - } - - pub fn burn( - self, - context: &mut PrivateContext, - from: FromBurnStruct, - amount: Field, - nonce: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - let mut serialized_args = [0; 3]; - serialized_args[0] = from.address; - serialized_args[1] = amount; - serialized_args[2] = nonce; - - context.call_private_function(self.address, 0xd4fcc96e, serialized_args) - } - - - pub fn burn_public( - self, - context: &mut PrivateContext, - from: FromBurnPublicStruct, - amount: Field, - nonce: Field - ) { - let mut serialized_args = [0; 3]; - serialized_args[0] = from.address; - serialized_args[1] = amount; - serialized_args[2] = nonce; +contract FPC { - context.call_public_function(self.address, 0xb0e964d5, serialized_args) - } - ... - -} + ... -impl TokenPublicContextInterface { - pub fn at(address: Field) -> Self { - Self { - address, - } - } + use dep::token::Token; - pub fn burn_public( - self, - context: PublicContext, - from: FromBurnPublicStruct, - amount: Field, - nonce: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - let mut serialized_args = [0; 3]; - serialized_args[0] = from.address; - serialized_args[1] = amount; - serialized_args[2] = nonce; - - context.call_public_function(self.address, 0xb0e964d5, serialized_args) - } + ... - pub fn mint_private( - self, - context: PublicContext, - amount: Field, - secret_hash: Field - ) -> [Field; RETURN_VALUES_LENGTH] { - let mut serialized_args = [0; 2]; - serialized_args[0] = amount; - serialized_args[1] = secret_hash; + #[aztec(private)] + fn fee_entrypoint_private(amount: Field, asset: AztecAddress, secret_hash: Field, nonce: Field) { + assert(asset == storage.other_asset.read_private()); + Token::at(asset).unshield(context.msg_sender(), context.this_address(), amount, nonce).call(&mut context); + FPC::at(context.this_address()).pay_fee_with_shielded_rebate(amount, asset, secret_hash).enqueue(&mut context); + } - context.call_public_function(self.address, 0x10763932, serialized_args) - } + #[aztec(private)] + fn fee_entrypoint_public(amount: Field, asset: AztecAddress, nonce: Field) { + FPC::at(context.this_address()).prepare_fee(context.msg_sender(), amount, asset, nonce).enqueue(&mut context); + FPC::at(context.this_address()).pay_fee(context.msg_sender(), amount, asset).enqueue(&mut context); + } + ... } ``` diff --git a/docs/docs/developers/contracts/deploying_contracts/how_to_deploy_contract.md b/docs/docs/developers/contracts/deploying_contracts/how_to_deploy_contract.md index 2ac74e787e2..dd646d383fb 100644 --- a/docs/docs/developers/contracts/deploying_contracts/how_to_deploy_contract.md +++ b/docs/docs/developers/contracts/deploying_contracts/how_to_deploy_contract.md @@ -40,7 +40,7 @@ aztec-nargo compile Generate the typescript class: ```bash -aztec-cli codegen ./aztec-nargo/output/target/path -o src/artifacts --ts +aztec-cli codegen ./aztec-nargo/output/target/path -o src/artifacts ``` This would create a typescript file like `Example.ts` in `./src/artifacts`. Read more on the [compiling page](../compiling_contracts/how_to_compile_contract.md). diff --git a/docs/docs/developers/getting_started/aztecnr-getting-started.md b/docs/docs/developers/getting_started/aztecnr-getting-started.md index ae8b1e83e23..d7b9dd1eb10 100644 --- a/docs/docs/developers/getting_started/aztecnr-getting-started.md +++ b/docs/docs/developers/getting_started/aztecnr-getting-started.md @@ -147,7 +147,7 @@ This will compile the smart contract and create a `target` folder with a `.json` After compiling, you can generate a typescript class. In the same directory, run this: ```bash -aztec-cli codegen target -o src/artifacts --ts +aztec-cli codegen target -o src/artifacts ``` ### Deploy diff --git a/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md b/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md index 4e2246e20fb..524e106ef51 100644 --- a/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md +++ b/docs/docs/developers/tutorials/token_portal/withdrawing_to_l1.md @@ -81,7 +81,7 @@ aztec-nargo compile And generate the TypeScript interface for the contract and add it to the test dir: ```bash -aztec-cli codegen target -o ../../src/test/fixtures --ts +aztec-cli codegen target -o ../../src/test/fixtures ``` This will create a TS interface in our `src/test` folder! diff --git a/docs/docs/developers/tutorials/uniswap/typescript_glue_code.md b/docs/docs/developers/tutorials/uniswap/typescript_glue_code.md index 805a9249826..2d5d04e4a1b 100644 --- a/docs/docs/developers/tutorials/uniswap/typescript_glue_code.md +++ b/docs/docs/developers/tutorials/uniswap/typescript_glue_code.md @@ -36,7 +36,7 @@ aztec-nargo compile And then generate the typescript interface: ```bash -aztec-cli codegen ./target/ -o ../../../src/test/fixtures uniswap --ts +aztec-cli codegen ./target/ -o ../../../src/test/fixtures uniswap ``` This will create a TS interface in our `src/test` folder that will help us write our test. diff --git a/docs/docs/developers/tutorials/writing_private_voting_contract.md b/docs/docs/developers/tutorials/writing_private_voting_contract.md index 685b89a9412..1178600c72a 100644 --- a/docs/docs/developers/tutorials/writing_private_voting_contract.md +++ b/docs/docs/developers/tutorials/writing_private_voting_contract.md @@ -158,7 +158,7 @@ aztec-nargo compile This will create a new directory called `target` and a JSON artifact inside it. To optionally create a typescript interface, run: ```bash -aztec-cli codegen target -o src/artifacts --ts +aztec-cli codegen target -o src/artifacts ``` Once it is compiled you can [deploy](../contracts/deploying_contracts/how_to_deploy_contract.md) it to the sandbox. Ensure your [sandbox is running](../sandbox/references/sandbox-reference.md) and run this in the same dir as before: diff --git a/docs/docs/developers/tutorials/writing_token_contract.md b/docs/docs/developers/tutorials/writing_token_contract.md index a4f5926c5b5..a9b9e942391 100644 --- a/docs/docs/developers/tutorials/writing_token_contract.md +++ b/docs/docs/developers/tutorials/writing_token_contract.md @@ -431,7 +431,7 @@ aztec-nargo compile Once your contract is compiled, optionally generate a typescript interface with the following command: ```bash -aztec-cli codegen target -o src/artifacts --ts +aztec-cli codegen target -o src/artifacts ``` ## Next Steps diff --git a/docs/docs/misc/migration_notes.md b/docs/docs/misc/migration_notes.md index b09e58ec4bc..5b0a8c0cf29 100644 --- a/docs/docs/misc/migration_notes.md +++ b/docs/docs/misc/migration_notes.md @@ -10,7 +10,14 @@ Aztec is in full-speed development. Literally every version breaks compatibility ### [Aztec.nr] Contract interfaces -It is now possible to import contracts on another contracts and use their automatic interfaces to perform calls. The interfaces have the same name as the contract, and are automatically exported. Parameters are automatically serialized (using the `Serialize` trait) and return values are automatically deserialized (using the `Deserialize` trait). +It is now possible to import contracts on another contracts and use their automatic interfaces to perform calls. The interfaces have the same name as the contract, and are automatically exported. Parameters are automatically serialized (using the `Serialize` trait) and return values are automatically deserialized (using the `Deserialize` trait). Serialize and Deserialize methods have to conform to the standard ACVM serialization schema for the interface to work! + +1. Only fixed length types are supported +2. All numeric types become Fields +3. Strings become arrays of Fields, one per char +4. Arrays become arrays of Fields following rules 2 and 3 +5. Structs become arrays of Fields, with every item defined in the same order as they are in Noir code, following rules 2, 3, 4 and 5 (recursive) + ```diff - context.call_public_function( diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/Nargo.toml b/noir-projects/noir-contracts/contracts/import_test_contract/Nargo.toml index f4ec2663e2b..fe205fd0f17 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/Nargo.toml +++ b/noir-projects/noir-contracts/contracts/import_test_contract/Nargo.toml @@ -6,3 +6,4 @@ type = "contract" [dependencies] aztec = { path = "../../../aztec-nr/aztec" } +test = { path = "../test_contract"} diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr index 8f156ded4c1..307153891f4 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr @@ -1,54 +1,44 @@ -mod test_contract_interface; - // Contract that uses the autogenerated interface of the Test contract for calling its functions. // Used for testing calling into other contracts via autogenerated interfaces. contract ImportTest { - use dep::aztec::prelude::{AztecAddress, Deserialize}; + use dep::aztec::prelude::AztecAddress; + + use dep::test::{Test, Test::DeepStruct, Test::DummyNote}; - use crate::test_contract_interface::{ - TestPrivateContextInterface, TestPublicContextInterface, AStructTestCodeGenStruct, - ADeepStructTestCodeGenStruct, ANoteADeepStructTestCodeGenStruct, - ManyNotesADeepStructTestCodeGenStruct - }; + use dep::test::Test::FieldNote; + use dep::test::Test::ValueNote; // Calls the test_code_gen on the Test contract at the target address // Used for testing calling a function with arguments of multiple types // See yarn-project/simulator/src/client/private_execution.ts // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn main_contract(target: AztecAddress) -> Field { - let test_contract_instance = TestPrivateContextInterface::at(target); - let returned_field: Field = test_contract_instance.test_code_gen( - &mut context, + fn main_contract(target: AztecAddress) { + Test::at(target).test_code_gen( 1, true, 1 as u32, [1, 2], - AStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ADeepStructTestCodeGenStruct { + DummyNote { amount: 1, secret_hash: 2 }, + DeepStruct { a_field: 1, a_bool: true, - a_note: ANoteADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, + a_note: DummyNote { amount: 1, secret_hash: 2 }, many_notes: [ - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 }, - ManyNotesADeepStructTestCodeGenStruct { amount: 1, secret_hash: 2 } + DummyNote { amount: 1, secret_hash: 2 }, + DummyNote { amount: 1, secret_hash: 2 }, + DummyNote { amount: 1, secret_hash: 2 } ] } - ).unpack_into(); - - returned_field + ).call(&mut context) } // Calls the get_this_address on the Test contract at the target address // Used for testing calling a function with no arguments // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn call_no_args(target: AztecAddress) -> Field { - let test_contract_instance = TestPrivateContextInterface::at(target); - let returned_field: Field = test_contract_instance.get_this_address(&mut context).unpack_into(); - - returned_field + fn call_no_args(target: AztecAddress) -> AztecAddress { + Test::at(target).get_this_address().call(&mut context) } // Calls the create_nullifier_public on the Test contract at the target address @@ -56,8 +46,7 @@ contract ImportTest { // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] fn call_open_fn(target: AztecAddress) { - let test_contract_instance = TestPrivateContextInterface::at(target); - test_contract_instance.create_nullifier_public(&mut context, 1, 2); + Test::at(target).create_nullifier_public(1, 2).enqueue(&mut context); } // Calls the create_nullifier_public on the Test contract at the target address @@ -65,8 +54,7 @@ contract ImportTest { // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(public)] fn pub_call_open_fn(target: AztecAddress) { - let test_contract_instance = TestPublicContextInterface::at(target); - test_contract_instance.create_nullifier_public(&mut context, 1, 2).assert_empty(); + Test::at(target).create_nullifier_public(1, 2).call(&mut context); } } diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/test_contract_interface.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/test_contract_interface.nr deleted file mode 120000 index 1113fbe816e..00000000000 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/test_contract_interface.nr +++ /dev/null @@ -1 +0,0 @@ -../../test_contract/src/interface.nr \ No newline at end of file diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr b/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr deleted file mode 100644 index 71133236902..00000000000 --- a/noir-projects/noir-contracts/contracts/test_contract/src/interface.nr +++ /dev/null @@ -1,675 +0,0 @@ -/* Autogenerated file, do not edit! */ - -use dep::std; -use dep::aztec::context::{ PrivateContext, PublicContext, PackedReturns, FunctionReturns, gas::GasOpts }; -use dep::aztec::protocol_types::{ - address::AztecAddress, - abis::function_selector::FunctionSelector, -}; - -struct AddressGetPublicKeyStruct { - inner: Field, -} - -struct TargetDeployContractStruct { - inner: Field, -} - -struct SenderConsumeMessageFromArbitrarySenderPublicStruct { - inner: Field, -} - -struct ToConsumeMintPublicMessageStruct { - inner: Field, -} - -struct RecipientCreateL2ToL1MessageArbitraryRecipientPrivateStruct { - inner: Field, -} - -struct SenderConsumeMessageFromArbitrarySenderPrivateStruct { - inner: Field, -} - -struct CoinbaseAssertPublicGlobalVarsStruct { - inner: Field, -} - -struct FeeRecipientAssertPublicGlobalVarsStruct { - inner: Field, -} - -struct OwnerCallCreateNoteStruct { - inner: Field, -} - -struct AStructTestCodeGenStruct { - amount: Field, - secret_hash: Field, -} - -struct ADeepStructTestCodeGenStruct { - a_field: Field, - a_bool: bool, - a_note: ANoteADeepStructTestCodeGenStruct, - many_notes: [ManyNotesADeepStructTestCodeGenStruct;3], -} - -struct ANoteADeepStructTestCodeGenStruct { - amount: Field, - secret_hash: Field, -} - -struct ManyNotesADeepStructTestCodeGenStruct { - amount: Field, - secret_hash: Field, -} - -struct RecipientCreateL2ToL1MessageArbitraryRecipientPublicStruct { - inner: Field, -} - -struct AztecAddressGetPortalContractAddressStruct { - inner: Field, -} - - -// Interface for calling Test functions from a private context -struct TestPrivateContextInterface { - address: AztecAddress, -} - -impl TestPrivateContextInterface { - pub fn at(address: AztecAddress) -> Self { - Self { - address, - } - } - - pub fn get_public_key( - self, - context: &mut PrivateContext, - address: AddressGetPublicKeyStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = address.inner; - - context.call_private_function(self.address, FunctionSelector::from_field(0x501e4f48), serialized_args) - } - - - pub fn assert_header_public( - self, - context: &mut PrivateContext, - header_hash: Field - ) { - let mut serialized_args = [0; 1]; - serialized_args[0] = header_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0x86e38c61), serialized_args) - } - - - pub fn deploy_contract( - self, - context: &mut PrivateContext, - target: TargetDeployContractStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = target.inner; - - context.call_private_function(self.address, FunctionSelector::from_field(0x5acec588), serialized_args) - } - - - pub fn get_this_address( - self, - context: &mut PrivateContext - ) -> PackedReturns{ - let mut serialized_args = [0; 0]; - - context.call_private_function(self.address, FunctionSelector::from_field(0x95a7b2ae), serialized_args) - } - - - pub fn emit_msg_sender( - self, - context: &mut PrivateContext - ) -> PackedReturns{ - let mut serialized_args = [0; 0]; - - context.call_private_function(self.address, FunctionSelector::from_field(0x11fb5d45), serialized_args) - } - - - pub fn consume_message_from_arbitrary_sender_public( - self, - context: &mut PrivateContext, - content: Field, - secret: Field, - sender: SenderConsumeMessageFromArbitrarySenderPublicStruct - ) { - let mut serialized_args = [0; 3]; - serialized_args[0] = content; - serialized_args[1] = secret; - serialized_args[2] = sender.inner; - - context.call_public_function(self.address, FunctionSelector::from_field(0x42ca6d60), serialized_args) - } - - - pub fn emit_unencrypted( - self, - context: &mut PrivateContext, - value: Field - ) { - let mut serialized_args = [0; 1]; - serialized_args[0] = value; - - context.call_public_function(self.address, FunctionSelector::from_field(0x817a64cb), serialized_args) - } - - - pub fn consume_mint_public_message( - self, - context: &mut PrivateContext, - to: ToConsumeMintPublicMessageStruct, - amount: Field, - secret: Field - ) { - let mut serialized_args = [0; 3]; - serialized_args[0] = to.inner; - serialized_args[1] = amount; - serialized_args[2] = secret; - - context.call_public_function(self.address, FunctionSelector::from_field(0xa0f84219), serialized_args) - } - - - pub fn create_nullifier_public( - self, - context: &mut PrivateContext, - amount: Field, - secret_hash: Field - ) { - let mut serialized_args = [0; 2]; - serialized_args[0] = amount; - serialized_args[1] = secret_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0xdf02db8d), serialized_args) - } - - - pub fn call_get_notes_many( - self, - context: &mut PrivateContext, - storage_slot: Field, - active_or_nullified: bool - ) -> PackedReturns{ - let mut serialized_args = [0; 2]; - serialized_args[0] = storage_slot; - serialized_args[1] = active_or_nullified as Field; - - context.call_private_function(self.address, FunctionSelector::from_field(0xcfcadbce), serialized_args) - } - - - pub fn create_l2_to_l1_message_arbitrary_recipient_private( - self, - context: &mut PrivateContext, - content: Field, - recipient: RecipientCreateL2ToL1MessageArbitraryRecipientPrivateStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 2]; - serialized_args[0] = content; - serialized_args[1] = recipient.inner; - - context.call_private_function(self.address, FunctionSelector::from_field(0xaccc5d5d), serialized_args) - } - - - pub fn consume_message_from_arbitrary_sender_private( - self, - context: &mut PrivateContext, - content: Field, - secret: Field, - sender: SenderConsumeMessageFromArbitrarySenderPrivateStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 3]; - serialized_args[0] = content; - serialized_args[1] = secret; - serialized_args[2] = sender.inner; - - context.call_private_function(self.address, FunctionSelector::from_field(0x2847cb26), serialized_args) - } - - - pub fn create_l2_to_l1_message_public( - self, - context: &mut PrivateContext, - amount: Field, - secret_hash: Field - ) { - let mut serialized_args = [0; 2]; - serialized_args[0] = amount; - serialized_args[1] = secret_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0x9749ca06), serialized_args) - } - - - pub fn is_time_equal( - self, - context: &mut PrivateContext, - time: u64 - ) { - let mut serialized_args = [0; 1]; - serialized_args[0] = time as Field; - - context.call_public_function(self.address, FunctionSelector::from_field(0xb5bb17fa), serialized_args) - } - - - pub fn assert_private_global_vars( - self, - context: &mut PrivateContext, - chain_id: Field, - version: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 2]; - serialized_args[0] = chain_id; - serialized_args[1] = version; - - context.call_private_function(self.address, FunctionSelector::from_field(0x7a8e9b66), serialized_args) - } - - - pub fn assert_public_global_vars( - self, - context: &mut PrivateContext, - chain_id: Field, - version: Field, - block_number: Field, - timestamp: u64, - coinbase: CoinbaseAssertPublicGlobalVarsStruct, - fee_recipient: FeeRecipientAssertPublicGlobalVarsStruct, - fee_per_da_gas: Field, - fee_per_l1_gas: Field, - fee_per_l2_gas: Field - ) { - let mut serialized_args = [0; 9]; - serialized_args[0] = chain_id; - serialized_args[1] = version; - serialized_args[2] = block_number; - serialized_args[3] = timestamp as Field; - serialized_args[4] = coinbase.inner; - serialized_args[5] = fee_recipient.inner; - serialized_args[6] = fee_per_da_gas; - serialized_args[7] = fee_per_l1_gas; - serialized_args[8] = fee_per_l2_gas; - - context.call_public_function(self.address, FunctionSelector::from_field(0x33b3a245), serialized_args) - } - - - pub fn consume_note_from_secret( - self, - context: &mut PrivateContext, - secret: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = secret; - - context.call_private_function(self.address, FunctionSelector::from_field(0x754932c8), serialized_args) - } - - - pub fn call_destroy_note( - self, - context: &mut PrivateContext, - storage_slot: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = storage_slot; - - context.call_private_function(self.address, FunctionSelector::from_field(0xf52a62f7), serialized_args) - } - - - pub fn call_create_note( - self, - context: &mut PrivateContext, - value: Field, - owner: OwnerCallCreateNoteStruct, - storage_slot: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 3]; - serialized_args[0] = value; - serialized_args[1] = owner.inner; - serialized_args[2] = storage_slot; - - context.call_private_function(self.address, FunctionSelector::from_field(0x946991ff), serialized_args) - } - - - pub fn get_this_portal_address( - self, - context: &mut PrivateContext - ) -> PackedReturns{ - let mut serialized_args = [0; 0]; - - context.call_private_function(self.address, FunctionSelector::from_field(0xc71384f5), serialized_args) - } - - - pub fn call_get_notes( - self, - context: &mut PrivateContext, - storage_slot: Field, - active_or_nullified: bool - ) -> PackedReturns{ - let mut serialized_args = [0; 2]; - serialized_args[0] = storage_slot; - serialized_args[1] = active_or_nullified as Field; - - context.call_private_function(self.address, FunctionSelector::from_field(0x11eeb3ea), serialized_args) - } - - - pub fn test_code_gen( - self, - context: &mut PrivateContext, - a_field: Field, - a_bool: bool, - a_number: u32, - an_array: [Field;2], - a_struct: AStructTestCodeGenStruct, - a_deep_struct: ADeepStructTestCodeGenStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 17]; - serialized_args[0] = a_field; - serialized_args[1] = a_bool as Field; - serialized_args[2] = a_number as Field; - serialized_args[3] = an_array[0]; - serialized_args[4] = an_array[1]; - serialized_args[5] = a_struct.amount; - serialized_args[6] = a_struct.secret_hash; - serialized_args[7] = a_deep_struct.a_field; - serialized_args[8] = a_deep_struct.a_bool as Field; - serialized_args[9] = a_deep_struct.a_note.amount; - serialized_args[10] = a_deep_struct.a_note.secret_hash; - serialized_args[11] = a_deep_struct.many_notes[0].amount; - serialized_args[12] = a_deep_struct.many_notes[0].secret_hash; - serialized_args[13] = a_deep_struct.many_notes[1].amount; - serialized_args[14] = a_deep_struct.many_notes[1].secret_hash; - serialized_args[15] = a_deep_struct.many_notes[2].amount; - serialized_args[16] = a_deep_struct.many_notes[2].secret_hash; - - context.call_private_function(self.address, FunctionSelector::from_field(0x0f054f9b), serialized_args) - } - - - pub fn set_constant( - self, - context: &mut PrivateContext, - value: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = value; - - context.call_private_function(self.address, FunctionSelector::from_field(0x1b3b9e18), serialized_args) - } - - - pub fn consume_mint_private_message( - self, - context: &mut PrivateContext, - secret_hash_for_redeeming_minted_notes: Field, - amount: Field, - secret_for_L1_to_L2_message_consumption: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 3]; - serialized_args[0] = secret_hash_for_redeeming_minted_notes; - serialized_args[1] = amount; - serialized_args[2] = secret_for_L1_to_L2_message_consumption; - - context.call_private_function(self.address, FunctionSelector::from_field(0xa0fdbaa9), serialized_args) - } - - - pub fn create_l2_to_l1_message_arbitrary_recipient_public( - self, - context: &mut PrivateContext, - content: Field, - recipient: RecipientCreateL2ToL1MessageArbitraryRecipientPublicStruct - ) { - let mut serialized_args = [0; 2]; - serialized_args[0] = content; - serialized_args[1] = recipient.inner; - - context.call_public_function(self.address, FunctionSelector::from_field(0x2fb25188), serialized_args) - } - - - pub fn emit_nullifier( - self, - context: &mut PrivateContext, - nullifier: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = nullifier; - - context.call_private_function(self.address, FunctionSelector::from_field(0x82a8b183), serialized_args) - } - - - pub fn emit_array_as_unencrypted_log( - self, - context: &mut PrivateContext, - fields: [Field;5] - ) -> PackedReturns{ - let mut serialized_args = [0; 5]; - serialized_args[0] = fields[0]; - serialized_args[1] = fields[1]; - serialized_args[2] = fields[2]; - serialized_args[3] = fields[3]; - serialized_args[4] = fields[4]; - - context.call_private_function(self.address, FunctionSelector::from_field(0xe25cbdd3), serialized_args) - } - - - pub fn get_portal_contract_address( - self, - context: &mut PrivateContext, - aztec_address: AztecAddressGetPortalContractAddressStruct - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = aztec_address.inner; - - context.call_private_function(self.address, FunctionSelector::from_field(0x30e5344b), serialized_args) - } - - - pub fn request_max_block_number( - self, - context: &mut PrivateContext, - max_block_number: u32, - enqueue_public_call: bool - ) -> PackedReturns{ - let mut serialized_args = [0; 2]; - serialized_args[0] = max_block_number as Field; - serialized_args[1] = enqueue_public_call as Field; - - context.call_private_function(self.address, FunctionSelector::from_field(0x6db24b2e), serialized_args) - } - - - pub fn assert_header_private( - self, - context: &mut PrivateContext, - header_hash: Field - ) -> PackedReturns{ - let mut serialized_args = [0; 1]; - serialized_args[0] = header_hash; - - context.call_private_function(self.address, FunctionSelector::from_field(0x4e45eb9e), serialized_args) - } - -} - - - - -// Interface for calling Test functions from a public context -struct TestPublicContextInterface { - address: AztecAddress, -} - -impl TestPublicContextInterface { - pub fn at(address: AztecAddress) -> Self { - Self { - address, - } - } - - pub fn assert_header_public( - self, - context: &mut PublicContext, - header_hash: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 1]; - serialized_args[0] = header_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0x86e38c61), serialized_args, GasOpts::default()) - } - - - pub fn consume_message_from_arbitrary_sender_public( - self, - context: &mut PublicContext, - content: Field, - secret: Field, - sender: SenderConsumeMessageFromArbitrarySenderPublicStruct - ) -> FunctionReturns { - let mut serialized_args = [0; 3]; - serialized_args[0] = content; - serialized_args[1] = secret; - serialized_args[2] = sender.inner; - - context.call_public_function(self.address, FunctionSelector::from_field(0x42ca6d60), serialized_args, GasOpts::default()) - } - - - pub fn emit_unencrypted( - self, - context: &mut PublicContext, - value: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 1]; - serialized_args[0] = value; - - context.call_public_function(self.address, FunctionSelector::from_field(0x817a64cb), serialized_args, GasOpts::default()) - } - - - pub fn consume_mint_public_message( - self, - context: &mut PublicContext, - to: ToConsumeMintPublicMessageStruct, - amount: Field, - secret: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 3]; - serialized_args[0] = to.inner; - serialized_args[1] = amount; - serialized_args[2] = secret; - - context.call_public_function(self.address, FunctionSelector::from_field(0xa0f84219), serialized_args, GasOpts::default()) - } - - - pub fn create_nullifier_public( - self, - context: &mut PublicContext, - amount: Field, - secret_hash: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 2]; - serialized_args[0] = amount; - serialized_args[1] = secret_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0xdf02db8d), serialized_args, GasOpts::default()) - } - - - pub fn create_l2_to_l1_message_public( - self, - context: &mut PublicContext, - amount: Field, - secret_hash: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 2]; - serialized_args[0] = amount; - serialized_args[1] = secret_hash; - - context.call_public_function(self.address, FunctionSelector::from_field(0x9749ca06), serialized_args, GasOpts::default()) - } - - - pub fn is_time_equal( - self, - context: &mut PublicContext, - time: u64 - ) -> FunctionReturns { - let mut serialized_args = [0; 1]; - serialized_args[0] = time as Field; - - context.call_public_function(self.address, FunctionSelector::from_field(0xb5bb17fa), serialized_args, GasOpts::default()) - } - - - pub fn assert_public_global_vars( - self, - context: &mut PublicContext, - chain_id: Field, - version: Field, - block_number: Field, - timestamp: u64, - coinbase: CoinbaseAssertPublicGlobalVarsStruct, - fee_recipient: FeeRecipientAssertPublicGlobalVarsStruct, - fee_per_da_gas: Field, - fee_per_l1_gas: Field, - fee_per_l2_gas: Field - ) -> FunctionReturns { - let mut serialized_args = [0; 9]; - serialized_args[0] = chain_id; - serialized_args[1] = version; - serialized_args[2] = block_number; - serialized_args[3] = timestamp as Field; - serialized_args[4] = coinbase.inner; - serialized_args[5] = fee_recipient.inner; - serialized_args[6] = fee_per_da_gas; - serialized_args[7] = fee_per_l1_gas; - serialized_args[8] = fee_per_l2_gas; - - context.call_public_function(self.address, FunctionSelector::from_field(0x33b3a245), serialized_args, GasOpts::default()) - } - - - pub fn create_l2_to_l1_message_arbitrary_recipient_public( - self, - context: &mut PublicContext, - content: Field, - recipient: RecipientCreateL2ToL1MessageArbitraryRecipientPublicStruct - ) -> FunctionReturns { - let mut serialized_args = [0; 2]; - serialized_args[0] = content; - serialized_args[1] = recipient.inner; - - context.call_public_function(self.address, FunctionSelector::from_field(0x2fb25188), serialized_args, GasOpts::default()) - } - -} - - diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index d06859c7ebe..e9ddaaefa9f 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -7,7 +7,7 @@ contract Test { use dep::aztec::protocol_types::{ abis::private_circuit_public_inputs::PrivateCircuitPublicInputs, - constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTES_PER_PAGE} + constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTES_PER_PAGE}, traits::Serialize }; // docs:start:unencrypted_import use dep::aztec::prelude::emit_unencrypted_log; @@ -175,40 +175,15 @@ contract Test { destroy_note(&mut context, note); } - // Test codegen for Aztec.nr interfaces - // See yarn-project/simulator/src/client/private_execution.test.ts 'nested calls through autogenerated interface' - // Note; this function is deliberately NOT annotated with #[aztec(private)] due to its use in tests + #[aztec(private)] fn test_code_gen( - inputs: PrivateContextInputs, a_field: Field, a_bool: bool, a_number: u32, an_array: [Field; 2], a_struct: DummyNote, a_deep_struct: DeepStruct - ) -> distinct pub PrivateCircuitPublicInputs { - let mut args = ArgsHasher::new(); - args.add(a_field); - args.add(a_bool as Field); - args.add(a_number as Field); - args.add_multiple(an_array); - args.add(a_struct.amount); - args.add(a_struct.secret_hash); - args.add(a_deep_struct.a_field); - args.add(a_deep_struct.a_bool as Field); - args.add(a_deep_struct.a_note.amount); - args.add(a_deep_struct.a_note.secret_hash); - for note in a_deep_struct.many_notes { - args.add(note.amount); - args.add(note.secret_hash); - } - let args_hash = args.hash(); - let mut context = PrivateContext::new(inputs, args_hash); - let mut returns = ArgsHasher::new(); - returns.add(args_hash); - context.set_return_hash(returns); - context.finish() - } + ) {} // Purely exists for testing #[aztec(public)] @@ -404,10 +379,36 @@ contract Test { } } + impl Serialize<2> for DummyNote { + fn serialize(self) -> [Field; 2] { + [self.amount, self.secret_hash] + } + } + struct DeepStruct { a_field: Field, a_bool: bool, a_note: DummyNote, many_notes: [DummyNote; 3], } + + // Serializing using "canonical" form. + // 1. Everything that fits in a field, *becomes* a Field + // 2. Strings become arrays of bytes (no strings here) + // 4. Arrays become arrays of Fields following rules 2 and 3 (no arrays here) + // 5. Structs become arrays of Fields, with every item defined in the same order as they are in Noir code, following rules 2, 3, 4 and 5 (recursive) + impl Serialize<10> for DeepStruct { + fn serialize(self) -> [Field; 10] { + let mut result = [0; 10]; + result[0] = self.a_field; + result[1] = self.a_bool as Field; + result[2] = self.a_note.amount; + result[3] = self.a_note.secret_hash; + for i in 0..3 { + result[4 + i * 2] = self.many_notes[i].amount; + result[5 + i * 2] = self.many_notes[i].secret_hash; + } + result + } + } } diff --git a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs index 227ab1facc3..ae895d2075c 100644 --- a/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs +++ b/noir/noir-repo/aztec_macros/src/utils/hir_utils.rs @@ -100,7 +100,8 @@ pub fn signature_of_type(typ: &Type) -> String { } } -// Fetches the name of all structs tagged as #[aztec(note)] in a given crate +// Fetches the name of all structs tagged as #[aztec(note)] in a given crate, avoiding +// contract dependencies that are just there for their interfaces. pub fn fetch_crate_notes( context: &HirContext, crate_id: &CrateId, @@ -112,16 +113,20 @@ pub fn fetch_crate_notes( let attributes = context.def_interner.struct_attributes(struct_id); if attributes.iter().any(|attr| is_custom_attribute(attr, "aztec(note)")) { let module_id = struct_id.module_id(); - let path = - context.fully_qualified_struct_path(context.root_crate_id(), *struct_id, true); - let path = if path.contains("::") { - let prefix = - if &module_id.krate == context.root_crate_id() { "crate" } else { "dep" }; - format!("{}::{}", prefix, path) - } else { - path - }; - Some((path.clone(), r#struct)) + + fully_qualified_note_path(context, *struct_id).map(|path| { + let path = if path.contains("::") { + let prefix = if &module_id.krate == context.root_crate_id() { + "crate" + } else { + "dep" + }; + format!("{}::{}", prefix, path) + } else { + path + }; + (path.clone(), r#struct) + }) } else { None } @@ -149,7 +154,7 @@ pub fn get_contract_module_data( }) .collect(); - // If the current crate does not contain a contract module we simply skip it. More than 1 contract in a crate is forbidden by the compiler + // If the current crate does not contain a contract module we simply skip it. if contract_module_file_ids.is_empty() { return None; } @@ -244,3 +249,63 @@ pub fn inject_global( let statement_id = context.def_interner.get_global(global_id).let_statement; context.def_interner.replace_statement(statement_id, hir_stmt); } + +pub fn fully_qualified_note_path(context: &HirContext, note_id: StructId) -> Option { + let module_id = note_id.module_id(); + let child_id = module_id.local_id.0; + let def_map = + context.def_map(&module_id.krate).expect("The local crate should be analyzed already"); + + let module = context.module(module_id); + + let module_path = def_map.get_module_path_with_separator(child_id, module.parent, "::"); + + if &module_id.krate == context.root_crate_id() { + Some(module_path) + } else { + find_non_contract_dependencies_bfs(context, context.root_crate_id(), &module_id.krate) + .map(|crates| crates.join("::") + "::" + &module_path) + } +} + +fn filter_contract_modules(context: &HirContext, crate_id: &CrateId) -> bool { + if let Some(def_map) = context.def_map(crate_id) { + !def_map.modules().iter().any(|(_, module)| module.is_contract) + } else { + true + } +} + +fn find_non_contract_dependencies_bfs( + context: &HirContext, + crate_id: &CrateId, + target_crate_id: &CrateId, +) -> Option> { + context.crate_graph[crate_id] + .dependencies + .iter() + .filter(|dep| filter_contract_modules(context, &dep.crate_id)) + .find_map(|dep| { + if &dep.crate_id == target_crate_id { + Some(vec![dep.name.to_string()]) + } else { + None + } + }) + .or_else(|| { + context.crate_graph[crate_id] + .dependencies + .iter() + .filter(|dep| filter_contract_modules(context, &dep.crate_id)) + .find_map(|dep| { + if let Some(mut path) = + find_non_contract_dependencies_bfs(context, &dep.crate_id, target_crate_id) + { + path.insert(0, dep.name.to_string()); + Some(path) + } else { + None + } + }) + }) +} diff --git a/noir/noir-repo/compiler/noirc_driver/src/lib.rs b/noir/noir-repo/compiler/noirc_driver/src/lib.rs index 6b35bd8d514..6fe44780484 100644 --- a/noir/noir-repo/compiler/noirc_driver/src/lib.rs +++ b/noir/noir-repo/compiler/noirc_driver/src/lib.rs @@ -446,11 +446,8 @@ fn compile_contract_inner( let fields = vecmap(typ.get_fields(&[]), |(name, typ)| { (name, AbiType::from_type(context, &typ)) }); - let path = context.fully_qualified_struct_path( - context.root_crate_id(), - typ.id, - false, - ); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), typ.id); AbiType::Struct { path, fields } }) .collect(); diff --git a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs index c8de1fc0447..29be7524659 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/hir/mod.rs @@ -137,12 +137,7 @@ impl Context<'_, '_> { /// /// For example, if you project contains a `main.nr` and `foo.nr` and you provide the `main_crate_id` and the /// `bar_struct_id` where the `Bar` struct is inside `foo.nr`, this function would return `foo::Bar` as a [String]. - pub fn fully_qualified_struct_path( - &self, - crate_id: &CrateId, - id: StructId, - bfs: bool, - ) -> String { + pub fn fully_qualified_struct_path(&self, crate_id: &CrateId, id: StructId) -> String { let module_id = id.module_id(); let child_id = module_id.local_id.0; let def_map = @@ -155,46 +150,20 @@ impl Context<'_, '_> { if &module_id.krate == crate_id { module_path } else { - let crates = if bfs { - self.find_dependencies_bfs(crate_id, &module_id.krate) - .expect("The Struct was supposed to be defined in a dependency") - } else { - self.find_dependencies_dfs(crate_id, &module_id.krate) - .expect("The Struct was supposed to be defined in a dependency") - }; + let crates = self + .find_dependencies(crate_id, &module_id.krate) + .expect("The Struct was supposed to be defined in a dependency"); crates.join("::") + "::" + &module_path } } - /// Recursively walks down the crate dependency graph from crate_id until we reach requested crate - /// This is needed in case a library (lib1) re-export a structure defined in another library (lib2) - /// In that case, we will get [lib1,lib2] when looking for a struct defined in lib2, - /// re-exported by lib1 and used by the main crate. - /// Returns the path from crate_id to target_crate_id - fn find_dependencies_dfs( - &self, - crate_id: &CrateId, - target_crate_id: &CrateId, - ) -> Option> { - for dep in &self.crate_graph[crate_id].dependencies { - if &dep.crate_id == target_crate_id { - return Some(vec![dep.name.to_string()]); - } - if let Some(mut path) = self.find_dependencies_dfs(&dep.crate_id, target_crate_id) { - path.insert(0, dep.name.to_string()); - return Some(path); - } - } - None - } - /// Tries to find the requested crate in the current one's dependencies, /// otherwise walks down the crate dependency graph from crate_id until we reach it. /// This is needed in case a library (lib1) re-export a structure defined in another library (lib2) /// In that case, we will get [lib1,lib2] when looking for a struct defined in lib2, /// re-exported by lib1 and used by the main crate. /// Returns the path from crate_id to target_crate_id - fn find_dependencies_bfs( + fn find_dependencies( &self, crate_id: &CrateId, target_crate_id: &CrateId, @@ -211,9 +180,7 @@ impl Context<'_, '_> { }) .or_else(|| { self.crate_graph[crate_id].dependencies.iter().find_map(|dep| { - if let Some(mut path) = - self.find_dependencies_bfs(&dep.crate_id, target_crate_id) - { + if let Some(mut path) = self.find_dependencies(&dep.crate_id, target_crate_id) { path.insert(0, dep.name.to_string()); Some(path) } else { @@ -285,7 +252,7 @@ impl Context<'_, '_> { .get_all_contracts(&self.def_interner) } - fn module(&self, module_id: def_map::ModuleId) -> &def_map::ModuleData { + pub fn module(&self, module_id: def_map::ModuleId) -> &def_map::ModuleData { module_id.module(&self.def_maps) } } diff --git a/noir/noir-repo/compiler/noirc_frontend/src/tests.rs b/noir/noir-repo/compiler/noirc_frontend/src/tests.rs index c4f0a8d67ba..e4d308fbb6b 100644 --- a/noir/noir-repo/compiler/noirc_frontend/src/tests.rs +++ b/noir/noir-repo/compiler/noirc_frontend/src/tests.rs @@ -66,7 +66,7 @@ mod test { // Allocate a default Module for the root, giving it a ModuleId let mut modules: Arena = Arena::default(); let location = Location::new(Default::default(), root_file_id); - let root = modules.insert(ModuleData::new(None, location, false)); + let root = modules.insert(ModuleData::new(None, None, location, false)); let def_map = CrateDefMap { root: LocalModuleId(root), diff --git a/noir/noir-repo/tooling/noir_js_backend_barretenberg/package.json b/noir/noir-repo/tooling/noir_js_backend_barretenberg/package.json index fefd2f6f8d9..438e91ff302 100644 --- a/noir/noir-repo/tooling/noir_js_backend_barretenberg/package.json +++ b/noir/noir-repo/tooling/noir_js_backend_barretenberg/package.json @@ -57,4 +57,4 @@ "ts-node": "^10.9.1", "typescript": "5.4.2" } -} \ No newline at end of file +} diff --git a/noir/noir-repo/tooling/noirc_abi/src/lib.rs b/noir/noir-repo/tooling/noirc_abi/src/lib.rs index 1b03f22c032..89a60b0ed26 100644 --- a/noir/noir-repo/tooling/noirc_abi/src/lib.rs +++ b/noir/noir-repo/tooling/noirc_abi/src/lib.rs @@ -162,11 +162,8 @@ impl AbiType { let fields = struct_type.get_fields(args); let fields = vecmap(fields, |(name, typ)| (name, Self::from_type(context, &typ))); // For the ABI, we always want to resolve the struct paths from the root crate - let path = context.fully_qualified_struct_path( - context.root_crate_id(), - struct_type.id, - false, - ); + let path = + context.fully_qualified_struct_path(context.root_crate_id(), struct_type.id); Self::Struct { fields, path } } Type::Alias(def, args) => Self::from_type(context, &def.borrow().get_type(args)), diff --git a/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts b/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts index 02fa9eb6c0b..a3330b8368f 100644 --- a/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts +++ b/yarn-project/noir-compiler/src/cli/add_noir_compiler_commander_actions.ts @@ -12,15 +12,10 @@ export function addCodegenCommanderAction(program: Command, _: LogFn = () => {}) .command('codegen') .argument('', 'Path to the Noir ABI or project dir.') .option('-o, --outdir ', 'Output folder for the generated code.') - .option('--ts', 'Generate TypeScript wrapper.') - .option('--nr', 'Generate Noir interface.') .option('--force', 'Force code generation even when the contract has not changed.') .description('Validates and generates an Aztec Contract ABI from Noir ABI.') - .action(async (noirAbiPath: string, { outdir, ts, nr, force }) => { - if (ts && nr) { - throw new Error('--ts and --nr are mutually exclusive.'); - } + .action(async (noirAbiPath: string, { outdir, force }) => { const { generateCode } = await import('./codegen.js'); - generateCode(outdir || dirname(noirAbiPath), noirAbiPath, { ts, nr, force }); + generateCode(outdir || dirname(noirAbiPath), noirAbiPath, { force }); }); } diff --git a/yarn-project/noir-compiler/src/cli/codegen.ts b/yarn-project/noir-compiler/src/cli/codegen.ts index 47aaeaa390b..858109a982b 100644 --- a/yarn-project/noir-compiler/src/cli/codegen.ts +++ b/yarn-project/noir-compiler/src/cli/codegen.ts @@ -5,14 +5,13 @@ import crypto from 'crypto'; import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'fs'; import path from 'path'; -import { generateNoirContractInterface } from '../contract-interface-gen/noir.js'; import { generateTypescriptContractInterface } from '../contract-interface-gen/typescript.js'; const cacheFilePath = './codegenCache.json'; let cache: Record = {}; /** Generate code options */ -type GenerateCodeOptions = { /** Typescript */ ts?: boolean; /** Noir */ nr?: boolean; force?: boolean }; +type GenerateCodeOptions = { force?: boolean }; /** * Generates Noir interface or Typescript interface for a folder or single file from a Noir compilation artifact. @@ -49,26 +48,18 @@ function generateFromNoirAbi(outputPath: string, noirAbiPath: string, opts: Gene const contract = JSON.parse(readFileSync(noirAbiPath, 'utf8')); const aztecAbi = loadContractArtifact(contract); - const { nr, ts } = opts; mkdirSync(outputPath, { recursive: true }); - if (nr) { - const noirContract = generateNoirContractInterface(aztecAbi); - writeFileSync(`${outputPath}/${aztecAbi.name}.nr`, noirContract); - return; + let relativeArtifactPath = path.relative(outputPath, noirAbiPath); + if (relativeArtifactPath === path.basename(noirAbiPath)) { + // Prepend ./ for local import if the folder is the same + relativeArtifactPath = `./${relativeArtifactPath}`; } - if (ts) { - let relativeArtifactPath = path.relative(outputPath, noirAbiPath); - if (relativeArtifactPath === path.basename(noirAbiPath)) { - // Prepend ./ for local import if the folder is the same - relativeArtifactPath = `./${relativeArtifactPath}`; - } + const tsWrapper = generateTypescriptContractInterface(aztecAbi, relativeArtifactPath); + writeFileSync(`${outputPath}/${aztecAbi.name}.ts`, tsWrapper); - const tsWrapper = generateTypescriptContractInterface(aztecAbi, relativeArtifactPath); - writeFileSync(`${outputPath}/${aztecAbi.name}.ts`, tsWrapper); - } updateCache(contractName, currentHash); } diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts deleted file mode 100644 index 52fd0788973..00000000000 --- a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { - type ABIParameter, - type ABIVariable, - type ContractArtifact, - type FunctionArtifact, - FunctionSelector, - FunctionType, - type StructType, -} from '@aztec/foundation/abi'; -import { times } from '@aztec/foundation/collection'; - -import camelCase from 'lodash.camelcase'; -import capitalize from 'lodash.capitalize'; - -/** - * Returns whether this function type corresponds to a private call. - * @param functionType - The function type. - * @returns Whether this function type corresponds to a private call. - */ -function isPrivateCall(functionType: FunctionType) { - return functionType === FunctionType.SECRET; -} - -/** - * Generates a call to a private function using the context. - * @param selector - The selector of a function. - * @param functionType - Type of the function. - * @returns A code string. - */ -function generateCallStatement( - selector: FunctionSelector, - functionType: FunctionType, - callingContext: 'private' | 'public', -) { - const callMethod = isPrivateCall(functionType) ? 'call_private_function' : 'call_public_function'; - const args = [ - 'self.address', - `FunctionSelector::from_field(${selector.toString()})`, - 'serialized_args', - ...(callingContext === 'private' ? [] : ['GasOpts::default()']), - ]; - return ` - context.${callMethod}(${args.join(', ')})`; -} - -/** - * Formats a string as pascal case. - * @param str - A string. - * @returns A capitalized camelcase string. - */ -function toPascalCase(str: string) { - const camel = camelCase(str); - return camel[0].toUpperCase() + camel.slice(1); -} - -/** - * Returns a struct name given a list of fragments. - * @param fragments - Fragments. - * @returns The concatenation of the capitalized fragments. - */ -function getStructName(...fragments: string[]) { - return fragments.map(toPascalCase).join('') + 'Struct'; -} - -/** - * Returns a Noir type name for the given ABI variable. - * @param param - ABI variable to translate to a Noir type name. - * @param parentNames - Function name or parent structs or arrays to use for struct qualified names. - * @returns A valid Noir basic type name or a name for a struct. - */ -function getTypeName(param: ABIVariable, ...parentNames: string[]): string { - const type = param.type; - switch (type.kind) { - case 'field': - return 'Field'; - case 'boolean': - return 'bool'; - case 'integer': - return `${type.sign === 'signed' ? 'i' : 'u'}${type.width}`; - case 'string': - throw new Error(`Strings not supported yet`); - case 'array': - return `[${getTypeName({ name: param.name, type: type.type }, ...parentNames)};${type.length}]`; - case 'struct': - return getStructName(param.name, ...parentNames); - default: - throw new Error(`Unknown type ${type}`); - } -} - -/** - * Generates a parameter string. - * @param param - ABI parameter. - * @param functionData - Parent function. - * @returns A Noir string with the param name and type to be used in a function call. - */ -function generateParameter(param: ABIParameter, functionData: FunctionArtifact) { - const typename = getTypeName(param, functionData.name); - return `${param.name}: ${typename}`; -} - -/** - * Collects all parameters for a given function and flattens them according to how they should be serialized. - * @param parameters - Parameters for a function. - * @returns List of parameters flattened to basic data types. - */ -function collectParametersForSerialization(parameters: ABIVariable[]) { - const flattened: string[] = []; - for (const parameter of parameters) { - const { name } = parameter; - if (parameter.type.kind === 'array') { - const nestedType = parameter.type.type; - const nested = times(parameter.type.length, i => - collectParametersForSerialization([{ name: `${name}[${i}]`, type: nestedType }]), - ); - flattened.push(...nested.flat()); - } else if (parameter.type.kind === 'struct') { - const nested = parameter.type.fields.map(field => - collectParametersForSerialization([{ name: `${name}.${field.name}`, type: field.type }]), - ); - flattened.push(...nested.flat()); - } else if (parameter.type.kind === 'string') { - throw new Error(`String not yet supported`); - } else if (parameter.type.kind === 'field') { - flattened.push(name); - } else { - flattened.push(`${name} as Field`); - } - } - return flattened; -} - -/** - * Generates Noir code for serializing the parameters into an array of fields. - * @param parameters - Parameters to serialize. - * @returns The serialization code. - */ -function generateSerialization(parameters: ABIParameter[]) { - const flattened = collectParametersForSerialization(parameters); - const declaration = ` let mut serialized_args = [0; ${flattened.length}];`; - const lines = flattened.map((param, i) => ` serialized_args[${i}] = ${param};`); - return [declaration, ...lines].join('\n'); -} - -/** - * Generate a function interface for a particular function of the Aztec.nr Contract being processed. This function will be a method of the ContractInterface struct being created here. - * @param functionData - Data relating to the function, which can be used to generate a callable Aztec.nr Function. - * @param kind - Whether this interface will be used from private or public functions. - * @returns A code string. - */ -function generateFunctionInterface(functionData: FunctionArtifact, kind: 'private' | 'public') { - const { name, parameters } = functionData; - const selector = FunctionSelector.fromNameAndParameters(name, parameters); - const serialization = generateSerialization(parameters); - const contextType = kind === 'private' ? '&mut PrivateContext' : '&mut PublicContext'; - const callStatement = generateCallStatement(selector, functionData.functionType, kind); - const allParams = ['self', `context: ${contextType}`, ...parameters.map(p => generateParameter(p, functionData))]; - const isPrivate = isPrivateCall(functionData.functionType); - const isSync = (isPrivate && kind === 'private') || (!isPrivate && kind === 'public'); - // TODO: When return typing data is available in the artifact, we can instead codegen the concrete return type for public and private. - const generics = !isPrivate && isSync ? `` : ``; - const retType = isPrivate ? `-> PackedReturns` : isSync ? `-> FunctionReturns ` : ``; - - return ` - pub fn ${name}${generics}( - ${allParams.join(',\n ')} - ) ${retType}{ -${serialization} -${callStatement} - } - `; -} - -/** - * Generates static imports. - * @returns A string of code which will be needed in every contract interface, regardless of the contract. - */ -function generateStaticImports() { - return `use dep::std; -use dep::aztec::context::{ PrivateContext, PublicContext, PackedReturns, FunctionReturns, gas::GasOpts }; -use dep::aztec::protocol_types::{ - address::AztecAddress, - abis::function_selector::FunctionSelector, -};`; -} - -/** - * Generates the name of the contract struct, based on whether it's for private or public usage. - * @param contractName - Name of the contract. - * @param kind - Whether this interface will be used from private or public functions. - * @returns A name. - */ -function generateContractStructName(contractName: string, kind: 'private' | 'public') { - return `${contractName}${capitalize(kind)}ContextInterface`; -} - -/** - * Generate the main focus of this code generator: the contract interface struct. - * @param contractName - the name of the contract, as matches the original source file. - * @param kind - Whether this interface will be used from private or public functions. - * @returns Code. - */ -function generateContractInterfaceStruct(contractName: string, kind: 'private' | 'public') { - return `// Interface for calling ${contractName} functions from a ${kind} context -struct ${generateContractStructName(contractName, kind)} { - address: AztecAddress, -} -`; -} - -/** - * Generates the implementation of the contract interface struct. - * @param contractName - The name of the contract, as matches the original source file. - * @param kind - Whether this interface will be used from private or public functions. - * @param functions - An array of strings, where each string is valid Noir code describing the function interface of one of the contract's functions (as generated via `generateFunctionInterface` above). - * @returns Code. - */ -function generateContractInterfaceImpl(contractName: string, kind: 'private' | 'public', functions: string[]) { - return `impl ${generateContractStructName(contractName, kind)} { - pub fn at(address: AztecAddress) -> Self { - Self { - address, - } - } - ${functions.join('\n')} -} -`; -} - -/** Represents a struct along its parent names to derive a fully qualified name. */ -type StructInfo = ABIVariable & { /** Parent name */ parentNames: string[] }; - -/** - * Generates a Noir struct. - * @param struct - Struct info. - * @returns Code representing the struct. - */ -function generateStruct(struct: StructInfo) { - const fields = (struct.type as StructType).fields.map( - field => ` ${field.name}: ${getTypeName(field, struct.name, ...struct.parentNames)},`, - ); - - return ` -struct ${getStructName(struct.name, ...struct.parentNames)} { -${fields.join('\n')} -}`; -} - -/** - * Collects all structs across all parameters. - * @param params - Parameters to look for structs, either structs themselves or nested. - * @param parentNames - Parent names to derive fully qualified names when needed. - * @returns A list of struct infos. - */ -function collectStructs(params: ABIVariable[], parentNames: string[]): StructInfo[] { - const structs: StructInfo[] = []; - for (const param of params) { - if (param.type.kind === 'struct') { - const struct = { ...param, parentNames }; - structs.push(struct, ...collectStructs(param.type.fields, [param.name, ...parentNames])); - } else if (param.type.kind === 'array') { - structs.push(...collectStructs([{ name: param.name, type: param.type.type }], [...parentNames])); - } - } - return structs; -} - -/** - * Generates the struct definition and implementation for a contract interface. - * @param abiName - Name of the contract. - * @param kind - Whether this interface will be used from private or public functions. - * @param methods - Contract methods to generate (private ones will be excluded if kind is public) - * @returns Code. - */ -function generateContractStruct(abiName: string, kind: 'private' | 'public', methods: FunctionArtifact[]) { - const contractStruct: string = generateContractInterfaceStruct(abiName, kind); - const applicableMethods = methods.filter(m => kind === 'private' || !isPrivateCall(m.functionType)); - const functionInterfaces = applicableMethods.map(m => generateFunctionInterface(m, kind)); - const contractImpl: string = generateContractInterfaceImpl(abiName, kind, functionInterfaces); - - return ` -${contractStruct} -${contractImpl} - `; -} - -/** - * Generates the Noir code to represent an interface for calling a contract. - * @param artifact - The compiled Aztec.nr artifact. - * @returns The corresponding ts code. - */ -export function generateNoirContractInterface(artifact: ContractArtifact) { - // We don't allow calling internal fns or unconstrained fns from other contracts - const methods = artifact.functions.filter(f => !f.isInternal && f.functionType !== FunctionType.UNCONSTRAINED); - const paramStructs = methods.flatMap(m => collectStructs(m.parameters, [m.name])).map(generateStruct); - const privateContractStruct = generateContractStruct(artifact.name, 'private', methods); - const publicContractStruct = generateContractStruct(artifact.name, 'public', methods); - - return `/* Autogenerated file, do not edit! */ - -${generateStaticImports()} -${paramStructs.join('\n')} - -${privateContractStruct} - -${publicContractStruct} -`; -} diff --git a/yarn-project/noir-compiler/src/index.ts b/yarn-project/noir-compiler/src/index.ts index a28e4f09303..c6c4a84e441 100644 --- a/yarn-project/noir-compiler/src/index.ts +++ b/yarn-project/noir-compiler/src/index.ts @@ -1,2 +1 @@ export { generateTypescriptContractInterface } from './contract-interface-gen/typescript.js'; -export { generateNoirContractInterface } from './contract-interface-gen/noir.js'; diff --git a/yarn-project/noir-contracts.js/scripts/generate-noir-interfaces.sh b/yarn-project/noir-contracts.js/scripts/generate-noir-interfaces.sh deleted file mode 100755 index 249d168242f..00000000000 --- a/yarn-project/noir-contracts.js/scripts/generate-noir-interfaces.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -CONTRACTS=( - test_contract-Test -) - -NOIR_CONTRACTS_DIR="../../noir-projects/noir-contracts" - -for contract in $CONTRACTS; do - echo "Generating Noir interface for $contract" - OUT_DIR="$NOIR_CONTRACTS_DIR/contracts/${contract%%-*}/src" - node --no-warnings ../noir-compiler/dest/cli.js codegen -o $OUT_DIR --nr --force $NOIR_CONTRACTS_DIR/target/$contract.json - mv $OUT_DIR/${contract#*-}.nr $OUT_DIR/interface.nr -done - -echo "Done updating Noir interfaces" \ No newline at end of file diff --git a/yarn-project/noir-contracts.js/scripts/generate-types.sh b/yarn-project/noir-contracts.js/scripts/generate-types.sh index 87a13d3459d..6e98b09125b 100755 --- a/yarn-project/noir-contracts.js/scripts/generate-types.sh +++ b/yarn-project/noir-contracts.js/scripts/generate-types.sh @@ -28,7 +28,7 @@ for ABI in $(find ../../noir-projects/noir-contracts/target -maxdepth 1 -type f done # Generate types for the contracts -node --no-warnings ../noir-compiler/dest/cli.js codegen -o $OUT_DIR --ts artifacts +node --no-warnings ../noir-compiler/dest/cli.js codegen -o $OUT_DIR artifacts # Append exports for each generated TypeScript file to index.ts find "$OUT_DIR" -maxdepth 1 -type f -name '*.ts' ! -name 'index.ts' | while read -r TS_FILE; do From ac8090482e513c14382cc82ebc55ed11c9663045 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 20:32:12 +0000 Subject: [PATCH 110/123] fixed tests --- .../import_test_contract/src/main.nr | 2 +- .../contracts/test_contract/src/main.nr | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr index 307153891f4..9224c0c2a3e 100644 --- a/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/import_test_contract/src/main.nr @@ -13,7 +13,7 @@ contract ImportTest { // See yarn-project/simulator/src/client/private_execution.ts // See yarn-project/end-to-end/src/e2e_nested_contract.test.ts #[aztec(private)] - fn main_contract(target: AztecAddress) { + fn main_contract(target: AztecAddress) -> Field { Test::at(target).test_code_gen( 1, true, diff --git a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr index e9ddaaefa9f..535e96dc43a 100644 --- a/noir-projects/noir-contracts/contracts/test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/test_contract/src/main.nr @@ -183,7 +183,24 @@ contract Test { an_array: [Field; 2], a_struct: DummyNote, a_deep_struct: DeepStruct - ) {} + ) -> Field { + let mut args = ArgsHasher::new(); + args.add(a_field); + args.add(a_bool as Field); + args.add(a_number as Field); + args.add_multiple(an_array); + args.add(a_struct.amount); + args.add(a_struct.secret_hash); + args.add(a_deep_struct.a_field); + args.add(a_deep_struct.a_bool as Field); + args.add(a_deep_struct.a_note.amount); + args.add(a_deep_struct.a_note.secret_hash); + for note in a_deep_struct.many_notes { + args.add(note.amount); + args.add(note.secret_hash); + } + args.hash() + } // Purely exists for testing #[aztec(public)] From e98c816f36f3ec4bf84810914e27e87c62355608 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 21:35:45 +0000 Subject: [PATCH 111/123] avm support --- noir-projects/aztec-nr/authwit/src/auth.nr | 2 +- noir-projects/aztec-nr/aztec/src/context.nr | 2 +- .../aztec-nr/aztec/src/context/avm_context.nr | 28 ++--- .../aztec-nr/aztec/src/context/interface.nr | 62 ++++++++- .../aztec/src/context/public_context.nr | 26 ++-- .../src/main.nr | 47 +++---- noir/noir-repo/aztec_macros/src/lib.rs | 3 +- .../src/transforms/contract_interface.rs | 119 ++++++++++-------- 8 files changed, 169 insertions(+), 120 deletions(-) diff --git a/noir-projects/aztec-nr/authwit/src/auth.nr b/noir-projects/aztec-nr/authwit/src/auth.nr index 643f725e2f2..55c15acec77 100644 --- a/noir-projects/aztec-nr/authwit/src/auth.nr +++ b/noir-projects/aztec-nr/authwit/src/auth.nr @@ -37,7 +37,7 @@ pub fn assert_current_call_valid_authwit_public( context, on_behalf_of, function_selector, - [inner_hash], + [inner_hash].as_slice(), GasOpts::default() ).deserialize_into(); assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); diff --git a/noir-projects/aztec-nr/aztec/src/context.nr b/noir-projects/aztec-nr/aztec/src/context.nr index af53768dc49..c7d79f2e24b 100644 --- a/noir-projects/aztec-nr/aztec/src/context.nr +++ b/noir-projects/aztec-nr/aztec/src/context.nr @@ -9,7 +9,7 @@ mod gas; use interface::{ ContextInterface, PrivateCallInterface, PublicCallInterface, PrivateVoidCallInterface, - PublicVoidCallInterface + PublicVoidCallInterface, AvmCallInterface, AvmVoidCallInterface }; use private_context::PrivateContext; use private_context::PackedReturns; diff --git a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr index 0446511184d..c3379ea7419 100644 --- a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr @@ -50,32 +50,32 @@ impl AvmContext { l1_to_l2_msg_exists(msg_hash, msg_leaf_index) == 1 } - fn call_public_function_raw( + fn call_public_function_raw( self: &mut Self, gas: GasOpts, contract_address: AztecAddress, temporary_function_selector: Field, - args: [Field; ARGS_COUNT] + args: [Field] ) -> ([Field; RET_COUNT], u8) { call( gas_for_call(gas), contract_address, - args.as_slice(), + args, temporary_function_selector ) } - fn static_call_public_function_raw( + fn static_call_public_function_raw( self: &mut Self, gas: GasOpts, contract_address: AztecAddress, temporary_function_selector: Field, - args: [Field; ARGS_COUNT] + args: [Field] ) -> ([Field; RET_COUNT], u8) { call_static( gas_for_call(gas), contract_address, - args.as_slice(), + args, temporary_function_selector ) } @@ -136,17 +136,17 @@ impl PublicContextInterface for AvmContext { send_l2_to_l1_msg(recipient, content); } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns { let results = call( gas_for_call(gas_opts), contract_address, - args.as_slice(), + args, temporary_function_selector.to_field() ); let data_to_return: [Field; RETURNS_COUNT] = results.0; @@ -156,17 +156,17 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns { let (data_to_return, success): ([Field; RETURNS_COUNT], u8) = call_static( gas_for_call(gas_opts), contract_address, - args.as_slice(), + args, temporary_function_selector.to_field() ); @@ -174,11 +174,11 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns { assert(false, "'delegate_call_public_function' not implemented!"); FunctionReturns::new([0; RETURNS_COUNT]) diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index 60d07ebee4e..d087160c654 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -36,25 +36,25 @@ trait PublicContextInterface { fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress); fn accumulate_encrypted_logs(&mut self, log: [Field; N]); fn accumulate_unencrypted_logs(&mut self, log: T); - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns; - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns; - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns; fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool; } @@ -206,3 +206,53 @@ impl PublicVoidCallInterface { context.call_public_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true) } } + +struct AvmCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args: [Field], +} + +impl AvmCallInterface { + pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) -> T where T: Deserialize { + let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.deserialize_into() + } + + pub fn static_call( + self, + context: &mut AvmContext, + gas_opts: GasOpts + ) -> T where T: Deserialize { + let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.deserialize_into() + } + + pub fn delegate_call(self, context: &mut AvmContext) -> T where T: Deserialize { + let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); + returns.deserialize_into() + } +} + +struct AvmVoidCallInterface { + target_contract: AztecAddress, + selector: FunctionSelector, + args: [Field], +} + +impl AvmVoidCallInterface { + pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) { + let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.assert_empty() + } + + pub fn static_call(self, context: &mut AvmContext, gas_opts: GasOpts) { + let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.assert_empty() + } + + pub fn delegate_call(self, context: &mut AvmContext) { + let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); + returns.assert_empty() + } +} diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index 6ee662d5844..cdbbb3e939b 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -5,7 +5,7 @@ use crate::{ }, messaging::process_l1_to_l2_message, oracle::{arguments, public_call::call_public_function_internal, returns}, - hash::{hash_args_array, ArgsHasher} + hash::{hash_args, ArgsHasher} }; use dep::protocol_types::{ abis::{ @@ -291,38 +291,38 @@ impl PublicContextInterface for PublicContext { // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } } diff --git a/noir-projects/noir-contracts/contracts/avm_nested_calls_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_nested_calls_test_contract/src/main.nr index 4c056f838de..e5d34183f42 100644 --- a/noir-projects/noir-contracts/contracts/avm_nested_calls_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_nested_calls_test_contract/src/main.nr @@ -42,7 +42,7 @@ contract AvmNestedCallsTest { GasOpts::default(), context.this_address(), selector, - [arg_a, arg_b] + [arg_a, arg_b].as_slice() ); let data_to_return: [Field; 1] = results.0; // this explicit size is necessary to ensure that ret_size is compile-time @@ -71,7 +71,7 @@ contract AvmNestedCallsTest { GasOpts::new(l1_gas, l2_gas, da_gas), context.this_address(), selector, - [arg_a, arg_b] + [arg_a, arg_b].as_slice() ); let data_to_return: [Field; 1] = results.0; // this explicit size is necessary to ensure that ret_size is compile-time @@ -85,15 +85,7 @@ contract AvmNestedCallsTest { // Use the `call_public_function` wrapper to initiate a nested call to the add function #[aztec(public-vm)] fn nested_call_to_add(arg_a: Field, arg_b: Field) -> pub Field { - let selector = FunctionSelector::from_signature("add_args_return(Field,Field)"); - - // Nested call using standard context interface function - context.call_public_function( - context.this_address(), - selector, - [arg_a, arg_b], - GasOpts::default() - ).deserialize_into() + AvmNestedCallsTest::at(context.this_address()).add_args_return(arg_a, arg_b).call(&mut context, GasOpts::default()) } // Directly call_static the external call opcode to initiate a nested call to the add function @@ -105,7 +97,7 @@ contract AvmNestedCallsTest { GasOpts::default(), context.this_address(), selector, - [arg_a, arg_b] + [arg_a, arg_b].as_slice() ); (result_data[0], success) @@ -117,7 +109,12 @@ contract AvmNestedCallsTest { let selector = FunctionSelector::from_signature("set_storage_single(Field)").to_field(); let calldata: [Field; 1] = [20]; - let (_data_to_return, success): ([Field; 0], u8) = context.static_call_public_function_raw(GasOpts::default(), context.this_address(), selector, calldata); + let (_data_to_return, success): ([Field; 0], u8) = context.static_call_public_function_raw( + GasOpts::default(), + context.this_address(), + selector, + calldata.as_slice() + ); success } @@ -125,40 +122,24 @@ contract AvmNestedCallsTest { // Indirectly call_static the external call opcode to initiate a nested call to the add function #[aztec(public-vm)] fn nested_static_call_to_add(arg_a: Field, arg_b: Field) -> pub Field { - let selector = FunctionSelector::from_signature("add_args_return(Field,Field)"); - - context.static_call_public_function( - context.this_address(), - selector, - [arg_a, arg_b], - GasOpts::default() - ).deserialize_into() + AvmNestedCallsTest::at(context.this_address()).add_args_return(arg_a, arg_b).static_call(&mut context, GasOpts::default()) } // Indirectly call_static `set_storage_single`. Should revert since it's accessing storage. #[aztec(public-vm)] fn nested_static_call_to_set_storage() { - let selector = FunctionSelector::from_signature("set_storage_single(Field)"); - let calldata: [Field; 1] = [20]; - - context.static_call_public_function(context.this_address(), selector, calldata, GasOpts::default()).assert_empty(); + AvmNestedCallsTest::at(context.this_address()).set_storage_single(20).static_call(&mut context, GasOpts::default()); } #[aztec(public-vm)] fn create_same_nullifier_in_nested_call(nestedAddress: AztecAddress, nullifier: Field) { context.push_new_nullifier(nullifier, 0); - - let selector = FunctionSelector::from_signature("new_nullifier(Field)"); - let calldata: [Field; 1] = [nullifier]; - let _ : FunctionReturns<0> = context.call_public_function(nestedAddress, selector, calldata, GasOpts::default()); + AvmNestedCallsTest::at(nestedAddress).new_nullifier(nullifier).call(&mut context, GasOpts::default()); } #[aztec(public-vm)] fn create_different_nullifier_in_nested_call(nestedAddress: AztecAddress, nullifier: Field) { context.push_new_nullifier(nullifier, 0); - - let selector = FunctionSelector::from_signature("new_nullifier(Field)"); - let calldata: [Field; 1] = [nullifier + 1]; - let _ : FunctionReturns<0> = context.call_public_function(nestedAddress, selector, calldata, GasOpts::default()); + AvmNestedCallsTest::at(nestedAddress).new_nullifier(nullifier + 1).call(&mut context, GasOpts::default()); } } diff --git a/noir/noir-repo/aztec_macros/src/lib.rs b/noir/noir-repo/aztec_macros/src/lib.rs index 3318e512522..dff3193a327 100644 --- a/noir/noir-repo/aztec_macros/src/lib.rs +++ b/noir/noir-repo/aztec_macros/src/lib.rs @@ -158,8 +158,7 @@ fn transform_module( } else { "Public" }; - stubs - .push(stub_function(if fn_type == "Private" { "Private" } else { "Public" }, func)); + stubs.push(stub_function(fn_type, func)); export_fn_abi(&mut module.types, func)?; transform_function( diff --git a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs index 42ae95c1a1d..4401c867df9 100644 --- a/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs +++ b/noir/noir-repo/aztec_macros/src/transforms/contract_interface.rs @@ -57,65 +57,84 @@ pub fn stub_function(aztec_visibility: &str, func: &NoirFunction) -> String { let fn_selector = format!("dep::aztec::protocol_types::abis::function_selector::FunctionSelector::from_signature(\"{}\")", SELECTOR_PLACEHOLDER); let parameters = func.parameters(); - - let args_hash = if !parameters.is_empty() { - let call_args = func - .parameters() - .iter() - .map(|arg| { - let param_name = arg.pattern.name_ident().0.contents.clone(); - match &arg.typ.typ { - UnresolvedTypeData::Array(_, typ) => { - format!( - "let hash_{0} = {0}.map(|x: {1}| x.serialize()); - for i in 0..{0}.len() {{ - args_acc = args_acc.append(hash_{0}[i].as_slice()); - }}\n", - param_name, typ.typ - ) - } - _ => { - format!( - "args_acc = args_acc.append({}.serialize().as_slice());\n", - param_name - ) - } + let is_void = if matches!(fn_return_type.typ, UnresolvedTypeData::Unit) { "Void" } else { "" }; + let return_type_hint = if is_void == "Void" { + "".to_string() + } else { + format!("<{}>", fn_return_type.typ.to_string().replace("plain::", "")) + }; + let call_args = parameters + .iter() + .map(|arg| { + let param_name = arg.pattern.name_ident().0.contents.clone(); + match &arg.typ.typ { + UnresolvedTypeData::Array(_, typ) => { + format!( + "let hash_{0} = {0}.map(|x: {1}| x.serialize()); + for i in 0..{0}.len() {{ + args_acc = args_acc.append(hash_{0}[i].as_slice()); + }}\n", + param_name, typ.typ + ) } - }) - .collect::>() - .join(""); + _ => { + format!("args_acc = args_acc.append({}.serialize().as_slice());\n", param_name) + } + } + }) + .collect::>() + .join(""); + if aztec_visibility != "Avm" { + let args_hash = if !parameters.is_empty() { + format!( + "let mut args_acc: [Field] = &[]; + {} + let args_hash = dep::aztec::hash::hash_args(args_acc); + assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc));", + call_args + ) + } else { + "let args_hash = 0;".to_string() + }; + + let fn_body = format!( + "{} + dep::aztec::context::{}{}CallInterface {{ + target_contract: self.target_contract, + selector: {}, + args_hash, + }}", + args_hash, aztec_visibility, is_void, fn_selector, + ); format!( + "pub fn {}(self, {}) -> dep::aztec::context::{}{}CallInterface{} {{ + {} + }}", + fn_name, fn_parameters, aztec_visibility, is_void, return_type_hint, fn_body + ) + } else { + let args = format!( "let mut args_acc: [Field] = &[]; {} - let args_hash = dep::aztec::hash::hash_args(args_acc); - assert(args_hash == dep::aztec::oracle::arguments::pack_arguments(args_acc));", + ", call_args - ) - } else { - "let args_hash = 0;".to_string() - }; - let is_void = if matches!(fn_return_type.typ, UnresolvedTypeData::Unit) { "Void" } else { "" }; - - let fn_body = format!( - "{} - dep::aztec::context::{}{}CallInterface {{ + ); + let fn_body = format!( + "{} + dep::aztec::context::Avm{}CallInterface {{ target_contract: self.target_contract, selector: {}, - args_hash, + args: args_acc, }}", - args_hash, aztec_visibility, is_void, fn_selector, - ); - let return_type_hint = if is_void == "Void" { - "".to_string() - } else { - format!("<{}>", fn_return_type.typ.to_string().replace("plain::", "")) - }; - format!( - "pub fn {}(self, {}) -> dep::aztec::context::{}{}CallInterface{} {{ - {} + args, is_void, fn_selector, + ); + format!( + "pub fn {}(self, {}) -> dep::aztec::context::Avm{}CallInterface{} {{ + {} }}", - fn_name, fn_parameters, aztec_visibility, is_void, return_type_hint, fn_body - ) + fn_name, fn_parameters, is_void, return_type_hint, fn_body + ) + } } // Generates the contract interface as a struct with an `at` function that holds the stubbed functions and provides From c1aaa5c2ecba5ce0fa7605e2e6ef722cb9bf1c54 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 21:46:59 +0000 Subject: [PATCH 112/123] contract fix --- .../avm_acvm_interop_test_contract/src/main.nr | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr index c1af41666e9..bece62fc8dc 100644 --- a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr @@ -42,7 +42,7 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_acvm()"), - [], + [].as_slice(), GasOpts::default() ).deserialize_into() } @@ -52,14 +52,19 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_avm()"), - [], + [].as_slice(), GasOpts::default() ).deserialize_into() } #[aztec(public-vm)] fn avm_to_acvm_call(selector: FunctionSelector, args: Field) { - context.call_public_function(context.this_address(), selector, [args], GasOpts::default()).assert_empty(); + context.call_public_function( + context.this_address(), + selector, + [args].as_slice(), + GasOpts::default() + ).assert_empty(); } /************************************************************************ From f240b4a1409f0d49490ac4bfe5edaa0b1b9fbb79 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 22:09:24 +0000 Subject: [PATCH 113/123] more fixes --- .../contracts/parent_contract/src/main.nr | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index f1f9169ab95..fb066de5ad6 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -20,7 +20,7 @@ contract Parent { context.call_public_function( target_contract, target_selector, - [init_value], + [init_value].as_slice(), GasOpts::default() ).deserialize_into() } @@ -35,13 +35,13 @@ contract Parent { let return_value: Field = context.call_public_function( target_contract, target_selector, - [init_value], + [init_value].as_slice(), GasOpts::default() ).deserialize_into(); context.call_public_function( target_contract, target_selector, - [return_value], + [return_value].as_slice(), GasOpts::default() ).deserialize_into() } @@ -189,7 +189,12 @@ contract Parent { target_selector: FunctionSelector, args: [Field; 1] ) -> Field { - context.static_call_public_function(target_contract, target_selector, args, GasOpts::default()).deserialize_into() + context.static_call_public_function( + target_contract, + target_selector, + args.as_slice(), + GasOpts::default() + ).deserialize_into() } // Public function to set a static context and verify correct propagation for nested public calls @@ -205,7 +210,7 @@ contract Parent { context.static_call_public_function( this_address, pub_entry_point_selector, - [target_contract.to_field(), target_selector.to_field(), args[0]], + [target_contract.to_field(), target_selector.to_field(), args[0]].as_slice(), GasOpts::default() ).deserialize_into() } From 189edf1a973ab7b6eb147315225661748f9a6959 Mon Sep 17 00:00:00 2001 From: thunkar Date: Tue, 16 Apr 2024 23:17:50 +0000 Subject: [PATCH 114/123] reverted public context change --- noir-projects/aztec-nr/authwit/src/auth.nr | 2 +- .../aztec-nr/aztec/src/context/avm_context.nr | 16 ++--- .../aztec-nr/aztec/src/context/interface.nr | 64 +++++++++++++------ .../aztec/src/context/public_context.nr | 26 ++++---- .../src/main.nr | 11 +--- .../crowdfunding_contract/src/main.nr | 6 +- .../contracts/parent_contract/src/main.nr | 15 ++--- 7 files changed, 76 insertions(+), 64 deletions(-) diff --git a/noir-projects/aztec-nr/authwit/src/auth.nr b/noir-projects/aztec-nr/authwit/src/auth.nr index 55c15acec77..643f725e2f2 100644 --- a/noir-projects/aztec-nr/authwit/src/auth.nr +++ b/noir-projects/aztec-nr/authwit/src/auth.nr @@ -37,7 +37,7 @@ pub fn assert_current_call_valid_authwit_public( context, on_behalf_of, function_selector, - [inner_hash].as_slice(), + [inner_hash], GasOpts::default() ).deserialize_into(); assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); diff --git a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr index c3379ea7419..86c8ca23dcc 100644 --- a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr @@ -136,17 +136,17 @@ impl PublicContextInterface for AvmContext { send_l2_to_l1_msg(recipient, content); } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], gas_opts: GasOpts ) -> FunctionReturns { let results = call( gas_for_call(gas_opts), contract_address, - args, + args.as_slice(), temporary_function_selector.to_field() ); let data_to_return: [Field; RETURNS_COUNT] = results.0; @@ -156,17 +156,17 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], gas_opts: GasOpts ) -> FunctionReturns { let (data_to_return, success): ([Field; RETURNS_COUNT], u8) = call_static( gas_for_call(gas_opts), contract_address, - args, + args.as_slice(), temporary_function_selector.to_field() ); @@ -174,11 +174,11 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field] + args: [Field; ARGS_COUNT] ) -> FunctionReturns { assert(false, "'delegate_call_public_function' not implemented!"); FunctionReturns::new([0; RETURNS_COUNT]) diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index d087160c654..aa0b22314e2 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -36,25 +36,25 @@ trait PublicContextInterface { fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress); fn accumulate_encrypted_logs(&mut self, log: [Field; N]); fn accumulate_unencrypted_logs(&mut self, log: T); - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], gas_opts: GasOpts ) -> FunctionReturns; - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], gas_opts: GasOpts ) -> FunctionReturns; - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field] + args: [Field; ARGS_COUNT] ) -> FunctionReturns; fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool; } @@ -215,8 +215,15 @@ struct AvmCallInterface { impl AvmCallInterface { pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) -> T where T: Deserialize { - let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); - returns.deserialize_into() + let (data_to_return, success) = context.call_public_function_raw( + gas_opts, + self.target_contract, + self.selector.to_field(), + self.args + ); + assert(success == 1, "Nested call failed!"); + + FunctionReturns::new(data_to_return).deserialize_into() } pub fn static_call( @@ -224,13 +231,19 @@ impl AvmCallInterface { context: &mut AvmContext, gas_opts: GasOpts ) -> T where T: Deserialize { - let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); - returns.deserialize_into() + let (data_to_return, success) = context.static_call_public_function_raw( + gas_opts, + self.target_contract, + self.selector.to_field(), + self.args + ); + assert(success == 1, "Nested call failed!"); + + FunctionReturns::new(data_to_return).deserialize_into() } - pub fn delegate_call(self, context: &mut AvmContext) -> T where T: Deserialize { - let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); - returns.deserialize_into() + pub fn delegate_call(self, context: &mut AvmContext) { + assert(false, "'delegate_call_public_function' not implemented!"); } } @@ -242,17 +255,30 @@ struct AvmVoidCallInterface { impl AvmVoidCallInterface { pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) { - let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); - returns.assert_empty() + let (data_to_return, success) = context.call_public_function_raw( + gas_opts, + self.target_contract, + self.selector.to_field(), + self.args + ); + assert(success == 1, "Nested call failed!"); + + FunctionReturns::new(data_to_return).assert_empty() } pub fn static_call(self, context: &mut AvmContext, gas_opts: GasOpts) { - let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); - returns.assert_empty() + let (data_to_return, success) = context.static_call_public_function_raw( + gas_opts, + self.target_contract, + self.selector.to_field(), + self.args + ); + assert(success == 1, "Nested call failed!"); + + FunctionReturns::new(data_to_return).assert_empty() } pub fn delegate_call(self, context: &mut AvmContext) { - let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); - returns.assert_empty() + assert(false, "'delegate_call_public_function' not implemented!"); } } diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index cdbbb3e939b..6ee662d5844 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -5,7 +5,7 @@ use crate::{ }, messaging::process_l1_to_l2_message, oracle::{arguments, public_call::call_public_function_internal, returns}, - hash::{hash_args, ArgsHasher} + hash::{hash_args_array, ArgsHasher} }; use dep::protocol_types::{ abis::{ @@ -291,38 +291,38 @@ impl PublicContextInterface for PublicContext { // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args(args); - assert(args_hash == arguments::pack_arguments(args)); + let args_hash = hash_args_array(args); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field], + args: [Field; ARGS_COUNT], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args(args); - assert(args_hash == arguments::pack_arguments(args)); + let args_hash = hash_args_array(args); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field] + args: [Field; ARGS_COUNT] ) -> FunctionReturns { - let args_hash = hash_args(args); - assert(args_hash == arguments::pack_arguments(args)); + let args_hash = hash_args_array(args); + assert(args_hash == arguments::pack_arguments_array(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } } diff --git a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr index bece62fc8dc..c1af41666e9 100644 --- a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr @@ -42,7 +42,7 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_acvm()"), - [].as_slice(), + [], GasOpts::default() ).deserialize_into() } @@ -52,19 +52,14 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_avm()"), - [].as_slice(), + [], GasOpts::default() ).deserialize_into() } #[aztec(public-vm)] fn avm_to_acvm_call(selector: FunctionSelector, args: Field) { - context.call_public_function( - context.this_address(), - selector, - [args].as_slice(), - GasOpts::default() - ).assert_empty(); + context.call_public_function(context.this_address(), selector, [args], GasOpts::default()).assert_empty(); } /************************************************************************ diff --git a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr index 9ec7d62c8d7..76d6335e6ff 100644 --- a/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/crowdfunding_contract/src/main.nr @@ -50,11 +50,7 @@ contract Crowdfunding { #[aztec(private)] fn donate(amount: u64) { // 1) Check that the deadline has not passed - context.call_public_function( - context.this_address(), - FunctionSelector::from_signature("_check_deadline()"), - [] - ); + Crowdfunding::at(context.this_address())._check_deadline().enqueue(&mut context); // 2) Transfer the donation tokens from donor to this contract Token::at(storage.donation_token.read_private()).transfer( diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index fb066de5ad6..f1f9169ab95 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -20,7 +20,7 @@ contract Parent { context.call_public_function( target_contract, target_selector, - [init_value].as_slice(), + [init_value], GasOpts::default() ).deserialize_into() } @@ -35,13 +35,13 @@ contract Parent { let return_value: Field = context.call_public_function( target_contract, target_selector, - [init_value].as_slice(), + [init_value], GasOpts::default() ).deserialize_into(); context.call_public_function( target_contract, target_selector, - [return_value].as_slice(), + [return_value], GasOpts::default() ).deserialize_into() } @@ -189,12 +189,7 @@ contract Parent { target_selector: FunctionSelector, args: [Field; 1] ) -> Field { - context.static_call_public_function( - target_contract, - target_selector, - args.as_slice(), - GasOpts::default() - ).deserialize_into() + context.static_call_public_function(target_contract, target_selector, args, GasOpts::default()).deserialize_into() } // Public function to set a static context and verify correct propagation for nested public calls @@ -210,7 +205,7 @@ contract Parent { context.static_call_public_function( this_address, pub_entry_point_selector, - [target_contract.to_field(), target_selector.to_field(), args[0]].as_slice(), + [target_contract.to_field(), target_selector.to_field(), args[0]], GasOpts::default() ).deserialize_into() } From 73270c10b7cb0cebdc9c98e8b793e0204c4f6f0a Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 07:55:05 +0000 Subject: [PATCH 115/123] fix: Don't reuse brillig with slice arguments --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- .../crates/types/src/constants.nr | 2 +- .../noirc_evaluator/src/ssa/acir_gen/mod.rs | 11 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 4 files changed, 128 insertions(+), 122 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index fe139215971..fcdecf5f63d 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,123 +9,122 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = - 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x2d8e7aedc70b65d49e6aa0794d8d12721896c177e87126701f6e60d184358e74; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 96f1a6dcdd2..96e1e373edb 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -118,7 +118,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x2d8e7aedc70b65d49e6aa0794d8d12721896c177e87126701f6e60d184358e74; +global DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs index 8019707644b..5b880c6674a 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs @@ -662,10 +662,17 @@ impl<'a> Context<'a> { dfg.type_of_value(*result_id).into() }); + let has_slice_argument = arguments.iter().any(|arg| { + let typ = dfg.type_of_value(*arg); + typ.contains_slice_element() + }); + // Check whether we have already generated Brillig for this function // If we have, re-use the generated code to set-up the Brillig call. - let output_values = if let Some(generated_pointer) = - self.shared_context.generated_brillig_pointer(id) + let output_values = if let Some(generated_pointer) = self + .shared_context + .generated_brillig_pointer(id) + .filter(|_| !has_slice_argument) { let code = self .shared_context diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 223a3361fb4..df25375e53b 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From b403518e6ab50f4710a09150bad7a927a0c8b5d0 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 07:59:53 +0000 Subject: [PATCH 116/123] chore: fmt sol --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- 1 file changed, 118 insertions(+), 117 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index fcdecf5f63d..1ece9792317 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,122 +9,123 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = + 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } From 215acfbcb92b6d16b1980861a473c8a5bbec5bf0 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 08:01:10 +0000 Subject: [PATCH 117/123] docs: added todo --- noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs index 5b880c6674a..3a469bb65ae 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs @@ -662,6 +662,8 @@ impl<'a> Context<'a> { dfg.type_of_value(*result_id).into() }); + // TODO(Alvaro) This is due to limitations in the calldatacopy opcode. + // We cannot currently reuse brillig entry points that have slice arguments. let has_slice_argument = arguments.iter().any(|arg| { let typ = dfg.type_of_value(*arg); typ.contains_slice_element() From 531056f5e7dff3576afac716b0a9b22dc279696a Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 08:23:40 +0000 Subject: [PATCH 118/123] chore: update deployer addr --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- .../crates/types/src/constants.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 3 files changed, 119 insertions(+), 120 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1ece9792317..a3ba170b8a0 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,123 +9,122 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = - 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 96e1e373edb..c4b67523bc6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -118,7 +118,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; +global DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index df25375e53b..223a3361fb4 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From 043a3c0cc0573ef87625505850d334cf14cf2b58 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 08:24:28 +0000 Subject: [PATCH 119/123] chore: fmt --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- 1 file changed, 118 insertions(+), 117 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index a3ba170b8a0..883f546a905 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,122 +9,123 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = + 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } From b04b3f03284cefee5065560e5e517093807d4c57 Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 17 Apr 2024 08:27:10 +0000 Subject: [PATCH 120/123] fixed test --- yarn-project/simulator/src/avm/avm_simulator.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/simulator/src/avm/avm_simulator.test.ts b/yarn-project/simulator/src/avm/avm_simulator.test.ts index 051c3432de3..941434004b6 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.test.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.test.ts @@ -907,7 +907,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const results = await new AvmSimulator(context).executeBytecode(callBytecode); expect(results.reverted).toBe(true); // The outer call should revert. - expect(results.revertReason?.message).toMatch(/Nested static call failed/); + expect(results.revertReason?.message).toMatch(/Nested call failed/); }); }); }); From 1cbeef737f99c1aade36a13772f2c6d5fcc12291 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 09:13:47 +0000 Subject: [PATCH 121/123] fix: avoid nondeterminism? --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- .../crates/types/src/constants.nr | 2 +- .../src/brillig/brillig_ir/artifact.rs | 2 +- .../noirc_evaluator/src/ssa/acir_gen/mod.rs | 35 +-- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 5 files changed, 138 insertions(+), 138 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 883f546a905..fcdecf5f63d 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,123 +9,122 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = - 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index c4b67523bc6..96e1e373edb 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -118,7 +118,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; +global DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/artifact.rs b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/artifact.rs index 8bd1bfda78f..8a4f469f5c9 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/artifact.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/brillig/brillig_ir/artifact.rs @@ -4,7 +4,7 @@ use std::collections::{BTreeMap, HashMap}; use crate::ssa::ir::dfg::CallStack; /// Represents a parameter or a return value of an entry point function. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Eq, PartialEq, Hash, PartialOrd, Ord)] pub(crate) enum BrilligParameter { /// A single address parameter or return value. Holds the bit size of the parameter. SingleAddr(u32), diff --git a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs index 3a469bb65ae..02b381d79fc 100644 --- a/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs +++ b/noir/noir-repo/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs @@ -52,12 +52,18 @@ struct SharedContext { /// There can be Brillig functions specified in SSA which do not act as /// entry points in ACIR (e.g. only called by other Brillig functions) /// This mapping is necessary to use the correct function pointer for a Brillig call. - brillig_generated_func_pointers: BTreeMap, + /// This uses the brillig parameters in the map since using slices with different lengths + /// needs to create different brillig entrypoints + brillig_generated_func_pointers: BTreeMap<(FunctionId, Vec), u32>, } impl SharedContext { - fn generated_brillig_pointer(&self, func_id: &FunctionId) -> Option<&u32> { - self.brillig_generated_func_pointers.get(func_id) + fn generated_brillig_pointer( + &self, + func_id: FunctionId, + arguments: Vec, + ) -> Option<&u32> { + self.brillig_generated_func_pointers.get(&(func_id, arguments)) } fn generated_brillig(&self, func_pointer: usize) -> &GeneratedBrillig { @@ -67,10 +73,11 @@ impl SharedContext { fn insert_generated_brillig( &mut self, func_id: FunctionId, + arguments: Vec, generated_pointer: u32, code: GeneratedBrillig, ) { - self.brillig_generated_func_pointers.insert(func_id, generated_pointer); + self.brillig_generated_func_pointers.insert((func_id, arguments), generated_pointer); self.generated_brillig.push(code); } @@ -356,7 +363,7 @@ impl<'a> Context<'a> { let outputs: Vec = vecmap(main_func.returns(), |result_id| dfg.type_of_value(*result_id).into()); - let code = self.gen_brillig_for(main_func, arguments, brillig)?; + let code = self.gen_brillig_for(main_func, arguments.clone(), brillig)?; // We specifically do not attempt execution of the brillig code being generated as this can result in it being // replaced with constraints on witnesses to the program outputs. @@ -370,7 +377,7 @@ impl<'a> Context<'a> { // We are guaranteed to have a Brillig function pointer of `0` as main itself is marked as unconstrained 0, )?; - self.shared_context.insert_generated_brillig(main_func.id(), 0, code); + self.shared_context.insert_generated_brillig(main_func.id(), arguments, 0, code); let output_vars: Vec<_> = output_values .iter() @@ -657,24 +664,17 @@ impl<'a> Context<'a> { } } let inputs = vecmap(arguments, |arg| self.convert_value(*arg, dfg)); + let arguments = self.gen_brillig_parameters(arguments, dfg); let outputs: Vec = vecmap(result_ids, |result_id| { dfg.type_of_value(*result_id).into() }); - // TODO(Alvaro) This is due to limitations in the calldatacopy opcode. - // We cannot currently reuse brillig entry points that have slice arguments. - let has_slice_argument = arguments.iter().any(|arg| { - let typ = dfg.type_of_value(*arg); - typ.contains_slice_element() - }); - // Check whether we have already generated Brillig for this function // If we have, re-use the generated code to set-up the Brillig call. let output_values = if let Some(generated_pointer) = self .shared_context - .generated_brillig_pointer(id) - .filter(|_| !has_slice_argument) + .generated_brillig_pointer(*id, arguments.clone()) { let code = self .shared_context @@ -689,8 +689,8 @@ impl<'a> Context<'a> { *generated_pointer, )? } else { - let arguments = self.gen_brillig_parameters(arguments, dfg); - let code = self.gen_brillig_for(func, arguments, brillig)?; + let code = + self.gen_brillig_for(func, arguments.clone(), brillig)?; let generated_pointer = self.shared_context.new_generated_pointer(); let output_values = self.acir_context.brillig_call( @@ -704,6 +704,7 @@ impl<'a> Context<'a> { )?; self.shared_context.insert_generated_brillig( *id, + arguments, generated_pointer, code, ); diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 223a3361fb4..df25375e53b 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From a2460038ba4c4668326133999e127e8a973c8507 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Wed, 17 Apr 2024 09:22:34 +0000 Subject: [PATCH 122/123] chore: fmt --- .../src/core/libraries/ConstantsGen.sol | 235 +++++++++--------- 1 file changed, 118 insertions(+), 117 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index fcdecf5f63d..1ece9792317 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -9,122 +9,123 @@ pragma solidity >=0.8.18; * @notice Library that contains constants used throughout the Aztec protocol */ library Constants { - // Prime field modulus - uint256 internal constant P = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - uint256 internal constant MAX_FIELD_VALUE = P - 1; + // Prime field modulus + uint256 internal constant P = + 21888242871839275222246405745257275088548364400416034343698204186575808495617; + uint256 internal constant MAX_FIELD_VALUE = P - 1; - uint256 internal constant ARGS_LENGTH = 16; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; - uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; - uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; - uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; - uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; - uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; - uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; - uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; - uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; - uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; - uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; - uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; - uint256 internal constant VK_TREE_HEIGHT = 3; - uint256 internal constant FUNCTION_TREE_HEIGHT = 5; - uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; - uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; - uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; - uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; - uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; - uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; - uint256 internal constant NULLIFIER_TREE_ID = 0; - uint256 internal constant NOTE_HASH_TREE_ID = 1; - uint256 internal constant PUBLIC_DATA_TREE_ID = 2; - uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; - uint256 internal constant ARCHIVE_TREE_ID = 4; - uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; - uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; - uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; - uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; - uint256 internal constant ARCHIVE_HEIGHT = 16; - uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; - uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; - uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; - uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; - uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; - uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; - uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; - uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; - uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; - uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; - uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; - uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = - 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; - uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; - uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = - 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; - uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = - 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; - uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; - uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; - uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; - uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; - uint256 internal constant MAX_NOTES_PER_PAGE = 10; - uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; - uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; - uint256 internal constant CALL_CONTEXT_LENGTH = 21; - uint256 internal constant GAS_SETTINGS_LENGTH = 10; - uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; - uint256 internal constant GAS_FEES_LENGTH = 3; - uint256 internal constant GAS_LENGTH = 3; - uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; - uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; - uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; - uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; - uint256 internal constant ETH_ADDRESS_LENGTH = 1; - uint256 internal constant FUNCTION_DATA_LENGTH = 2; - uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; - uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; - uint256 internal constant HEADER_LENGTH = 23; - uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; - uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; - uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; - uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; - uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; - uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; - uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; - uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; - uint256 internal constant STATE_REFERENCE_LENGTH = 8; - uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; - uint256 internal constant TX_REQUEST_LENGTH = 18; - uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; - uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; - uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; - uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; - uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; - uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; - uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; + uint256 internal constant ARGS_LENGTH = 16; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_CALL = 16; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_CALL = 16; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL = 4; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_CALL = 2; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL = 16; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_CALL = 16; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_CALL = 32; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL = 2; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_CALL = 1; + uint256 internal constant MAX_NEW_NOTE_HASHES_PER_TX = 64; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_TX = 64; + uint256 internal constant MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX = 8; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_TX = 32; + uint256 internal constant MAX_NEW_L2_TO_L1_MSGS_PER_TX = 2; + uint256 internal constant MAX_NOTE_HASH_READ_REQUESTS_PER_TX = 128; + uint256 internal constant MAX_NULLIFIER_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_TX = 8; + uint256 internal constant MAX_NULLIFIER_KEY_VALIDATION_REQUESTS_PER_TX = 4; + uint256 internal constant NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; + uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; + uint256 internal constant VK_TREE_HEIGHT = 3; + uint256 internal constant FUNCTION_TREE_HEIGHT = 5; + uint256 internal constant NOTE_HASH_TREE_HEIGHT = 32; + uint256 internal constant PUBLIC_DATA_TREE_HEIGHT = 40; + uint256 internal constant NULLIFIER_TREE_HEIGHT = 20; + uint256 internal constant L1_TO_L2_MSG_TREE_HEIGHT = 16; + uint256 internal constant ROLLUP_VK_TREE_HEIGHT = 8; + uint256 internal constant ARTIFACT_FUNCTION_TREE_MAX_HEIGHT = 5; + uint256 internal constant NULLIFIER_TREE_ID = 0; + uint256 internal constant NOTE_HASH_TREE_ID = 1; + uint256 internal constant PUBLIC_DATA_TREE_ID = 2; + uint256 internal constant L1_TO_L2_MESSAGE_TREE_ID = 3; + uint256 internal constant ARCHIVE_TREE_ID = 4; + uint256 internal constant NOTE_HASH_SUBTREE_HEIGHT = 6; + uint256 internal constant NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH = 26; + uint256 internal constant NULLIFIER_SUBTREE_HEIGHT = 6; + uint256 internal constant PUBLIC_DATA_SUBTREE_HEIGHT = 5; + uint256 internal constant ARCHIVE_HEIGHT = 16; + uint256 internal constant NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH = 14; + uint256 internal constant PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH = 35; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_HEIGHT = 4; + uint256 internal constant L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH = 12; + uint256 internal constant FUNCTION_SELECTOR_NUM_BYTES = 4; + uint256 internal constant ARGS_HASH_CHUNK_LENGTH = 64; + uint256 internal constant ARGS_HASH_CHUNK_COUNT = 64; + uint256 internal constant INITIALIZATION_SLOT_SEPARATOR = 1000_000_000; + uint256 internal constant INITIAL_L2_BLOCK_NUM = 1; + uint256 internal constant BLOB_SIZE_IN_BYTES = 126976; + uint256 internal constant NESTED_CALL_L2_GAS_BUFFER = 20000; + uint256 internal constant MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS = 16000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant MAX_PACKED_BYTECODE_SIZE_PER_UNCONSTRAINED_FUNCTION_IN_FIELDS = 3000; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 19; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_ADDITIONAL_FIELDS = 12; + uint256 internal constant REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE = + 0x6999d1e02b08a447a463563453cb36919c9dd7150336fc7c4d2b52f8; + uint256 internal constant REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0x1b70e95fde0b70adc30496b90a327af6a5e383e028e7a43211a07bcd; + uint256 internal constant REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = + 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99; + uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = + 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; + uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = + 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; + uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; + uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; + uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; + uint256 internal constant MAX_NOTES_PER_PAGE = 10; + uint256 internal constant VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; + uint256 internal constant AZTEC_ADDRESS_LENGTH = 1; + uint256 internal constant CALL_CONTEXT_LENGTH = 21; + uint256 internal constant GAS_SETTINGS_LENGTH = 10; + uint256 internal constant DIMENSION_GAS_SETTINGS_LENGTH = 3; + uint256 internal constant GAS_FEES_LENGTH = 3; + uint256 internal constant GAS_LENGTH = 3; + uint256 internal constant CONTENT_COMMITMENT_LENGTH = 4; + uint256 internal constant CONTRACT_INSTANCE_LENGTH = 6; + uint256 internal constant CONTRACT_STORAGE_READ_LENGTH = 2; + uint256 internal constant CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 2; + uint256 internal constant ETH_ADDRESS_LENGTH = 1; + uint256 internal constant FUNCTION_DATA_LENGTH = 2; + uint256 internal constant FUNCTION_LEAF_PREIMAGE_LENGTH = 5; + uint256 internal constant GLOBAL_VARIABLES_LENGTH = 9; + uint256 internal constant HEADER_LENGTH = 23; + uint256 internal constant L1_TO_L2_MESSAGE_LENGTH = 6; + uint256 internal constant L2_TO_L1_MESSAGE_LENGTH = 2; + uint256 internal constant MAX_BLOCK_NUMBER_LENGTH = 2; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_LENGTH = 4; + uint256 internal constant NULLIFIER_KEY_VALIDATION_REQUEST_CONTEXT_LENGTH = 5; + uint256 internal constant PARTIAL_STATE_REFERENCE_LENGTH = 6; + uint256 internal constant PRIVATE_CALL_STACK_ITEM_LENGTH = 224; + uint256 internal constant PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 221; + uint256 internal constant PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 215; + uint256 internal constant STATE_REFERENCE_LENGTH = 8; + uint256 internal constant TX_CONTEXT_DATA_LENGTH = 4; + uint256 internal constant TX_REQUEST_LENGTH = 18; + uint256 internal constant ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH = 25; + uint256 internal constant GET_NOTES_ORACLE_RETURN_LENGTH = 674; + uint256 internal constant NOTE_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = 2048; + uint256 internal constant CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = 32; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP_UNPADDED = 52; + uint256 internal constant L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = 64; + uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 4; + uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } From 94b6c72ce197ec7f8f7c4e9c50d53968942eb11e Mon Sep 17 00:00:00 2001 From: thunkar Date: Wed, 17 Apr 2024 09:26:15 +0000 Subject: [PATCH 123/123] changed publiccontext, updated deployer address --- .../src/core/libraries/ConstantsGen.sol | 2 +- noir-projects/aztec-nr/authwit/src/auth.nr | 2 +- .../aztec-nr/aztec/src/context/avm_context.nr | 16 ++--- .../aztec-nr/aztec/src/context/interface.nr | 64 ++++++------------- .../aztec/src/context/public_context.nr | 26 ++++---- .../src/main.nr | 11 +++- .../contracts/parent_contract/src/main.nr | 15 +++-- .../crates/types/src/constants.nr | 2 +- yarn-project/circuits.js/src/constants.gen.ts | 2 +- .../simulator/src/avm/avm_simulator.test.ts | 2 +- 10 files changed, 63 insertions(+), 79 deletions(-) diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 1ece9792317..883f546a905 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -83,7 +83,7 @@ library Constants { uint256 internal constant DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; uint256 internal constant DEPLOYER_CONTRACT_ADDRESS = - 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; + 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; uint256 internal constant L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; uint256 internal constant MAX_NOTE_FIELDS_LENGTH = 20; uint256 internal constant GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/noir-projects/aztec-nr/authwit/src/auth.nr b/noir-projects/aztec-nr/authwit/src/auth.nr index 643f725e2f2..55c15acec77 100644 --- a/noir-projects/aztec-nr/authwit/src/auth.nr +++ b/noir-projects/aztec-nr/authwit/src/auth.nr @@ -37,7 +37,7 @@ pub fn assert_current_call_valid_authwit_public( context, on_behalf_of, function_selector, - [inner_hash], + [inner_hash].as_slice(), GasOpts::default() ).deserialize_into(); assert(result == IS_VALID_SELECTOR, "Message not authorized by account"); diff --git a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr index 86c8ca23dcc..c3379ea7419 100644 --- a/noir-projects/aztec-nr/aztec/src/context/avm_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/avm_context.nr @@ -136,17 +136,17 @@ impl PublicContextInterface for AvmContext { send_l2_to_l1_msg(recipient, content); } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns { let results = call( gas_for_call(gas_opts), contract_address, - args.as_slice(), + args, temporary_function_selector.to_field() ); let data_to_return: [Field; RETURNS_COUNT] = results.0; @@ -156,17 +156,17 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, temporary_function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns { let (data_to_return, success): ([Field; RETURNS_COUNT], u8) = call_static( gas_for_call(gas_opts), contract_address, - args.as_slice(), + args, temporary_function_selector.to_field() ); @@ -174,11 +174,11 @@ impl PublicContextInterface for AvmContext { FunctionReturns::new(data_to_return) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns { assert(false, "'delegate_call_public_function' not implemented!"); FunctionReturns::new([0; RETURNS_COUNT]) diff --git a/noir-projects/aztec-nr/aztec/src/context/interface.nr b/noir-projects/aztec-nr/aztec/src/context/interface.nr index aa0b22314e2..d087160c654 100644 --- a/noir-projects/aztec-nr/aztec/src/context/interface.nr +++ b/noir-projects/aztec-nr/aztec/src/context/interface.nr @@ -36,25 +36,25 @@ trait PublicContextInterface { fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress); fn accumulate_encrypted_logs(&mut self, log: [Field; N]); fn accumulate_unencrypted_logs(&mut self, log: T); - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns; - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], gas_opts: GasOpts ) -> FunctionReturns; - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns; fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool; } @@ -215,15 +215,8 @@ struct AvmCallInterface { impl AvmCallInterface { pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) -> T where T: Deserialize { - let (data_to_return, success) = context.call_public_function_raw( - gas_opts, - self.target_contract, - self.selector.to_field(), - self.args - ); - assert(success == 1, "Nested call failed!"); - - FunctionReturns::new(data_to_return).deserialize_into() + let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.deserialize_into() } pub fn static_call( @@ -231,19 +224,13 @@ impl AvmCallInterface { context: &mut AvmContext, gas_opts: GasOpts ) -> T where T: Deserialize { - let (data_to_return, success) = context.static_call_public_function_raw( - gas_opts, - self.target_contract, - self.selector.to_field(), - self.args - ); - assert(success == 1, "Nested call failed!"); - - FunctionReturns::new(data_to_return).deserialize_into() + let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.deserialize_into() } - pub fn delegate_call(self, context: &mut AvmContext) { - assert(false, "'delegate_call_public_function' not implemented!"); + pub fn delegate_call(self, context: &mut AvmContext) -> T where T: Deserialize { + let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); + returns.deserialize_into() } } @@ -255,30 +242,17 @@ struct AvmVoidCallInterface { impl AvmVoidCallInterface { pub fn call(self, context: &mut AvmContext, gas_opts: GasOpts) { - let (data_to_return, success) = context.call_public_function_raw( - gas_opts, - self.target_contract, - self.selector.to_field(), - self.args - ); - assert(success == 1, "Nested call failed!"); - - FunctionReturns::new(data_to_return).assert_empty() + let returns = context.call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.assert_empty() } pub fn static_call(self, context: &mut AvmContext, gas_opts: GasOpts) { - let (data_to_return, success) = context.static_call_public_function_raw( - gas_opts, - self.target_contract, - self.selector.to_field(), - self.args - ); - assert(success == 1, "Nested call failed!"); - - FunctionReturns::new(data_to_return).assert_empty() + let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, gas_opts); + returns.assert_empty() } pub fn delegate_call(self, context: &mut AvmContext) { - assert(false, "'delegate_call_public_function' not implemented!"); + let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args); + returns.assert_empty() } } diff --git a/noir-projects/aztec-nr/aztec/src/context/public_context.nr b/noir-projects/aztec-nr/aztec/src/context/public_context.nr index 6ee662d5844..cdbbb3e939b 100644 --- a/noir-projects/aztec-nr/aztec/src/context/public_context.nr +++ b/noir-projects/aztec-nr/aztec/src/context/public_context.nr @@ -5,7 +5,7 @@ use crate::{ }, messaging::process_l1_to_l2_message, oracle::{arguments, public_call::call_public_function_internal, returns}, - hash::{hash_args_array, ArgsHasher} + hash::{hash_args, ArgsHasher} }; use dep::protocol_types::{ abis::{ @@ -291,38 +291,38 @@ impl PublicContextInterface for PublicContext { // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) } - fn call_public_function( + fn call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false) } - fn static_call_public_function( + fn static_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT], + args: [Field], _gas: GasOpts ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false) } - fn delegate_call_public_function( + fn delegate_call_public_function( self: &mut Self, contract_address: AztecAddress, function_selector: FunctionSelector, - args: [Field; ARGS_COUNT] + args: [Field] ) -> FunctionReturns { - let args_hash = hash_args_array(args); - assert(args_hash == arguments::pack_arguments_array(args)); + let args_hash = hash_args(args); + assert(args_hash == arguments::pack_arguments(args)); self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true) } } diff --git a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr index c1af41666e9..bece62fc8dc 100644 --- a/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/avm_acvm_interop_test_contract/src/main.nr @@ -42,7 +42,7 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_acvm()"), - [], + [].as_slice(), GasOpts::default() ).deserialize_into() } @@ -52,14 +52,19 @@ contract AvmAcvmInteropTest { context.call_public_function( context.this_address(), FunctionSelector::from_signature("constant_field_avm()"), - [], + [].as_slice(), GasOpts::default() ).deserialize_into() } #[aztec(public-vm)] fn avm_to_acvm_call(selector: FunctionSelector, args: Field) { - context.call_public_function(context.this_address(), selector, [args], GasOpts::default()).assert_empty(); + context.call_public_function( + context.this_address(), + selector, + [args].as_slice(), + GasOpts::default() + ).assert_empty(); } /************************************************************************ diff --git a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr index f1f9169ab95..fb066de5ad6 100644 --- a/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr +++ b/noir-projects/noir-contracts/contracts/parent_contract/src/main.nr @@ -20,7 +20,7 @@ contract Parent { context.call_public_function( target_contract, target_selector, - [init_value], + [init_value].as_slice(), GasOpts::default() ).deserialize_into() } @@ -35,13 +35,13 @@ contract Parent { let return_value: Field = context.call_public_function( target_contract, target_selector, - [init_value], + [init_value].as_slice(), GasOpts::default() ).deserialize_into(); context.call_public_function( target_contract, target_selector, - [return_value], + [return_value].as_slice(), GasOpts::default() ).deserialize_into() } @@ -189,7 +189,12 @@ contract Parent { target_selector: FunctionSelector, args: [Field; 1] ) -> Field { - context.static_call_public_function(target_contract, target_selector, args, GasOpts::default()).deserialize_into() + context.static_call_public_function( + target_contract, + target_selector, + args.as_slice(), + GasOpts::default() + ).deserialize_into() } // Public function to set a static context and verify correct propagation for nested public calls @@ -205,7 +210,7 @@ contract Parent { context.static_call_public_function( this_address, pub_entry_point_selector, - [target_contract.to_field(), target_selector.to_field(), args[0]], + [target_contract.to_field(), target_selector.to_field(), args[0]].as_slice(), GasOpts::default() ).deserialize_into() } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index 96e1e373edb..c4b67523bc6 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -118,7 +118,7 @@ global REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af8166354 // CONTRACT INSTANCE CONSTANTS // sha224sum 'struct ContractInstanceDeployed' global DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631; -global DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888; +global DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839; // NOIR CONSTANTS - constants used only in yarn-packages/noir-contracts // Some are defined here because Noir doesn't yet support globals referencing other globals yet. diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index df25375e53b..223a3361fb4 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x03638ce1f1e640380d70f496c8272c4065b1bcca2bfe1dd62915e300ae34b888n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x0b98aeb0111208b95d8d71f484f849d7ab44b3e34c545d13736a707ce3cb0839n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; diff --git a/yarn-project/simulator/src/avm/avm_simulator.test.ts b/yarn-project/simulator/src/avm/avm_simulator.test.ts index 941434004b6..051c3432de3 100644 --- a/yarn-project/simulator/src/avm/avm_simulator.test.ts +++ b/yarn-project/simulator/src/avm/avm_simulator.test.ts @@ -907,7 +907,7 @@ describe('AVM simulator: transpiled Noir contracts', () => { const results = await new AvmSimulator(context).executeBytecode(callBytecode); expect(results.reverted).toBe(true); // The outer call should revert. - expect(results.revertReason?.message).toMatch(/Nested call failed/); + expect(results.revertReason?.message).toMatch(/Nested static call failed/); }); }); });